Элементы теории алгоритмов

Слово алгоритм (или алгорифм) происходит от имени арабского математика (из Хорезма Мохаммеда ибн Мусы Альхваризми (IX в.), из трактата которого Европа в XII в. познакомилась с позиционной системой счисления и с арифметическими действиями над числами в таких системах. В связи с этим и само понятие алгоритма ассоциировалось в начале с искусством счета. Постепенно понятие алгоритма деформировалось и к началу XX в. под алгоритмом стали понимать четко определенную процедуру решения некоторого класса задач. Конечно, приведенное пояснение не может служить определением понятия алгоритма. Однако, таким весьма туманным понятием алгоритма математики довольствовались вплоть до XX в., пока не появилась необходимость в доказательстве отсутствия алгоритмов для решения некоторых классов задач. Дело в том, что к началу XX в. в математике накопилось много задач алгоритмического характера не поддававшихся решению, несмотря на многочисленные усилия математиков. Примером может служить известная 10-я проблема Гильберта сформулированная им в докладе “Математические проблемы”, произнесенном в 1900 году на II Международном конгрессе математиков в Париже. Эта проблема заключалась в нахождении способа, позволяющего за конечное число операций установить, разрешимо ли произвольно заданное алгебраическое уравнение с целыми коэффициентами в целых числах или нет. Наличие таких задач зарождало у математиков идею о доказательстве отсутствия алгоритмов их решения. Результаты об отсутствии алгоритмов решения задач теми или иными ограниченными средствами к тому времени уже были. Например, было известно, что задачи трисекции угла, удвоения куба и т. д. неразрешимы с помощью циркуля и линейки. Однако теперь речь шла об отсутствии алгоритмавообще. Для решения такого рода задач необходим был новый качественный скачок в математике. А именно, нужно было дать точное определение понятия алгоритма, поскольку невозможно доказать отсутствие чего-то туманного и расплывчатого.

Задача определения алгоритма была решена в 30-х годах XX в, в ра­ботах математиков и логиков Гильберта, Гёделя, Чёрча, Клини, Поста и Тьюринга. Было дано несколько разных определений понятия алгорит­ма. При этом Гильберт, Гёдель, Чёрч и Клини подошли к понятию алго­ритма через вычислимые арифметические функции, а Пост и Тьюринг - через сведение алгоритма к элементарным преобразованиям слов в ко­нечных алфавитах.

Второй подход к определению алгоритма был использован в 40-х годах и советским математиком А. А. Марковым (1903—1979). Определенные им алгоритмы получили название нормальных алгоритмов Мар­кова.

Прежде чем дать строгое определение алгоритма, математики проанализировали известные примеры алгоритмов и выделили наиболее общие их свойства. Для выявления этих свойств рассмотрим и мы пов­нимательнее, например, хорошо известный из курса алгебры алгоритм Евклида нахождения наибольшего общего делителя двух натуральных чисел. В нем предписывается делить с остатком 1-е число на 2-е, затем 2-е на полученный (первый) остаток, затем 1-Й остаток на 2-й оста­ток и т. д. до тех пор, пока не получится остаток, равный нулю. Послед­ний, не равный нулю, остаток и будет искомым наибольшим общим де­лителем. В итоге любая пара натуральных чисел a, b преобразуется в число d, равное их наибольшему общему делителю:

(a, b)= d.

Характерными свойствами алгоритма Евклида являются:

1) массовость—алгоритм может быть применен к любой паре натуральных чисел, причем сама схема работы алгоритма не зависит от ис­ходных данных (в любом случае дели 1-е число на 2-е и т. д.);

2) дискретность-весь алгоритм можно разбить на отдельные элементарные операции (шаги алгоритма), которые могут быть занумеро­ваны натуральными числами в порядкеих выполнения;

3) детерминированность - каждый шаг алгоритма однозначно определяется его предыдущими шагами;

4) конечная определенность—исходные данные, а также результаты каждого шага алгоритма и ответ записываются в виде конечных после­довательностей символов исходного конечного алфавита.

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

На примере алгоритма Евклида просматриваются не только общие черты алгоритма вообще, но и упомянутые выше два подхода к общему определению алгоритма. А именно, с одной стороны, это вычисление значений некоторой числовой функции двух переменных о. 6.. а с другой—преобразование одной последовательности символов (цифр чисел а и b, разделенных запятой) в другую последовательность (цифр числа d).

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

В каждом из имеющихся в настоящее время определений алгоритма, по существу, описывается некоторый класс алгоритмов и приводится обоснование того, что решение любого класса задач сводится к алгоритму из выделенного класса. Обоснование, как правило, заключается в построении большого числа примеров и в доказательстве замкнутости выделенного класса алгоритмов относительно различного рода комбинаций алгоритмов (композиции, объединения, разветвления и т. п.). Наиболее убедительным доводом в указанном обосновании явилось доказательство равносильности всех имеющихся определений алгоритмов. В итоге к настоящему времени в математическом мире сложилось достаточно единодушное мнение о законности имеющихся определений алгоритма. так что если доказывается отсутствие, скажем, нормального алгоритма для решения какого-либо класса задач, то говорится об отсутствии алгоритма вообще.

