Глава 5. Алгоритмы и машина Тьюринга.


5.1. Понятие алгоритма.

Алгоритм- это точное предписание, задающее процесс решения задачи. Алгоритм задаётся набором инструкций, последовательные выполнения которых являются элементарными шагами алгоритма. Процесс начинается с исходных данных, выделяющих данную индивидуальную задачу из множества задач, решаемых алгоритмом, и направлен на получение полностью определяемого этими исходными данными результата. Примерами алгоритмов являются изучаемые в школе правила сложения, вычитания, умножения и деления столбиком. Здесь исходными данными служат упорядоченные пары натуральных чисел, записанные в десятичной системе, а результатом - также натуральное число в десятичной системе. Само слово алгоритм происходит от имени среднеазиатского математика Мухаммеда бен Мусы аль – Хорезми, давшего в 825 году правила выполнения 4 арифметических действий в десятичной системе. Понятие алгоритма является одним из важнейших в современной математике. С появлением вычислительных машин понятие алгоритма тесно связано с программированием, так как программа на ЭВМ является формой представления алгоритма на некотором алгоритмическом языке программирования.

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

Пусть, например, требуется установить, имеет ли целые корни данное алгебраическое уравнение

а0 xn + а1 xn-1 +…+ аn-1 x + аn =0

с целым коэффициентами a0, a1,...,an.

Алгоритм для решения этой задачи существует, так как если это уравнение имеет целый корень р, то р должно быть делителем числа an. Поэтому для данного уравнения можно найти все делители числа an и все по очереди проверить. Однако, аналогичная проблема для уравнений P(x1,...,xm)=0, где P(x1,...,xm) – произвольный многочлен с целыми коэффициентами от любого числа m неизвестных, оказалась алгоритмически неразрешимый. Получение подобных результатов, относящихся к неразрешимости определённого класса задач, потребовало уточнения понятия алгоритма. Одним из возможных и используемых в математике подобных уточнений является рассматриваемая далее машина Тьюринга.

В тех же случаях, когда сама разрешимость не вызывает сомнений, центральным в теории алгоритмов становится вопрос трудоёмкости решения, т.е. оценка числа элементарных операций, выполняемых алгоритмом при решении задачи. Пусть U – множество решаемых задач, А – множество алгоритмов, решающих задачи данного класса, N (a,u) – число элементарных операций, выполняемых алгоритмом aÎA при решении задачи uÎU. Тогда в качестве эффективности алгоритма а можно взять число операций на самой трудной для него задаче из данного класса N (a,u). Если теперь выбрать из множества возможных алгоритмов алгоритм, для которого эта величина принимает минимальное значение, то получиться величина N (a,u), которая уже не зависит ни от u, ни от а, а характеризует трудоёмкость задач класса U в целом.

На самом деле класс решаемых задач U состоит, как правило, из однотипных задач различной размерности, и трудоёмкость решения индивидуальной задачи в значительной степени определяется её размерностью. Так, трудоёмкость выполнения арифметических действий зависит от величины участвующих в них чисел. Поэтому задачи класса U разбиваются на подклассы по размерности задач, и трудоёмкость определяется для каждого из подклассов как функция размерности. Скорость роста этой функции и характеризует сложность решения задач данного класса.

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

5.2. Алгоритм Евклида.

Пусть даны два натуральных числа n и m, причём n ³ m. Требуется найти их наибольший общий делитель d = (n, m). Способ для решения этой задачи, приведённый в книге Начала Евклида, состоит в следующем. Делим число n на m с остатком. Это даёт n = k1m + r1, где частное k1 является целым положительным числом, а остаток r1 – либо 0, либо положительное число, меньше m, 0£ r1<m. Если остаток не равен нулю, то повторяем операцию деления с остатком, но делимым является делитель предыдущего шага, а делителем – его остаток, и так до тех пор, пока не получиться остаток, равный нулю. Последний, положительный остаток в этом процессе и является наибольшим общим делителем чисел n и m. Процесс может быть описан следующей цепочкой равенств:

n = k1m + r1

m = k2 r1 + r2

r1 = k3 r2 + r3

r2 = k4 r3 + r4

¼¼¼¼¼¼

rl-4 = kl-2 rl-3 + rl-2

rl-3 = kl-1 rl-2 + rl-1

rl-2 = kl rl-1

rl-1 = (n, m)

 

Компактно алгоритм Евклида может быть представлен следующей блок-схемой:

 

Начало

n, m

 

Конец

(n, m) = d

 

Циклически повторяемая операция деления с остатком является фактически единственной операцией этого алгоритма. Поэтому число её повторений может служить естественной мерой трудоёмкости алгоритма Евклида.

Так как r1 < n/2, то делимое за 2 шага уменьшается более чем вдвое. Поэтому число шагов алгоритма l может быть оценено сверху как

l < 2 log2 n. Если число n представлена в десятичной системе исчисления, то, как показывает данная оценка, число шагов ограничено линейной функцией от длины записи числа n. Поэтому алгоритм Евклида очень эффективный алгоритм. Намного более трудоёмким было бы нахождение наибольшего общего делителя с помощью разложения чисел m и n на простые множители.

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

Для обоснования алгоритма Евклида достаточно заметить, что из равенства n = k1m + r1 вытекает, что каждый делитель чисел m и n является делителем чисел m и r1 и наоборот, следовательно (n, m) = (m, r1).

Поэтому суть алгоритма Евклида в том, он сводит задачу нахождения наибольшего общего делителя двух чисел к аналогичной задаче для меньших чисел.

Из алгоритма Евклида можно сделать ещё один чрезвычайно важный вывод, а именно, (m, n) выражается линейно через m и n:

(m, n) = sn + tm, где s и t – целые числа.

