МАТЕМАТИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ
Понедельник, 30.03.2026, 17:34
ГлавнаяРегистрацияВход Приветствую Вас Гость | RSS

Меню сайта

Категории раздела
Машина Тьюринга [4]
Машина Поста [2]
Практика [2]
Это интересно [1]
ЗАДАНИЕ 4 [1]

Наш опрос
Какой язык программирования Вы изучаете
Всего ответов: 1030

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Файлы » УТОЧНЕНИЕ ПОНЯТИЯ АЛГОРИТМА » Машина Тьюринга

Примеры операций МТ
08.01.2013, 21:16

Примеры операций МТ


Свои идеи Тьюринг изложил в небольшой статье, опубликованной в трудах Лондонского математического общества в 1936 году [7] и несколько позже в небольшом трехстраничном добавлении к ней.

Замечу, что, как это ни парадоксально, одна из наиболее важных – если не самая важная – в истории computer science статья так никогда и не была переведа на русский язык, и желающему ознакомиться с ней придется читать ее на языке оригинала. Аналогичная ситуация, кстати, сложилась и со статьей Курта Геделя, в которой изложены его фундаментальные результаты о неполноте арифметики.

Идея Тьюринга была великолепной (одним из первых, кстати, это оценил уже упоминавшийся Алонзо Черч, благодаря которому конструкция и получила название «машина Тьюринга»). Тьюринг совершил настоящий научный подвиг – он нашел в себе мужество взглянуть на проблему с иной точки зрения (обращаю внимание читателя на эпиграф к статье). И это привело его к успеху.

Машина, которую построил Тьюринг, была очень простой, и в этом заключался большой смысл – ему нужно было быть уверенным, что ее использование не привнесет в проблему разрешения новых логических сложностей.

Существует несколько настоящих из «крови и плоти» моделей машины Тьюринга. Наиболее интересная из них, на мой взгляд, представлена на сайте http://aturingmachine.com. Там же заинтересованный читатель может найти описание механической и электронной частей модели.

Но простота конструкции отнюдь не значила, что машина Тьюринга мало на что пригодна – вот уж нет. Это полноценный компьютер, нисколько не слабее любых самых современных и мощных машин, разве что очень примитивно устроенный. И в этой самой простоте – залог успеха: простота не закрывала саму проблему, а помогала ее решить.

В многочисленных книгах по математической логике, теории рекурсивных функций и информатике машина Тьюринга описана описана не раз и не два. Все эти описания в равной степени эквиваленты, но порой довольно значительно отличаются в технических деталях. Выбрать из них лучшее – задача сложная. Возможно, это был вариант, предложенный Марвином Минским [8], кстати, одним из лауреатов премии Тьюринга. Я тем не менее не буду отклоняться от варианта, предложенного самим Тьюрингом в его статье.

Тьюринг воспользовался блестящей находкой Геделя – кодированием вычислимых функций (т.е. функций, вычислимых посредством алгоритмов). Класс таких функций – они называются рекурсивными – очень широк: практически все сколько-нибудь значимые математические функции являются вычислимыми. Гедель придумал способ, как сопоставить каждой из таких функций уникальное натуральное число. Теперь можно было рассуждать о вычислимых функциях, оперируя натуральными числами.

В основе кодирования Геделя лежит так называемая основная теорема арифметики: всякое натуральное число может быть единственным (до порядка множителей) образом разложено на произведение простых чисел. Скажем, число 10 единственным образом можно разложить (современный термин – «факторизовать») в виде 2х5; число 20 можно единственным образом разложить как произведение 2 х 2 х 5 или 22 х 5 и т.д.

Посредством этого метода Гедель смог закодировать все арифметические утверждения и вывести путем тонких рассуждений свои теоремы о неполноте.

Я здесь не буду воспроизводить доказательство, данное Тьюрингом, о неразрешимости entscheidungsproblem – мне не хочется создавать иллюзию понимания; само по себе доказательство просто, но «головоломно» (эта характеристика принадлежит М. Минскому).