В данной главе мы опишем три различных определения понятия алгоритма и приведем простейшие примеры на доказательство теорем об отсутствии алгоритмов для решения некоторых задач.

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

НОРМАЛЬНЫЕ АЛГОРИТМЫ

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

Определение 1. Схемой нормального алгоритма элементы теории алгоритмов - student2.ru в алфавите

элементы теории алгоритмов - student2.ru

называется упорядоченная последовательность

элементы теории алгоритмов - student2.ru(1)

слов элементы теории алгоритмов - student2.ru в алфавите элементы теории алгоритмов - student2.ru где элементы теории алгоритмов - student2.ru - слова в алфавите элементы теории алгоритмов - student2.ru , а элементы теории алгоритмов - student2.ru есть слово элементы теории алгоритмов - student2.ru или элементы теории алгоритмов - student2.ru При этом слово элементы теории алгоритмов - student2.ru схемы (1) называется ее элементы теории алгоритмов - student2.ru -й формулой с левой частью элементы теории алгоритмов - student2.ru и правой частью элементы теории алгоритмов - student2.ru .

Формула элементы теории алгоритмов - student2.ru называется простой, если элементы теории алгоритмов - student2.ru есть элементы теории алгоритмов - student2.ru и заключительной, если есть элементы теории алгоритмов - student2.ru

Действие НА элементы теории алгоритмов - student2.ru на слово элементы теории алгоритмов - student2.ru в алфавите элементы теории алгоритмов - student2.ru описывается следующим определением.

Определение 2. Пусть элементы теории алгоритмов - student2.ru - слово в алфавите элементы теории алгоритмов - student2.ru и хотя бы одно из слов элементы теории алгоритмов - student2.ru является его подсловом. Элементарным преобразованием слова элементы теории алгоритмов - student2.ru по нормальному алгоритму элементы теории алгоритмов - student2.ru со схемой (1) называется замена в элементы теории алгоритмов - student2.ru первого вхождения слова элементы теории алгоритмов - student2.ru с наименьшим номером элементы теории алгоритмов - student2.ru словом элементы теории алгоритмов - student2.ru Если результатом указанного элементарного преобразования является слово элементы теории алгоритмов - student2.ru то пишут элементы теории алгоритмов - student2.ru т. е. элементы теории алгоритмов - student2.ru или элементы теории алгоритмов - student2.ru .

Определение 3. Говорят, что НА элементы теории алгоритмов - student2.ru в алфавите элементы теории алгоритмов - student2.ru применим к слову элементы теории алгоритмов - student2.ru в алфавите элементы теории алгоритмов - student2.ruи перерабатывает его в слово элементы теории алгоритмов - student2.ru , если существует конечная последовательность слов

элементы теории алгоритмов - student2.ru (2) элементы теории алгоритмов - student2.ru

в которой

элементы теории алгоритмов - student2.ru элементы теории алгоритмов - student2.ru

элементы теории алгоритмов - student2.ru элементы теории алгоритмов - student2.ru или элементы теории алгоритмов - student2.ru и слово элементы теории алгоритмов - student2.ru не содержит подслов элементы теории алгоритмов - student2.ru

В противном случае говорят, что алгоритм элементы теории алгоритмов - student2.ru не применим к слову элементы теории алгоритмов - student2.ru

Из приведенных определений естественным образом извлекается описание процесса переработки слова элементы теории алгоритмов - student2.ru по нормальному алгоритму элементы теории алгоритмов - student2.ru (или нормальным алгоритмом элементы теории алгоритмов - student2.ru ). А именно, по заданному слову элементы теории алгоритмов - student2.ru НА элементы теории алгоритмов - student2.ru строит последовательность слов. Если элементы теории алгоритмов - student2.ru не содержит подслов элементы теории алгоритмов - student2.ru то эта последовательность одноэлементна и состоит из единственного слова элементы теории алгоритмов - student2.ru . Если же элементы теории алгоритмов - student2.ru содержит хотя бы одно из подслов элементы теории алгоритмов - student2.ru , то производится его элементарное преобразование по НА элементы теории алгоритмов - student2.ru в результате чего получается вполне определенное слово элементы теории алгоритмов - student2.ru . Если при переходе от элементы теории алгоритмов - student2.ru к элементы теории алгоритмов - student2.ru использовалась заключительная формула, то искомая последовательность двухэлементная: элементы теории алгоритмов - student2.ru . В противном случае так же, как и выше, по слову элементы теории алгоритмов - student2.ru строится слово элементы теории алгоритмов - student2.ru и т. д. В процессе построения указанной последовательности могут представиться три различные возможности: или на каком-то шаге будет использована заключительная формула схемы алгоритма, или появится слово, не содержащее подслов элементы теории алгоритмов - student2.ru , или не произойдет ни того, ни другого. В превых двух случаях мы получим конечную последовательность, последнее слово которой называется результатом применения НА к слову элементы теории алгоритмов - student2.ru и обозначают через элементы теории алгоритмов - student2.ru . В третьем случае процесс преобразования слов по НА элементы теории алгоритмов - student2.ru будет длитться бесконечно, это и означает, что НА элементы теории алгоритмов - student2.ru не применим к элементы теории алгоритмов - student2.ru .

