- •Теория алгоритмов Алгоритм и его свойства
- •Формализация понятия «алгоритм»
- •Машины Поста
- •Машины Тьюринга
- •Нормальные алгорифмы Маркова
- •Рекурсивные функции
- •Сложность алгоритма
- •7. Формальные грамматики
- •7.1. Понятие формальной грамматики
- •7.2. Деревья вывода
- •7.3. Классификация языков по Хомскому
- •7.4. Распознающие автоматы
- •7.5. Понятие транслятора
- •7.6. Основные функции компилятора. Лексический анализ
- •7.7. Переход от недетерминированного распознающего автомата к детерминированному
- •7.8. Переход от праволинейной грамматики к автоматной
- •7.10. Детерминированные автоматы с магазинной памятью
Теория алгоритмов Алгоритм и его свойства
Под алгоритмом интуитивно понимается некоторое формальное предписание, которое определяет совокупность операций и порядок их выполнения для решения всех задач определенного типа.
Само слово «алгоритм» происходит от algorithmi – латинской формы написания имени узбекского математика Аль-Хорезми, который еще в IX веке сформулировал правила выполнения арифметических действий. Первоначально под алгоритмами и понимали только правила выполнения четырех арифметических действий над многозначными числами.
Исполнителем алгоритма может быть человек, группа людей, робот, станок, компьютер, язык программирования и т.д. Вся совокупность команд, которые данный исполнитель умеет выполнять, называется системой команд исполнителя (СКИ).
Важно то, что исполнитель получает необходимый результат, действуя формально, т.е. не вникая в смысл поставленной задачи и только строго выполняя команды. Целесообразность предусматриваемых алгоритмом действий обеспечивается точным анализом со стороны того, кто составляет этот алгоритм.
Алгоритм можно определить как понятное и точное предписание исполнителю совершить последовательность действий, направленных на достижение поставленной цели. Наиболее распространенными являются алгоритмы работы с величинами – числовыми, символьными, логическими и т.д.
Алгоритм, составленный для некоторого исполнителя, можно представить различными способами: с помощью графического или словесного описания, в виде таблицы, последовательностью формул, записанным на алгоритмическом языке (языке программирования).
Алгоритм удовлетворяет следующим основным свойствам алгоритмов:
-
Конечность (дискретность) команд и выполняемых по ним действий алгоритма.
-
Выполнимость в определенной операционной среде (в определенном классе исполнителей).
-
Результативность отдельных команд и всего алгоритма.
-
Применимость алгоритма ко всем возможным входным данным конкретного класса задач.
-
Определенность (детерминированность) команд и всего алгоритма для всех входных данных.
-
Формализованное, конструктивное описание (представление) команд алгоритма.
-
Минимальная полнота системы команд алгоритма.
-
Непротиворечивость любых команд алгоритма на любом наборе входных данных.
Понятие алгоритма относится к понятиям фундаментальным и неопределяемым. Алгоритмы являются объектом систематического исследования пограничной между математикой и информатикой научной дисциплины, примыкающей к математической логике – теории алгоритмов. Классическая теория алгоритмов не занимается «правилами построения алгоритмов», она занимается проблемой алгоритмической разрешимости. То есть занимается определением того, возможно ли вообще построить алгоритм для решения задач данного типа.
Начиная с 30-х годов 20 века понятие алгоритма подверглось глубокому изучению и уточнению, главным образом, в связи с понятием алгоритмической неразрешимости: для некоторых известных проблем не удавалось найти разрешающего алгоритма. Например, для проблемы четырех красок в теории графов или проблемы установления общезначимости формул логики предикатов. Проблема состоит в том, чтобы выяснить, является ли данная формула логики предикатов выполнимой или общезначимой (тавтологией). Алгоритмического решения данная проблема не имеет, т.е. не существует единого алгоритма применимого ко всем формулам, в соответствии с теоремой Черча:
Не существует алгоритма, который для любой формулы логики предикатов устанавливает, общезначима она или нет.
Если доказательством существования алгоритма является само описание решения задачи, то для доказательства его отсутствия нужно уточнить понятие «алгоритм», т.е. «формализовать» его.