1.3. Алгоритмы |
||||||||||||||
Основные понятия.Многие задачи решаются с помощью алгоритмов. Алгоритм состоит из конечного числа инструкций, или правил, которые определяют пошаговое изменение конфигурации некоторой реальной или абстрактной машины. Не вдаваясь в более подробное разъяснение этих понятий (полная их формализация в общем виде считается невозможной), рассмотрим некоторые основные понятия. Если задан алгоритм, то считаются определёнными следующие объекты:
Если k ® k', то k' называется преемником k. Множество преемников любой конфигурации должно быть конечным. Если конфигурация не имеет преемников, она называется заключительной. Если у любой конфигурации не более одного преемника, алгоритм называется детерминированным. В таком случае отношение T можно считать функцией на K, которую называют функцией перехода. Недетерминированные алгоритмы называют ещё исчислениями. Последовательность конфигураций k0, k1,
..., kn, n ³ 0,
вычислением длины n, или за n
шагов (по заданному алгоритму), если k0О I
и ki ® ki+1
для всех 0 Ј i < n. Если
kn Частичная функция f : A ® B называется вычислимой, если существует такой детерминированный алгоритм, что A = I, B Í K и f(a) = b тогда и только тогда, когда b является результатом вычисления по этому алгоритму с входом a (этот алгоритм должен зацикливаться на таком входе a, на котором не определено значение f(a)). Кроме задачи вычисления функции рассматривается задача распознавания элементов множества. В этом случае распознаваемое множество считается подмножеством некоторого базового множества B (множества чисел, матриц, строк и т.п.). Множество A Í B называется разрешимым, или рекурсивным, если вычислима его характеристическая функция cA: B ® {0,1}
Множество A Í B называется полуразрешимым, если вычислима его "полухарактеристическая" функция hA: B ® {1}
Известно, что всякое разрешимое множество полуразрешимо, но не наоборот. Существуют и неполуразрешимые счётные множества. Множество A Í B называется рекурсивно перечислимым, если оно является множеством значений некоторой вычислимой функции f, определённой на всём множестве натуральных чисел N, т.е. f(N) = A. Перебирая натуральные числа, с помощью этой функции можно получить любой элемент множества A (и ничего другого). Известно, что всякое рекурсивно перечислимое множество полуразрешимо и наоборот. В данном определении разрешимости и перечислимости множеств использовались только детерминированные алгоритмы. Не увеличивает ли недетерминированность способность алгоритмов к распознаванию? Рассмотрим произвольный алгоритм (детерминированный или недетерминированный). Назовем его начальную конфигурацию k допустимым входом, если с неё начинается хоть одно завершённое вычисление. Множество пар <допустимый вход k, результат вычисления с входом k> назовём графиком алгоритма. Оказывается, что для любого алгоритма множество его допустимых входов, множество его результатов и его график рекурсивно перечислимы. Таким образом, недетерминированные алгоритмы обладают теми же возможностями распознавания, что и детерминированные. Тем не менее, они представляют большой интерес для теории и практики. Если некоторая проблема не имеет алгоритма для своего решения, она называется алгоритмически неразрешимой. Так, если некоторая тотальная функция невычислима, то алгоритмически неразрешима проблема её вычисления для любых значений аргументов. Если множество нерекурсивно, то проблема принадлежности произвольного элемента этому множеству алгоритмически неразрешима. Хотя общее формальное определение алгоритма дать невозможно, можно формально определить тот или иной класс алгоритмов. Например, определяя язык программирования, мы определяем класс алгоритмов, которые можно представить в виде программ на этом языке. Разрешимый класс алгоритмов, которые могут вычислить любую вычислимую функцию, называется рекурсивно полным. Ещё в 1930-х годах американский логик А. Чёрч высказал утверждение, что существует рекурсивно полный класс алгоритмов, и попытался сформулировать такой класс (l-исчисление Чёрча). Это утверждение называется тезисом Чёрча. Хотя его нельзя доказать формально, не имея общего определения понятия алгоритма, но он подтверждается тем, что формально определено огромное количество классов алгоритмов, в каждом из которых можно вычислить любую функцию, вычислимую в любом другом классе. Принимая тезис Чёрча, такие классы также называют рекурсивно полными.
Машины Тьюринга.Машины Тьюринга представляют собой простой формально определённый рекурсивно полный класс алгоритмов (это недоказуемое утверждение называется тезисом Чёрча-Тьюринга). Каждая машина Тьюринга представляет один алгоритм. Она состоит из
Правило имеет вид (q,a) ®
(q',a',S), где q и q' Конфигурацией машины Тьюринга называется цепочка
вида aqab,
где aab
Формально, машина Тьюринга определяется набором M = (S,Q,P,q0,qf),
где На самом деле, рекурсивно полным будет класс всех машин Тьюринга с произвольным фиксированным алфавитом S, например, с S = {L,1}. Разные алфавиты мы используем только для удобства программирования. Назовём L-выходом (выходом с пустым входом) машины Тьюринга любую цепочку a = bg, не начинающуюся и не кончающуюся символом L, если есть вычисление q0L ®T* Lmb qf g Ln (m, n ³ 0). С помощью тезиса Чёрча-Тьюринга можно доказать следующее утверждение (доказательство опускаем). У т в е р ж д е н и е 1.9. Пусть задан произвольный конечный алфавит A. Произвольное множество цепочек B в алфавите A рекурсивно перечислимо тогда и только тогда, когда оно совпадает с множеством L-выходов некоторой машины Тьюринга. Очевидно, что при |B|>1 машина должна быть недетерминированной. Пример 1.4. Пусть A = {a, b}. Множество A* всех цепочек в алфавите A рекурсивно перечислимо, т. к. совпадает с множеством L-выходов машины Тьюринга с правилами (q0,L)
® (q0,a,R), Вычисление для такой машины имеет вид q0L
® aq0L
® abq0L
® abbq0L
® abbqf L. Машины Тьюринга дают ещё классические примеры нерекурсивных множеств. Ограничимся классом машин с одним фиксированным ленточным алфавитом. Рассматривая программу машины как последовательность символов, можно закодировать её в этом ленточном алфавите и подать на вход любой машине из этого класса. Точно также можно программу машины подать на вход ей самой. Машина, для которой её собственная программа является допустимым входом, называется самоприменимой. В противном случае она называется несамоприменимой. Известно, что множество самоприменимых машин Тьюринга нерекурсивно, но рекурсивно перечислимо, а множество несамоприменимых машин не является рекурсивно перечислимым (и, следовательно, нерекурсивно). Таким образом, проблемы самоприменимости и несамоприменимости машин Тьюринга неразрешимы (но в разной степени).. |
||||||||||||||