воскресенье, 25 ноября 2012 г.

Идеи навеянные изучением конечных и бесконечных машин и квантовой электродинамики (КЭД). Part 1.


Возникло несколько идей, которые можно попробовать применить в программировании.
Идея № 1.
Начнём с КЭД. Если кому-то интересна эта тема, советую прочитать книжку Ричарда Фейнмана "КЭД - странная теория света и вещества". В КЭД свет описывается как поток частиц и все различные волновые свойства света, такие как дифракция, интерференция, отражение света, фокусировка с помощью линз, объясняются с этой точки зрения.
Не переключайтесь! Будет интересно!.

четверг, 22 ноября 2012 г.

О вычислениях, машинах Тьюринга и других интересных вещах. Part 2


По материалам Марвина Мински “Вычисления и автоматы”.
Как было указано в предыдущей части, для любой эффективной процедуры мы можем составить машину Тьюринга (МТ). Т.е. если у нас есть какой-то алгоритм, например алгоритм нахождения простых чисел, то одним из способов его реализации может быть МТ  (пока не будем вдаваться в тонкости работы МТ, этот вопрос мы обсудим позже на нескольких примерах).
Пойдём дальше. Наверное, не очень удобно собирать для каждой задачи свою МТ. А можно ли составить такую МТ, которая в качестве входных данных получает описание другой МТ и данные для неё?

среда, 21 ноября 2012 г.

О вычислениях, машинах Тьюринга и других интересных вещах. Part 1


Хотелось немного просвещать вопросы, связанные с вычислениями, машинами Тьюринга и т.п. На абсолютную корректность того, что излагаю, не претендую, это просто различные выдержки из книг, журналов и других источников, прошедшие через мою голову. За правки и комментарии буду очень благодарен.
При изучении вопроса о вычислениях одним из первых всплывает понятие алгоритма. Алгоритм (или эффективная процедура) как говорит Википедия -  набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий.
Если какую-либо процедуру мы можем вычислить механически (т.е. на какой-то машине, или просто вручную), то такую процедуру будем называть эффективной. И обратно, если процедуру мы называем эффективной, то её можно реализовать механически. А каким требованиям отвечает “эффективная процедура”?

пятница, 26 октября 2012 г.

Эквивалентность конечного автомата "нейронной сети"


В книге Марвина Минского «Вычисления и автоматы» наткнулся на одну интересную теорему: «всякая конечная машина эквивалентна некоторой нейронной сети и может быть «смоделирована» ею». Суть заключается в том, что для любой конечной машины можно составить эквивалентную ей нейронную сеть, но это не самое замечательное. Интерес представляет универсальный метод построения нейронной сети по автомату!
Рассмотрим данную задачу на примере. Для начала определимся с терминологией. Раз за основу взята книжка Минского, то воспользуемся определениями из неё. Конечные автоматы это такие машины, которые переходят чётко разграниченными шагами из одного состояния в другое, причём оба этих набора принадлежат к некоторому конечному набору. Конечный автомат можно рассматривать как «чёрный ящик», который характеризуется определённой величиной (обобщённое состояние), Это обобщённое состояние изменяется в соответствии с предыдущими состояниями и входным сигналом (т.е. средой). С другой стороны данную машину можно представить как структуру, состоящую из отдельных элементов. Зная логику работы и связи между элементами, мы можем сказать, как эта система будет работать.

воскресенье, 26 февраля 2012 г.

Интерпретаторы и компиляторы. Part 3.


В этой части мы сосредоточимся на грамматиках и иерархии Хомского.
Грамматику, по Хантеру, можно рассмотреть как следующую структуру:
(VT, VN, P, S)
VT – алфавит терминалов,
VN – алфавит нетерминалов,
Необходимо отметить, что множества VT и VN не пересекаются, а их объединение будем обозначать V.
P – множество правил. Каждое правило состоит из левой и правой частей и записывается так: q r.
S – аксиома грамматики. С неё начинается генерация строк языка с данной грамматикой.
Теперь мне бы хотелось процитировать Хантера: “Грамматика используется для генерации последовательностей символов составляющих строки языка, начиная с аксиомы и последовательно заменяя её с помощью одного из порождений грамматики”.

суббота, 25 февраля 2012 г.

Интерпретаторы и компиляторы. Part 2.

Продолжаем наш разговор об интерпретаторах и компиляторах. Сегодня опять в большей степени я буду касаться теоретических вопросов, потому что до практики пока довольно далеко. Да и хотелось бы обсудить некоторые интересные вещи, связанные с языком и его представлением. Ряд положений может показаться довольно банальными, но попрошу вас немного потерпеть, потому что на их базе мы будем строить всё наше здание.
Поговорим немного о синтаксических конструкциях.

четверг, 23 февраля 2012 г.

ProcessWatcher. Part 3.

      Ну а теперь я предлагаю кратко рассмотреть программный код. Хочу сразу предупредить: код писался примерно с такой же скоростью, с какой мысли, по поводу того, что и как я хочу видеть в окошке консоли, у меня появлялись. Т.е. другими словами никакого предварительного планирования архитектуры не производилось и к правомерности использования тех или иных функций должного внимания уделено не было. Через некоторое время стало ясно, что list - скорее всего был не лучший вариант, нужно будет немного подумать и переписать, если лень не сделает свое дело)). Ну и сам набор методов можно было спроектировать по другому, более универсально. Но всё это дело недалёкого будущего, пока у нас есть некоторая база, с ней и будем работать.