В действительности доказательство опирается на возможность задания машине Тьюринга описания самой себя. Машина Тьюринга, способная выполнять программы, описывающие ее работу (т.е. программа, получающая саму себя на входе), называется универсальной машиной Тьюринга. Ничего необычного в таком «самоприменении» (от англ. self-referencing) нет – это пример рекурсивной функции, подобной классическим функциям факториала или последовательности Фибоначчи, правда, несколько необычного вида.

Будет куда интереснее и полезнее либо найти и попытаться прочитать статью самого Тьюринга, либо воспользоваться хорошим университетским учебником по теории рекурсивных функций (я рекомендую, помимо упомянутой выше книги М. Минского, следующие: [9-11] и особенно вышедшую совсем недавно научно-популярную книгу [12].

Немногие математики того времени сумели понять значение статьи Тьюринга. Из крупных математиков, кроме Алонзо Черча, следует упомянуть, пожалуй, лишь Джона фон Неймана, который не только очень высоко оценил результаты, полученные Тьюрингом, но и активно рекомендовал его статью своим коллегам. Увы, такова судьба многих великих открытий. Справедливости ради надо отметить, что работа Тьюринга недолго была в тени, и менее чем через 20 лет математики отдали ему должное.

Важное открытие

Машина Тьюринга (далее я буду использовать сокращение «МТ») – это воображаемое устройство, состоящее из бесконечной ленты, разделенной на ячейки и головки чтения/записи. В оригинальной МТ ячейка может содержать символы трех типов: 0, 1 и быть пустой (в последнем случае ячейка не содержит ни 0, ни 1, и ее удобно обозначить через «-»).

Замечу, что МТ не налагает ограничений на используемый набор символов: можно применять любые символы, которые программист сочтет нужным, – это существенно упрощает составление программ для МТ (вскоре будет приведен соответствующий пример).

В каждый отдельный момент времени головка находится над одной из ячеек и считывает ее содержимое. В зависимости от содержимого ячейки МТ может выполнить одну из следующих операций: стереть текущее содержимое ячейки (операция «E»), напечатать что-либо в ячейке («P»), сдвинуть головку вдоль ленты на одну ячейку влево («L») или вправо («R»). Полезна и еще одна операция – останов («H»).

Всякий раз МТ находится в одном из помеченных состояний (такая пометка может быть чем угодно – буквой, словом или числом – главное, чтобы МТ была в состоянии отличить одно состояние от других). Работа МТ состоит в считывании символа из ячейки, над которой находится головка, выполнении некоторых операций и переходе к следующему состоянию.

Следующее состояние – вовсе не обязательно состояние, текстуально следующее за текущим состоянием; оно может располагаться на значительном «удалении» от текущего.

Операций может быть не одна, а несколько (например, стереть символ, напечатать 1, сдвинуть головку влево, что можно записать как «E, P1, L»). Разумеется, проще всего работу МТ продемонстрировать на нескольких примерах, чем я сейчас и займусь.

Пример 1

На пустой ленте напечатать пять единиц и остановиться.

Состояние   Текущий символ   Операция   Следующее состояние
    a              -           P1, R             b
    b              -           P1, R             c
    c              -           P1, R             d
    d              -           P1, R             e
    e              -           P1, H

Легко проверить, что эта программа МТ действительно печатает на пустой ленте последовательность «11111», после чего останавливается.

Пример 2

На пустой ленте напечатать последовательность из 0 и 1.

Состояние   Текущий символ   Операция   Следующее состояние
    a              -           P1, R             b
    b              -           P0, R             a

Эта программа МТ, никогда не останавливаясь, будет печатать последовательность «101010...». Это не должно нас беспокоить, т.к. лента МТ также бесконечна. Главное в этом примере то, что из него видно, как в программе для МТ можно организовать цикл.

Пример 3

На пустой ленте напечатать последовательность из 0 и 1, разделенных пустым символом (это, кстати, самый первый пример из статьи Тьюринга, в котором я только изменил обозначения состояний).

Состояние   Текущий символ   Операция   Следующее состояние
    a              -           P0, R             b
    b              -             R               с
    c              -           P1, R             d
    d              -             R               a

На ленте будет напечатано «0-1-0-1-0-1-0...», и так до бесконечности (я использовал символ «-» для обозначения пробела).

Пример 4

Сложение чисел. На ленте имеются два числа, представленные в единичной форме (т.е. число «3» представляется как последовательность «111»), разделенных одной пустой ячейкой. Записать на ленте последовательность, представляющую собой сумму двух чисел.

Пусть информация на ленте МТ представлена в виде «-111-11111-». По окончании работы программы на ленте должна остаться последовательность «-11111111-». Головка МТ в начале работы считывает самую левую единицу.

Состояние   Текущий символ   Операция   Следующее состояние
    a              1              R              a
    a              -            P1, R            b
    b              1              R              b
    b              -              L              c
    c              1             E, H

Обращаю внимание, что начальных (текстуально в программе – самых левых) состояний может быть сколько угодно. МТ может находиться в состоянии b и считывать символ 1, а может находиться в том же состоянии, но считывать пустой символ. Таким образом, программы МТ носят условный характер: при заданном состоянии и текущем символе требуется выбрать ту или иную операцию.

Программа работает так: первая последовательность из единиц сканируется слева направо до тех пор, пока не будет обнаружена ячейка, содержащая пустой символ. В эту ячейку записывается единица. Теперь общее число единиц на ленте ровно на одну больше, чем надо. Чтобы «скорректировать» сумму к правильному значению, необходимо найти самую правую единицу, стереть ее и остановиться. Упрощенно ход работы МТ выглядит так: «-111-11111-» «-111111111-» «-11111111-», где выделены единица, записанная вместо пустого символа, и «лишняя» единица в конце промежуточной последовательности.

В заключение я хочу предложить читателям несколько упражнений (в порядке возрастания сложности) для развития навыков программирования для МТ.

  • Упражнение 1: написать программу, перемножающую два числа, записанных в формате предыдущего примера.
  • Упражнение 2: написать программу, вычитающую одно число из другого.

В этом упражнении есть маленький подвох: чему равна разность двух чисел, обозначенных как «a» и «b», если a < b? Ведь для натуральных чисел (т.е. для чисел из ряда 0, 1, 2...) операция вычитания не всюду определена – отрицательных чисел «не предусмотрено». Обычно математики определяют операцию вычитания на натуральных числах так: если a ? b, то разность вычисляется как обычно; если a < b, то разность a и b равна 0 (т.н. «усеченная» разность).

  • Упражнение 3: проверка правильности вложения скобок. Имеется строка, состоящая из произвольного количества символов «(» и «)». В строке «(())» скобки сбалансированы, равно как и в последовательности «(()(()))». А вот для строк «()(» и «)()(» скобки не сбалансированы. Написать программу для МТ, которая проверяет баланс скобок.

Тут основная сложность в том, что количество скобок и количество уровней их вложенности заранее не известны (указание: удобно расширить набор символов МТ, включив в него дополнительные символы «(» и «)» и тем самым избегнув проблемы кодирования скобок нулями и единицами).

Не скрою, это упражнение весьма сложное: надо будет предусмотреть все возможные варианты сочетания символов, так что любителям ребусов будет над чем поломать голову. Обязательно проверьте решение на нескольких вариантах последовательностей скобок.

Несложно написать программу на любом высокоуровневом языке программирования, которая эмулирует работу МТ. Такой программе можно «поручить» проверку программ для МТ. Много таких программ можно найти в Интернете (правда, не исключено, что для них придется немного поправить исходные тексты программ, приведенных в статье).

  • Упражнение 4: подпрограммы. В этом упражнении я предлагаю поразмышлять над тем, как смоделировать на МТ концепцию подпрограмм. Где и как должен сохраняться адрес возврата? Это интересная задача для любителей нестандартных решений.

***

Когда-то выдающийся американский физик-теоретик Ричард Фейнман в своих знаменитых «Фейнмановских лекциях по физике» (правда, по иному поводу) сказал: «...мы сможем продемонстрировать одно из прекрасных свойств... – как много в ней удается вывести из столь малого».

Работа Алана М. Тьюринга по праву может считаться классической иллюстрацией слов Фейнмана. Действительно, кто бы мог предположить, что математическая статья в специализированном журнале по малопонятной и далекой от повседневных проблем тематике, к тому же написанная практически не известным математиком, окажет такое воздействие на нашу цивилизацию. Но не прошло и 20 лет, как компьютеры стали производиться в промышленных масштабах. Поначалу это были огромные многотонные чудовища, пожирающие сотни киловатт электроэнергии и способные обогреть выделявшимся теплом целый квартал. Их программирование было немногим легче, чем программирование МТ. Но очень скоро компьютеры, причем куда более мощные, чем, вероятно, даже Тьюринг мог себе вообразить, уменьшились в размерах до крохотных пластинок и капсул, встраиваемых в автомобили, телевизоры, стиральные машины и космические спутники.

Как бы ни отличались современные компьютеры и в особенности их программное обеспечение от того, что когда-то на прогулках по парку придумал Тьюринг, все они фактически являются потомками великого изобретения – машины Тьюринга.


Материал с сайта http://samag.ru/archive/article/1092

Категория: Машина Тьюринга | Добавил: i_elf
Просмотров: 7072 | Загрузок: 0 | Комментарии: 190 | Рейтинг: 0.0/0
Всего комментариев: 211 2 3 »
21 gotovye_owOt  
0
Оптимальный вариант подбирается с учетом участка, климата и запросов семьи, включенных в стандартные пакеты.
планировка двухэтажного дома <a href=gotovye-proekty-domov14.ru/2-etaga>https://gotovye-proekty-domov14.ru/2-etaga/</a>

20 seo_cnMr  
0
Ищете надёжное обучение — выбирайте <a href=https://best-seo-courses.ru>обучение seo</a> — практические занятия и поддержка экспертов.
Последний раздел фокусируется на аналитике и оценке эффективности работ.

19 scheben_oukt  
0
Щебень гравийный можно купить быстро и надежно через <a href=https://graviyniyinfo.ru>щебень 20 20 цена</a>.
Он доступен по цене и прост в доставке и хранении.

18 kontrakt_fxSa  
0
Если вы хотите быстро и выгодно оформить <a href=https://kontract-info.ru/>контракт на сво на год</a>, наши специалисты помогут с оформлением и ответят на все вопросы.
Важно оговорить временные рамки реализации проекта, санкции за срыв сроков и правила приёма работ.

Также стоит предусмотреть форс-мажорные обстоятельства и порядок корректировки цен.

Необходимо оговорить процедуру приёмки результатов работ и штрафные санкции за их несоответствие.

В договоре важно закрепить юрисдикцию и процесс урегулирования разногласий между сторонами.

17 RobertHyday  
0
При планировании поездку в сердце Германии, стоит заблаговременно и тщательно изучить значимые места, такие как историческая стена и Берлинский дворец. Также целесообразно знать, как попасть из аэропорта Берлин-Бранденбург до сердца города или автобусной станции, а это можно сделать на железнодорожном транспорте или автобусах, детали рекомендуется уточнить на сайте <a href=https://holidaygid6.ru>замки возле берлина</a> .

Для тех, кто увлекается замками, стоит осмотреть замки в Берлине и замки возле Берлина, а также познакомиться с окрестности. Если решили совершить путешествие из Польши, к примеру, из Познани или Лодзи, стоит иметь в виду расстояние и альтернативы поездов, которые сообщают города с Берлином. Также практично добираться из Берлина в Потсдам — отличный маршрут для краткосрочной экскурсии.

16 maketnaya_ppMa  
0
Ищете, где макетная плата купить? Посетите <a href=https://radiokomponent.site/>макетная печатная плата</a> для выгодных предложений.
Грамотный выбор снижает риск ошибок при сборке и тестировании.

Разные типы макетных плат подходят для прототипов и конечных изделий по-разному.

Лучшие гнезда обеспечивают длительное использование без потери качества.

Маркетплейсы часто имеют выгодные предложения и быструю доставку.

Для учебных проектов и экспериментов такие платы идеальны.

15 vskrytie_tgsl  
0
Нужна срочная помощь? Закажите <a href=https://key-open.site/>вскрытие замков</a> — профессионалы прибудут быстро и вскроют замок без повреждений.
Самостоятельные попытки вскрыть автомобиль часто заканчиваются повреждением замка или дверей.

Использование несертифицированных методов может нарушить гарантию и привести к юридическим последствиям.

14 dostavka_ioKa  
0
Оформите быстрый и надёжный <a href=https://alcolike24.ru>доставка алкоголя</a> прямо сейчас — быстро, законно и с гарантией качества.
Наличие отзывов и рейтингов помогает ориентироваться в ассортименте и делает выбор более осознанным.

13 dostavka_lxkr  
0
Ищете удобную <a href=https://alcomoskovskiy.ru>как купить алкоголь с доставкой на дом</a> — быстро и надежно прямо до двери.
Услуга доставки алкоголя превратилась в привычную опцию для горожан, позволяя экономить время и силы.

Услуга доставки алкоголя превратилась в привычную опцию для горожан, позволяя экономить время и силы.

12 vyvod_bgsa  
0
Если вы или ваши близкие оказались в запое, не знаете, как вырваться из этого круга, обращайтесь за помощью на площадке <a href=https://vivodizzapoya.asia>частный нарколог алматы</a>.
Выдержать трудное время жизни при пособии - это насилие над собой.

Чтобы понять, как обратиться за помощью, нужно признать, что проблема существует. Пить при этом не перестаешь, но чувствуешь себя подавленно и обессилен. Иной раз человек, выпив, не перестаёт идти далее по жизни, но он чувствует себя подавленно и обессилен.

Алкогольные запои начинаются с легкого удовольствия от выпивки. Но со временем насилие над собой становится невозможно. Человек избавляется от быстрого вреда от алкоголизма.

Навыки самодисциплины при этом необходимы, но при этом человек часто чувствует необходимость отказа. Тогда человек начинает поисков нового блага. Человек чувствует необходимость отказа от алкоголя, и в итоге он продолжает пить.

Существует множество методов лечения для алкогольной зависимости. Но все они требуют усилий и времени. Если человек желает избавиться от алкогольной зависимости, то существует множество различных методов лечения, которые могут ему помочь.

Одним из наиболее эффективных методов лечения является групповая терапия. Групповая терапия помогает человеку понять, что он не одинок. Используя групповую терапию, человек поймет, что он не одинок, и начнет свою жизнь с новыми силами.

Поддержка семьи и друзей - это ключ к выздоровлению. Человек, получающий поддержку, более легко справляется с зависимостью от алкоголя. Включая семью и друзей в процесс выздоровления, человек становится более легко устойчивым и устойчивым в борьбе с алкогольной зависимостью.

Поддержка также может быть получена от специальных центров реабилитации. Программы реабилитации помогают человеку понять причину зависимости и найти пути к выздоровлению. Поддержка центра реабилитации позволяет человеку понять причину своей зависимости и найти эффективные способы справиться с ней.

1-10 11-20 21-21
Имя *:
Email *:
Код *:
Поиск

Друзья сайта
  • Творческий учитель
  • Сайт ООАКМР
  • Школьный сайт
  • Информатика учебник
  • МОИ

  • Copyright MyCorp © 2026 Сделать бесплатный сайт с uCoz