- •ТЕОРИЯ АЛГОРИТМОВ
- •Введение
- •Таким образом, получили убывающую последовательность натуральных чисел
- •I.1. Примитивно рекурсивные функции. Базис элементарных функций. Операции подстановки и примитивной рекурсии. Основные свойства
- •I.2. Примитивно рекурсивные функции относительно совокупности функций. Основные свойства.
- •I.3. Производные операции над функциями
- •I.4. Операции конечного суммирования и конечного произведения
- •Действительно
- •Очевидно, что
- •I.5. Предикат, логическая функция. Логические операции с предикатами.
- •I.6. Операции навешивания кванторов. Операции навешивания кванторов относительно двуместных предикатов
- •I.7. Примитивно рекурсивный предикат
- •I.8. Операция навешивания ограниченного квантора над предикатами
- •I.9. Кусочное задание функции
- •I.10. Операция ограниченной минимизации
- •I.11. Частично рекурсивные функции
- •Тогда
- •Контрольные вопросы
- •Практические задания
- •II.Уточнение понятия алгоритма через абстрактную математическую машину Тьюринга
- •II.1 Определение машины Тьюринга
- •II.2 Применение машин Тьюринга к словам
- •II.3 Вычислимые по Тьюрингу функции
- •II.5 Композиция машин Тьюринга
- •II.6 Тезис Тьюринга (основная гипотеза теории алгоритмов)
- •II.7 Машины Тьюринга и современные электронно-вычислительные машины
- •II.8 Вычислимость по Тьюрингу примитивно рекурсивных функций
- •II.9 Вычислимость по Тьюрингу частично рекурсивных функций
- •Контрольные вопросы
- •Практические задания
- •III.1. Уточнение понятие алгоритма через машину с неограниченными регистрами
- •Практические задания
- •IV. Марковские подстановки
- •IV.1. Нормальные алгоритмы Маркова
- •IV.2. Нормально вычислимые функции и принцип нормализации Маркова
- •IV.3. Совпадение класса всех нормально вычислимых функций с классом всех функций, вычислимых по Тьюрингу
- •СПИСОК ЛИТЕРАТУРЫ
Введение
В связи с развитием информационных технологий, понятие алгоритма является не только основным понятием теории алгоритмов, но и одним из главных понятий современной науки. Более того, в XXI –ом веке, так называемый век информатизации, «алгоритм» является одним из важнейших факторов цивилизации.
Теория алгоритмов как самостоятельная наука появилась в 30–40х годах XXвека и имеет огромное значение во всех направлениях математических наук. Благодаря этой теории находят свои точные определения такие фундаментальные понятия как алгоритм, доказуемость, сложность.
Теория алгоритмов вместе с математической логикой служит основой для построения теории вычислений. Они составляют теоретическую основу для проектирования и применения вычислительных устройств к плохо формализуемым объектам. Именно, благодаря теории алгоритмов происходит внедрение математических методов в экономику, лингвистику, психологию, педагогику и другие гуманитарные науки. ё
Основным понятием теория алгоритмов является понятие «алгоритм». Слово алгоритм связано с именем великого средневекового математика, жившего в IXвеке, Мухаммеда ибн Мусе из Хорезми, который впервые изложил десятичную систему счисления и правила выполнения простых арифметических действий над элементами этой системы.
Одна из основных его работ, так называемый «арифметический трактат», которая была переведена на латинский язык в XII веке, начинается словами «Dixit algorizmi», что в переводе означает «правил автор, т.е. сказал Ал Хорезми». Отсюда и появилось слово алгоритм.
Таким образом, слово «алгоритм» – латинизированное имя Ал-Хоразми. Как научный термин это слово первоначально обозначало лишь правила арифметических операций над целыми числами и простыми дробями. Затем его стали употреблять в более широком смысле.
Со временем в математических науках под алгоритмом стали понимать точные предписания, правила о выполнении некоторых простых операций, определяющих процесс преобразования исходных данных в искомый результат.
Наиболее простые примеры алгоритмов известны нам из начальной школы. Это алгоритмы сложения, вычитания, умножения и деления целых чисел в десятичной системе счисления. Аналогичные алгоритмы известны и для произвольных p − ичных систем счисления.
В качестве другого примера можно привести классический алгоритм Евклида (нахождения наибольшего общего делителя (НОД) двух натуральных чисел, отличных от нуля). Приведем описание этого алгоритма.
Задана пара натуральных чисел, т.е. (a1 , a2 ), причем a1 > a2 > 0 .
1) Делим a1 на a2 . Процесс деления записываем в общем виде: a1 = a2 b1 + r1.
Если r1 = 0 , то НОД(a1 , a2 )= a2 .
Если r1 ≠ 0, то переходим ко второму этапу.
2
2) Делим a2 на r1 . Процесс деления записываем в общем виде: a2 = r1 b2 + r2 .
Если r2 = 0 , то НОД(a2 , r1 )= r1 .
Если r2 ≠ 0 , то переходим к следующему этапу и т.д. В итоге имеем
последовательности равенств: a1 = a2 b1 + r1
a2 = r1 b2 + r2
…
rn−2 = rn−1 bn + rn rn−1 = rn bn+1 + rn+1
Таким образом, получили убывающую последовательность натуральных чисел a2 > r1 > r2 >... > rn > rn+1 ≥ 0 ,
которая должна быть конечной, так как a2 N . Поэтому для некоторого n , rn+1 = 0 ,
и в силу равенств НОД(a1 , a2 )=НОД(a2 , r1 )=НОД(r1 , r2 )=... =НОД(rn−1 , rn )= =НОД(rn ,0)= rn получаем НОД(a1 , a2 )= rn .
Не трудно заметить, что в этом описании повторяется многократно одно и тоже действие (деление большего числа на меньшее), меняются лишь числа, компоненты действия, причем меняются они определенным образом, закономерно. Возникает вопрос: нельзя ли построить такое предписание, чтобы действие деления содержалось в нем лишь один раз, но было бы точно определено, до каких пор надо повторить это действие и над какими числами оно выполняется в каждом повторении?
Данный вопрос решается положительно, но при этом придется исходным переменным a1 и a2 на каждом шагу присвоить новые значения. Тогда получаем
следующее предписание:
1.Разделить a1 на a2 . Перейти к пункт 2.
2.Если r = 0 , то перейти к пункт 4, иначе – к пункт 3.
3.Присвоить a1 значение a2 , a2 – значение r. Перейти к пункт 1.
4.НОД(a1 , a2 )= a2 . Перейти к пункт 5.
5.Процесс окончен.
Таким образом, мы получили более компактные описание алгоритма Евклида
Основные свойства алгоритма
10. Дискретность проявляется в том, что процесс построения величин, задаваемый алгоритмом, протекает в дискретном времени следующим образом: в начальный момент задается исходная конечная система величин, а в каждый следующий момент система величин получается по определенному закону из системы величин, имевшихся в предыдущий момент времени.
20. Детерминированность (определенность)– система величин, получаемых в любой, отличный от начального, момент времени, однозначно определяется системой величин, полученных в предшествующие моменты времени.
30. Элементарность шагов – закон получения последующей системы величин из предшествующей должен быть простым и локальным.
3
40. Эффективность (результативность)– каждый шаг работы алгоритма должен заканчиваться результатом.
50. Массовость алгоритма – начальная система величин может выбираться из некоторого потенциально бесконечного счетного множества Х.
60. Конструктивность – объекты из Х, над которыми работает алгоритм, должны быть конструктивными (конструктивный объект –это такой объект, который может быть набран весь целиком и представлен нам для рассмотрения [7]).
Примерами конструктивных объектов являются булевы функции, формулы алгебры логики, натуральные и рациональные числа, матрицы с натуральными или рациональными элементами, многочлены от n неизвестных с рациональными коэффициентами и т.п.
В качестве примера объекта, не являющимся конструктивным, можно привести
любые действительные числа, |
представление |
которых в десятичной записи |
α0 , α1...αn ... ни для какого |
n N не может |
быть целиком представлено для |
рассмотрения. Например, число e и π не являются конструктивными объектами. Подводя некоторый итог сказанному, можно дать и следующее объяснение
термину «алгоритм»: под алгоритмом понимается единый метод решения определенного класса однотипных задач, обладающий свойствами дискретности, определенности, массовости, результативности и оперирующий конструктивными объектами.
В силу свойства конструктивности алгоритма между объектами счетного множества X и множества натуральных чисел N можно установить взаимно однозначное соответствие и в дальнейшем вместо объектаx X рассматривать его номер или код объекта, являющийся натуральным числом.
Таким образом, можно рассматривать работу алгоритма не на множестве X , а на более удобном для изучения множестве натуральных чисел N . Поэтому в дальнейшем предметом наших рассмотрений будут служить преимущественно арифметические функции, т.е. функции, имеющие своими областями определения и множествами значений только множества натуральных чисел.
Понятно, что понятие алгоритма, описываемое свойствами 10-60, является не строгим: в формулировках этих свойств встречаются слова, не имеющие точного математического смысла. Необходимо также отметить, что, вообще говоря, не предполагается, что процесс применения алгоритма к исходным данным обязательно должен закончиться результатом через конечное число шагов. Процесс может оборваться безрезультатно или не закончиться вообще. В этом случае говорят, что алгоритм неприменим к рассматриваемым исходным данным,
В конце XIX века математиками были решены многие алгоритмические проблемы. В этих проблемах требовалось найти алгоритм для решения некоторой совокупности однотипных задач. При этом задается конечная система величин, принимающая произвольные целочисленные значения.
Успешное решение алгоритмических проблем дало повод надеяться, что для решения всяких массовых проблем существуют алгоритмы. Однако в XX веке на первый план выдвинулись такие алгоритмические проблемы, для решения которых не только не удавалось построить алгоритм, но само существование таких алгоритмов было сомнительным.
4
В1900 году на международном математическом конгрессе, который состоялся
вПариже, немецкий математик Давид Гильберт (1862-1943) сформулировал 23 проблемы, решение которых он считал первоочередными для развития математики.
Одна из них, 10-я, состояла в следующем:
пусть задано P(x1 ,..., xn )= 0 , т.е. уравнение с целыми коэффициентами и
целыми положительными степенями. Если рассматривать только целочисленные решения, то уравнение называется диофантовым.
Возникает вопрос, существует ли алгоритм позволяющий ответить на вопрос, имеет ли целочисленные решения всякое диофантово уравнение или нет.
Другая проблема – связанная с математической логикой «проблема общезначимости формулы логики предикатов»: существует ли эффективная процедура (алгоритм), позволяющая определить, является ли всякая формула логики предикатов общезначимой.
Решения этих и других проблем были получены с помощью точного определения алгоритма. В 1936 году американский математик А.Чёрч доказал неразрешимость проблемы общезначимости формул логики предикатов. В 1970 году отечественным математиком Ю.В. Матиясевичем было получено решение 10ой проблемы Гильберта, тоже отрицательное, т.е. было доказано, что искомый алгоритм не существует.
Нужно отметить, что несуществование алгоритма для решения отдельного класса однотипных задач не означает, что всякая отдельная частная задача из этого класса неразрешима.
Например, уравнение x5 − 4x3 + x2 − 4 = 0 имеет решение, но класс задач связанный с решением уравнения пятой степени не вычислим.
Также нужно отметить, что частный случай 10-ой проблемы Гильберта, где требовалось для произвольного уравнения с целыми коэффициентами найти решения в множестве действительных чисел был решен в 40-х годах XX века польским математиком А. Тарским положительно,. Тарский построил алгоритм, позволяющий ответить на вопрос: имеет ли всякое произвольное алгебраические уравнение с целыми коэффициентами действительные корни или нет?
Чтобы доказать несуществование алгоритма, необходимо точно знать, что такое алгоритм. Решение задачи точного определения алгоритма было получено в 30-40х годах в работах Гильберта, Гёделя, Черча, Поста, Тьюринга, Маркова, Колмогорова и других ученых в различных формах, которые по существу оказались эквивалентными. При изучении курса теории алгоритмов в педагогических вузах, в основном рассматривают точное определение алгоритма в форме теории рекурсивной функции и абстрактной математической машины. А остальные формы уточнения понятия алгоритма изучаются в специальных курсах.
В одной из своих работ Чёрч исходил из того, что всякую систему величин можно задать в виде набора (x1 , x2 ,..., xn ), где xi N , и N-натуральный ряд, т.е.
N ={0,1,2,3,...}. И следовательно, он ввел понятие функции для уточнение понятия алгоритма.
Хотелось бы еще раз подчеркнуть, что в дальнейшем при изложения данного курса мы будем иметь дело с арифметическими функциями, т.е. функциями,
5
