Все, что разработчику нужно знать про машины Тьюринга, — простым языком
Разработчик программного обеспечения Валерий Жила объяснил, как устроены машины Тьюринга. По его словам, когда он начинал разбираться с этой концепцией, у него разболелась голова. Теперь же специалист считает, что в ней нет ничего сложного. Что это за машины и зачем они нужны, разработчик максимально просто объяснил в треде.
Примечание: машина Тьюринга (МТ) — это абстракция из мира Computer Science, которой не существует в физическом мире.
Обычная машина Тьюринга состоит из трех частей, из которых первые две технические, а в третьей, по словам Валерия, происходит магия. Они называются:
Указатель обозначается стрелкой, как показано на рисунке ниже, и всегда указывает на одну ячейку. Этот элемент может следующее:
Пример: указатель стоит на ячейке, в которой содержится число «два». В таком положении он может прочитать ее содержимое, перезаписать или поменять свое положение.
Указатель может двигаться тремя способами:
Запишем в ячейку ноль и переместим указатель на одну ячейку влево. Вот что получится:
Все действия машин строятся следующим образом:
Вышеописанное действие можно описать как (2,0,L), то есть: читаем два, пишем ноль, едем влево.
Движение часто обозначают так:
В примере выше была лента из трех ячеек. Этого мало. Давайте рассмотрим из семи. Автор пронумеровал их от -3 до 3.
Примем за правило, что при запуске машины указатель всегда находится над ячейкой под номером 0.
Примечание: указанные номера изображены только для наглядности, в настоящей МТ их нет, и она не может «прыгнуть» на ячейку с конкретным номером. У машин Тьюринга нет Random Access.
По умолчанию ячейки заполнены «пустыми символами». Это делают для того, чтобы при прочтении можно было проверить, пусто ли поле. Пустые символы обозначают простыми пустыми ячейками или символом space.
Лента машины Тьюринга похожа на вышеописанную, но состоит не из семи ячеек, а бесконечна направо и налево. Так как в МТ нет никакой нумерации, достаточно того, что при запуске указатель находится в середине ленты, поэтому можно бесконечно долго двигаться в обе сторон, а также читать с ленту и записывать на нее.
В основном машины Тьюринга бывают двух видов:
TRUE
или FALSE
.По словам Валерия, МТ второго типа намного важнее, сложнее и интереснее первого для Computer Science.
На ленте могут стоять только заранее определенные символы, и они не могут добавляться по ходу работы машины. Для большинства задач с входными данными, закодированными двоичным кодом, удобно пользоваться тремя символами 1,0 и # для разграничения. Плюс «пустой» символ.
Вводные данные машины, например, число, для которого нужно проверить, является ли оно простым, стоят перед запуском машины в выбранной кодировке на ленте, справа от указателя. Например, вот так бы выглядело число 9 (=1001 в двоичной системе) в качестве вводных данных:
Программа машины отвечает за логику движения указателя, за «состояния» и «переходы» между ними, которые для этого необходимы. Если указатель и бесконечна лента есть у всех МТ, то именно в программе содержится то, что делает каждую машину Тьюринга уникальной. Программа — это то, что отличает машину, проверяющую числа на простоту от машины, которая считает связность графа.
Примечание: понятия состояние и переход между состояниями известны из модели конечных автоматов, потому что, по словам автора, МТ — это их модификации, которые могут работать с внешним хранилищем информации (лентой машины Тьюринга), поэтому программу МТ удобнее всего представлять конечным автоматом, который перемещается между состояниями, пишет на ленту, читает с нее и двигает указатель.
Пример: возьмем программу, которая отзеркаливает последовательность 0 и 1, стоящую на ленте, то есть делает String.reverse
. Например, 01011 будет трансформировано в 11010.
Примечание: программы ТМ зачастую большие и сложные, делают кучу странной мишуры, постоянно ездят из конца слова в другой конец. Это вытекает из максимальной простоты инструментов ТМ. Программа машины Тьюринга может выполнить любую алгоритмически решаемую задачу, но на это будет затрачено огромное количество времени.
Ниже показано, как будет выглядеть программа МТ, которая будет переворачивать строку. Автор предпочел не разбирать ее подробно, потому что даже такая простая задача может занять ни один час.
Принцип работы программы:
И так по одной букве, катаясь туда-сюда, МТ отзеркалит заданное слово. Когда оно закончится, останется только стереть все # с лент и закончить работу.
Ниже приведен пример работы этой программы для слова 10, состоящего из двух букв:
Вот и все!
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…