ПРОФИЛЬ10январь 2012 / ИНФорматика5. Как связаны понятия “алгоритм” и “исполнитель”?6. Что такое программа?7. В каком случае говорят, что два алгоритма эквивалентны?8. Что такое универсальный исполнитель?9. Сравните интуитивное и строгое понятия алгоритма.10. Опишите устройство и систему программированиямашины Тьюринга.11. Что такое состояние машины Тьюринга?12. Сопоставьте устройство машины Тьюрингас устройством компьютера. Какие устройства машиныТьюринга выполняют те же функции, что ианалогичные устройства компьютера?13. В чем особенность состояний q 0и q 1машиныТьюринга?14. По какому принципу можно построить программудля машины Тьюринга, которая последовательновыполняет операции А и Б?15. Сформулируйте тезис Чёрча — Тьюринга.16. Сравните машины Тьюринга и Поста.17. Зачем нумеруются строки в программе длямашины Поста?18. Что такое нормальный алгорифм Маркова?19. Зачем используют специальные символы вНАМ?20. Что означает эквивалентность различныхуниверсальных исполнителей?Задачи1. Что делают следующие программы для машиныТьюринга:а) q 10 ←1 ← → q 0б) q 10 → q 01 → q 0←в) q 1q 2а q 2 ←б q 2 ← ← q 0Рис. 10В каких случаях эти программы зацикливаются?2. Предложите программу для машины Тьюрингаи начальное состояние ленты, при котором этапрограмма зацикливается.3. Составьте программу для машины Тьюринга,которая уменьшает двоичное число на 1.4. Составьте программы для машины Тьюринга,которые увеличивают и уменьшают на единицу число,записанное в десятичной системе счисления.5. Составьте программу для машины Тьюринга,которая складывает два числа в двоичной системе,разделенные на ленте знаком “+”.6. Составьте программы для машины Тьюринга,которые выполняют сложение и вычитание двухчисел в десятичной системе счисления.7. *Найдите в литературе или в Интернете информациюо разновидностях машины Тьюринга.8. Что делают следующие программы для машиныПоста:а) 1 1 б) 1 ← в) 1 ? 2,32 → 2 ? 3,4 2 1 43 → 1 3 1 1 3 → 14 стоп 4 стопРис. 11Как будет работать каждая из программ при различныхначальных состояниях ленты?9. Напишите программу для машины Поста, котораяувеличивает (уменьшает) число в единичнойсистеме счисления на единицу. Каретка расположенаслева от числа.10. Напишите программу для машины Поста,которая складывает два числа в единичной системесчисления. Каретка расположена над пробелом,разделяющим эти числа на ленте.11. Напишите программу для машины Поста,которая складывает два числа в единичной системесчисления. Каретка расположена над пробелом,разделяющим эти числа на ленте.12. Что делают следующие НАМ, если применитьих к символьной цепочке, состоящей из нулей иединиц:а) 0 → 001 → 11б) *0 → 0**1 → 1** → =.→ *в) *0 → 00**1 → 11** → .→ *Как будет работать каждая из программ при различныхначальных состояниях ленты?13. Напишите НАМ, который “сортирует” цифрыдвоичного числа так, чтобы сначала стояли всенули, а потом — все единицы.14. Дополните приведенный НАМ для удаленияпервого символа строки так, чтобы он не зацикливалсяна пустом слове.15. Напишите НАМ, который умножает двоичноечисло на 2, добавляя 0 в конец записи числа.Алгоритмически неразрешимыезадачиВычислимые и невычислимые функцииМы уже говорили, что любой алгоритм задаетнекоторую функцию, которая для каждого входногослова, к которому применим алгоритм, однозначно
задает результат — выходное слово. Такие функцииназываются вычислимыми.Вычислимая функция — это функция, для вычислениякоторой существует алгоритм.Любая вычислимая функция может задаватьсяразными алгоритмами (разными программами длявыбранного универсального исполнителя). Например,следующие два нормальных алгорифма Марковазаменяют во входном двоичном слове все буквы“a” на нули и все буквы “б” на единицы:а → 0 б → 1б → 1 а → 0Любая вычислимая функция может быть вычисленас помощью любого универсального исполнителя:машин Тьюринга и Поста, нормальных алгорифмовМаркова и др.Рассмотрим, например, такую функцию, определеннуюдля всех натуральных чисел:⎧1,если n — четноеf( n)= ⎨⎩ 0, если n — нечетноеПопробуем составить программу для машиныТьюринга, которая вычисляет эту функцию. Будемсчитать, что число записано в единичной системесчисления (в виде цепочки единиц), и каретка в начальныймомент стоит над самой левой единицей.Четное число мы должны заменить на одну единицу,а нечетное — на пустую ленту. Оказывается, такаяпрограмма действительно существует:q 1q 2q 3q 41 → q 2→ q 1← q 4 ← ← q 3← q 4q 0Рис. 12Как принято, в начальный момент машина находитсяв состоянии q 1. Затем она движется вправовдоль числа, поочередно переходя из состоянияq 1(пройдено четное число единиц) в состояние q 2(пройдено нечетное число единиц) и обратно. Такимобразом, если встречен пробел и машина находитсяв состоянии q 2, то число нечетное и нужнопросто стереть все единицы (состояние q 4). Еслимашина закончила просмотр в состоянии q 1, то числочетное; при этом нужно оставить одну единицу(состояние q 3) и перейти в состояние q 4(стеретьвсе остальные единицы). Обратите внимание, чтоячейка (, q 3) в таблице пустая — это невозможноесостояние (покажите это самостоятельно).Таким образом, рассмотренная функция вычислима,то есть ее можно вычислять с помощьюмашины Тьюринга, а значит, и с помощью любогоуниверсального исполнителя. Например, нормальныйалгорифм Маркова для алфавита A = {1} выглядиттак:11 → ""1 → .→ 1.В первой подстановке две соседние единицы удаляются(слово-замена здесь пустое, для ясности оновзято в кавычки, которыми можно ограничиватьслова в НАМ). Это происходит до тех пор, пока небудут удалены все пары, поскольку эта подстановкастоит первой. Если остается одна единица, онаудаляется с помощью второй подстановки, и работапрограммы заканчивается. Если все единицы удалены(число четное), то с помощью третьей подстановкимы ставим одну единицу и останавливаемавтомат.Существуют и невычислимые функции. Рассмотримпростой пример, предложенный В.А. Успенскимв книге “Машина Поста”. Известно, что математическаяпостоянная π — иррациональноечисло, его десятичная запись бесконечна и не периодична.Введем функцию h(n), которая для любогонатурального числа n равна 1, если в десятичнойзаписи числа π есть n стоящих подряд девяток,окруженных другими цифрами, и равна нулю, еслитакой цепочки девяток нет. Как вычислить значениеэтой функции при некотором заданном n? Конечно,можно вычислять друг за другом десятичныезнаки числа π (такие алгоритмы математикамизвестны!) и проверять, не нашлась ли в полученнойпоследовательности цифр цепочка из n девяток.С помощью такого “наивного” алгоритма можнонайти такие значения n, при которых h(n) = 1:обнаружив требуемую цепочку, алгоритм закончитработу. Например, анализ первых 800 знаков показывает,что h(n) = 1 при n = 0, 1, 2, 6. Но если длякакого-то n функция h(n) равна нулю, то наивныйалгоритм никогда не остановится. Более того, дляэтой функции вообще не существует алгоритма,который при любом n останавливается и выдаетзначение h(n) в качестве результата. Поэтому такаяфункция невычислима.Когда задача алгоритмически неразрешима?Как вы знаете, невозможно создать вечный двигатель,потому что это противоречит универсальнымфизическим законам сохранения. Точно так жев математике и информатике существуют задачи,для которых общее решение не только неизвестносейчас, но и вообще отсутствует. Поэтому искатьего бесполезно.Поскольку алгоритм работает только с дискретнымиобъектами, любая алгоритмическая задача— это функция, заданная на множестве дискретныхобъектов (входных слов). Пусть, например,требуется по шахматной позиции определить, ктовыигрывает при правильной игре — белые, черныеили будет ничья. Выберем способ кодирования, прикотором каждая позиция может быть закодированасловом (символьной строкой) ν в подходящемалфавите. Тогда приведенной задаче может соответствоватьфункция f(ν), заданная на множестветаких слов:11январь 2012 / ИНФорматика