В самом деле, из первого равенства цепочки получаем r1 = n – k1m, т.е. r1 линейно зависит от n и m. Из второго равенства r2 = m – k2 r1, т.е. r2 линейно зависит от m и r1, но r1 линейно зависит от n и m, поэтому r2 также линейно зависит от n и m:

r2 = m – k2 (n – k1m) = (k1 k2 + 1)m - k2 n. продолжая движение по цепочке, окончательно получаем, что наибольший общий делитель двух чисел линейно с целыми коэффициентами через них выражается.

В заключение приведём численный пример использования алгоритма Евклида. Пусть требуется найти наибольший общий делитель чисел 7200 и 3132. Последовательные шаги алгоритма в этом случае таковы:

7200 = 2 * 3132 + 936

3132 = 3 *936 + 324

936 = 2 * 324 + 288

324 = 1 * 288 + 36

288 = 8 *36

(7200, 3132) = 36.

 

Машина Тьюринга.

Доказательство алгоритмической неразрешимости определённых задач стало возможным после уточнения понятия алгоритма. В первой половине 20 века было предложено несколько таких уточнений, впоследствии оказавшихся эквивалентными. Все они исходят из того, что алгоритм можно рассматривать как отображение из множества описаний задач во множество результатов. Если элементы этих множеств закодировать целыми неотрицательными числами, то алгоритмический процесс представляет собой вычисление некоторой функции, аргументы и значение которой являются целыми неотрицательными числами. Функция называется вычислимой, если её значения могут быть вычислены с помощью алгоритма. Тогда существование невычислимых функций влечёт существование алгоритмически неразрешимых задач.

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

МТ имеем конечное множество внутренних состояний Q = {q0, q1 ,..., qm}, где q1 считается начальным, а q0 – конечным состояниями, а также внешнюю память в виде ленты, состоящей из конечного числа ячеек, в которых записаны символы из внешнего алфавита A = {a0, a1 ,..., an}, причём символ a0 считается пустым и обычно обозначается как 0. В процессе работы МТ к существующим ячейкам могут пристраиваться новые пустые ячейки, так что лента является потенциально неограниченной в обе стороны.

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

G : Q A ® Q

F : Q A ® A

D : Q A ® {L, C, R}.

Попав в заключительное состояние q0, МТ прекращает работу.

Функции G, F, и D задаются набором команд или программой для МТ. Команды имеют вид qi aj ® qk al sp, где qk = G(qi aj), ai = F(qi aj), sp = D(qi, aj).

В каждый момент времени состояние МТ полностью определяется внутренним состоянием qi, содержимым ячеек ленты ai1, ai2 ,..., ait и номером k обозреваемой ячейки, что в совокупности называется конфигурацией и может быть записано как ai1 ai2 ,..., aik-1

qi aik aik+1 ... ait.

Конфигураций, получающиеся из данной приписыванием слева или справа произвольного числа пустых ячеек, считаются эквивалентными. В процессе работы МТ происходит последовательная смена конфигураций. Начальная конфигурация должна быть задана. Тогда все последующие конфигурации определяются программой. Если условиться считать, что в начальный момент машина находится в состоянии q1 и обозревает самую левую ячейку ленты, то начальная конфигурация полностью задаётся начальным словом – набором записанных в ячейках ленты символов.

Начав работу с некоторого начального слова, МТ либо остановится через конечное число шагов, либо никогда не остановится. В первом случае говорят, что МТ применима к слову Р, а во втором, - что не применима.

Перейдём к рассмотрению примеров. Будем использовать внешний алфавит из двух символов A = {0, 1}. Если Р – некоторое слово, то для слова P P ...P (m раз) будем для краткости использовать обозначение [P]m. Так, например, слово 1100011000111 запишется как [12 03]2 13.

Пусть МТ с тремя внутренними состояниями q0, q1 и q2 задаётся программой:

q1 0 ® q1 0R

q1 1 ® q2 0R

q2 1 ® q1 0R

q2 0 ® q0 1C.

Пусть начальное слово P = 13 01. Тогда при работе МТ последовательно возникают конфигурации: q1 13 01, q2 12 01, q1 101, q2 01, q0 12.

МТ остановилась, перейдя в заключительное состояние q0, т.е. МТ применима к данному слову.

Пусть теперь начальное слово p = 14. Тогда последовательными конфигурациями будут:

q1 14, q2 13, q1 12, q2 1, q1 0, q1 0, q1 0,… .

МТ никогда не остановится, т.е. МТ не применима к данному слову.

Пусть теперь требуется построить МТ, прибавляющую к данному неотрицательному целому числу единицу, т.е. МТ должна переводить конфигурацию q1 1n в q0 1n+1. Вот такая МТ:

q1 1 q1 1 R

q1 0 q2 1 L

q2 1 q2 1 L

q2 0 q0 0 R.

Пусть теперь требуется решить задачу удвоения числа, т.е. q1 1n ® q0 12n. Эта задача может быть решена с помощью такой МТ:

q1 1 ® q2 0R

q2 1 ® q3 1 L

q3 0 ® q4 0 L

q4 1 ® q4 1 L

q4 0 ® q5 1R

q5 1 ® q5 1R

q5 0 ® q1 1R

q2 0 ® q6 1 L

q6 1 ® q6 1 L

q6 0 ® q0 1C.

Идея алгоритма состоит в том, что в заданном слове 1n вводится маркерный 0, который в ходе работы алгоритма передвигается слева направо. При каждом его передвижении слева к слову приписывается 1. МТ завершает работу, когда маркерный 0 достигает правого конца исходного слова.

 



Дата добавления: 2022-02-05; просмотров: 311;


Поиск по сайту:

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

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.024 сек.