Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
83
Добавлен:
10.02.2016
Размер:
117.76 Кб
Скачать

О.Н. Паулин. Основы теории алгоритмов введение в.1. Интуитивное определение алгоритма

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

Эти и подобные им вычислительные процессы осуществлялись по определённой схеме и в соответствии с оговоренными правилами. Со вре-менем появлялись новые вычислительные процессы, общие для некото-рого класса задач. Эти процессы предполагали наличие:

 определённой последовательности действий, составляющей схему;

 правил выполнения действий.

Позже такие процессы назвали алгоритмами. Термин “алгоритм” происходит от имени узбекского математика Аль-Хорезми, который еще в IX в. сформулировал правила выполнения арифметических операций.

На рубеже ХIХ-ХХ вв. в результате анализа существующих алгоритмов были выявлены общие для всех алгоритмов признаки.

  1. Дискретность. Алгоритм - процесс последовательного получе-ния величин, идущий в дискретном времени (по шагам) по определённой схеме и известным правилам.

  2. Элементарность шагов. Очередной шаг алгоритма должен быть элементарным для исполнителя алгоритма (человека или машины).

  3. Детерминированность (определённость). Система величин в дан-ный (не начальный) момент времeни (на данном шаге) однозначно определя-ется системой величин, полученной в предыдущие моменты времени.

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

  5. Массовость. Начальная система величин может выбираться из некоторого (потенциально бесконечного) множества.

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

Заметим, что эти признаки не равноценны: если признаки 3-5 являются обязательными, характеризуя внутреннюю сторону вычислительного процесса, то первые два характеризуют внешнюю его сторону.

Понятия алгоритм и вычислительный процесс близки, однако отли-чаются тем, что в алгоритме больше внимания уделяется тому, как делать, а в вычислительном процессе – что делать для получения результата.

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

Пример В.1. Даны два целых положительных числа A и B. Требуется найти их наибольший общий делитель (НОД) N.

Обозначим: R - остаток от деления двух чисел; C – макси-мальное значение для пары чисел, C = max(A, B); D - минимальное значение для пары чисел, D = min(A, B).

Решение задачи нахождения НОД может быть получено в таком виде.

  1. Сравниваем A и B. Если A=B, то N=A и переходим к п.3. Если A>B, то C=A, D=B, иначе C=B, D=A. Переходим к п.2.

  2. Делим C на D и определяем остаток R. Если R=0, то N=D, переходим к п.3, иначе C=D, D=R; переходим к п.2.

  3. Конец.

Нетрудно убедиться, что процесс нахождения НОД удовлетворяет перечисленным выше признакам (процесс пошаговый, операции элементарны, результат однозначен, процесс сходится, причём независимо от конкретных значений исходных данных), и, следовательно, является алгоритмом. Так, хотя заранее и неизвестно, сколько раз будет осуществляться проверка условия R=0, но ясно, что для данных двух целых чисел цель будет достигнута за конечное число шагов (признак результативности).

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

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

Если доказательством существования алгоритма служит само описание разрешающего процесса и соответствие этого процесса признакам 1-5, то для доказательства отсутствия алгоритма уже недостаточно интуитивного понятия "алгоритм". Нужно точно определить, что такое "алгоритм", и разработать методы доказательства алгоритмической неразрешимости. Две эти задачи составили одну из центральных проблем математики в 20-х гг. XX ст. Решение этой проблемы в общем виде было получено в середине 30-х гг. в двух формах в работах Гильберта, Гёделя, Чёрча, Клини, Поста, Тьюринга. Первое решение было основано на понятии "рекурсивная функция", а второе - на описании точно сформулированного класса процессов, реализуемых на машинах Тьюринга. Оба решения оказались эквивалентными.

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

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

Первоначально теория алгоритмов возникла в связи с внутренними пот-ребностями теоретической математики. Математическая логика, основания ма-тематики, алгебра, геометрия и анализ остаются и сегодня одной из основных областей приложения теории алгоритмов. Другая область – ЭВМ, которые с большой точностью моделируются машинами Тьюринга. Наконец, теория алго-ритмов оказалась тесно связанной с рядом областей лингвистики, экономики, физиологии мозга, психологии и т. д. Первое систематическое изложение тео-рии алгоритмов было осуществлено С. Клини [1].

Соседние файлы в папке Основаная часть