Таким образом, НА элементы теории алгоритмов - student2.ru в алфавите элементы теории алгоритмов - student2.ru задает частичное отображение множества элементы теории алгоритмов - student2.ru всех слов в алфавите элементы теории алгоритмов - student2.ru в само себя. Выбирая различные схемы, мы будем получать различные НА.

Если элементы теории алгоритмов - student2.ru - алфавит, содержащий элементы теории алгоритмов - student2.ru , то НА в алфавите элементы теории алгоритмов - student2.ru называется нормальным алгоритмом над алфавитом элементы теории алгоритмов - student2.ru .

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

1. НА в алфавите элементы теории алгоритмов - student2.ru со схемой

элементы теории алгоритмов - student2.ru

перерабатывает любое слово элементы теории алгоритмов - student2.ru в себя, причем последовательность слов, соответствующая слову элементы теории алгоритмов - student2.ru имеет вид: элементы теории алгоритмов - student2.ru .

2. НА со схемой

элементы теории алгоритмов - student2.ru

не применим ни к одному слову. Последовательность, соответствующая слову элементы теории алгоритмов - student2.ru будет бесконечной:

элементы теории алгоритмов - student2.ru

3. НА элементы теории алгоритмов - student2.ru в алфавите элементы теории алгоритмов - student2.ru со схемой

элементы теории алгоритмов - student2.ru

приписывает к любому слову элементы теории алгоритмов - student2.ru слева слово элементы теории алгоритмов - student2.ru :

элементы теории алгоритмов - student2.ru

4. Построим НА элементы теории алгоритмов - student2.ru , приписывающий к любому слову элементы теории алгоритмов - student2.ru справа фиксированное непустое слово элементы теории алгоритмов - student2.ru Это сделать несколько сложнее, чем приписывание слова элементы теории алгоритмов - student2.ru слева. Для этого удобнее расширить алфавит элементы теории алгоритмов - student2.ru , добавив к нему одну новую букву элементы теории алгоритмов - student2.ru , и построить искомый НА в алфавите элементы теории алгоритмов - student2.ru (т. е. над элементы теории алгоритмов - student2.ru ). Нетрудно проверить, что нужное нам преобразование будет осуществлять НА со схемой

элементы теории алгоритмов - student2.ru

элементы теории алгоритмов - student2.ru

……………..

элементы теории алгоритмов - student2.ru

Последовательность слов, соответствующая произвольному слову элементы теории алгоритмов - student2.ru в алфавите элементы теории алгоритмов - student2.ru , для этого НА имеет вид:

элементы теории алгоритмов - student2.ru элементы теории алгоритмов - student2.ru

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

элементы теории алгоритмов - student2.ru

так, что вся схема запишется в виде:

элементы теории алгоритмов - student2.ru элементы теории алгоритмов - student2.ru

Заметим, что, выполняя свою задачу приписывания к словам из элементы теории алгоритмов - student2.ru справа слова элементы теории алгоритмов - student2.ru , мы совсем не интересовались переработкой слов в алфавите элементы теории алгоритмов - student2.ru , содержащих букву элементы теории алгоритмов - student2.ru . Здесь алгоритм элементы теории алгоритмов - student2.ru будет действовать иначе. А именно, слово элементы теории алгоритмов - student2.ru в алфавите элементы теории алгоритмов - student2.ru , содержащее элементы теории алгоритмов - student2.ru вхождений буквы элементы теории алгоритмов - student2.ru , он будет перерабатывать в слово

элементы теории алгоритмов - student2.ru элементы теории алгоритмов - student2.ru где количество букв элементы теории алгоритмов - student2.ru будет равно элементы теории алгоритмов - student2.ru ,

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

5. Построим НА элементы теории алгоритмов - student2.ru , перерабатывающий любое слово элементы теории алгоритмов - student2.ru в перевернутое слово элементы теории алгоритмов - student2.ru Для этого добавим к элементы теории алгоритмов - student2.ru две новые буквы элементы теории алгоритмов - student2.ru и возьмем следующую схему элементы теории алгоритмов - student2.ru в алфавите элементы теории алгоритмов - student2.ru

элементы теории алгоритмов - student2.ru

Проследите в качестве упражнения, что элементы теории алгоритмов - student2.ru для любого слова элементы теории алгоритмов - student2.ru в алфавите элементы теории алгоритмов - student2.ru .

Приведем еще примеры НА над числами. Условимся натуральное число элементы теории алгоритмов - student2.ru записывать в виде элементы теории алгоритмов - student2.ru вертикальных палочек.

6. НА в алфавите элементы теории алгоритмов - student2.ru со схемой

элементы теории алгоритмов - student2.ru

осуществляет сложение натуральных чисел.

7. НА в алфавите элементы теории алгоритмов - student2.ru со схемой

элементы теории алгоритмов - student2.ru

осуществляет умножение натуральных чисел.

Наши рекомендации