- •Содержание курса “Теория алгоритмов и вычислительных процессов”
- •I. Теория алгоритмов
- •Основные понятия теории алгоритмов
- •1.1. Предварительные сведения
- •1.2. Основные требования к алгоритмам
- •1.3. Необходимость математического понятия алгоритма
- •2. Типы алгоритмов
- •3. Способы представления (описания) алгоритмов
- •3.1. Исполнитель алгоритма
- •3.2. Строчная словесная запись алгоритма
- •3.3. Графическая форма записи
- •3.4. Управляющие структуры
- •4. Описание задачи и выбор алгоритма
- •5. Универсальные алгоритмические модели
- •Понятие конструктивного объекта
- •Понятие об алфавитных алгоритмах
- •5.3. Формализация понятия “алгоритм”
- •5.4. Схема построения алгоритмической системы
- •6. Рекурсивные функции
- •6.1. Примитивно-рекурсивные функции
- •6.1.1. Оператор суперпозиции (подстановки)
- •6.1.2. Оператор примитивной рекурсии
- •6.2. Частично-рекурсивные функции
- •Пример 6.2.2. Рассмотрим функцию
- •6.3. Тезис Черча
- •7. Машины Тьюринга (Поста)
- •7.1. Основные понятия машин Тьюринга
- •7.2. Способы представления машины Тьюринга
- •7.2.1. Представление машины Тьюринга совокупностью команд
- •7.2.2. Представление машины Тьюринга графом
- •7.2.3. Представление машины Тьюринга таблицей соответствия
- •7.3. Примеры построения машин Тьюринга
- •Вычислимость по Тьюрингу
- •7.5. Некоторые операции над машиной Тьюринга
- •7.5.1. Композиция машин Тьюринга
- •7.5.2. Итерация машины Тьюринга
- •7.5.3. Разветвление машин Тьюринга
- •7.4. Универсальная машина Тьюринга
- •7.5. Тезис Тьюринга
- •7.6. Машина Поста
- •9. Алгоритмическая разрешимость. Алгоритмические проблемы
- •10. Сложность алгоритмов и вычислений
- •Анализ скорости выполнения алгоритмов
- •Память или время
- •Временнáя сложность алгоритма
- •Оценка с точностью до порядка
- •Определение сложности
- •Сложность рекурсивных алгоритмов
- •Средний и наихудший случай
- •Общие функции оценки сложности
- •Скорость работы алгоритма в реальных условиях
- •19.5. Труднорешаемые задачи
10. Сложность алгоритмов и вычислений
Поскольку понятие рекурсивной функции строгое, то с помощью обычной математической техники можно доказать, что решающая некоторую задачу функция не является рекурсивной, что эквивалентно отсутствия для данной задачи разрешающего алгоритма. Аналогично, отсутствие разрешающей машины Тьюринга или нормального алгоритма для некоторой задачи равносильно отсутствию для нее разрешающего алгоритма. Указанные результаты составляют основу так называемой дескриптивной (качественной) теории алгоритмов. Основным содержанием теории алгоритмов является классификация задач по признаку алгоритмической разрешимости, те есть получения высказываний типа “Задача Х алгоритмически разрешима” или “Задача Х алгоритмически не разрешима”.
Обсудим еще одну характеристику алгоритма – его сложность. Развитие и совершенствование компьютерной техники повлекло за собой создание разнообразных алгоритмов, обеспечивающих решение многочисленных прикладных задач, причем даже для однотипных задач создавалось (и создается) много алгоритмов. Подобные алгоритмы ранее были названы эквивалентными. Однако для практики недостаточно знать, что решение некоторой задачи на компьютере в принципе возможно (т.е. проблема алгоритмически разрешима). Исполнение любого алгоритма требует определенного объема памяти компьютера для размещения данных и программы, а также времени центрального процессора по обработке этих данных – эти ресурсы ограничены и, следовательно, правомочен вопрос об эффективности их использования. Таким образом, в самом широком смысле понятие эффективности связано со всеми вычислительными ресурсами, необходимыми для работы алгоритма. Однако обычно под «самым эффективным» понимается алгоритм, обеспечивающий наиболее быстрое получение результата, поскольку в практических ситуациях именно ограничения по времени часто являются доминирующим фактором, определяющим пригодность того или иного алгоритма.
Так, при решении реальных задач, где необходимо выполнить некоторые инструкции, например сортировку на компьютере записей о миллионе покупателей, эффективность алгоритма становится критерием оценки алгоритма.
Поэтому в теории алгоритмов возникло важное направление – сложность алгоритмов и вычислений. Начала складываться так называемая метрическая (количественная) теория алгоритмов, основным содержанием которой является классификация задач по классам сложности. В этой области выделяются задачи получения верхних и нижних оценок сложности алгоритмов, и различные методы решения этих задач. Важно подчеркнуть, что как сложность алгоритмов, так и сложность вычислений могут определяться различными способами. Разработка методов оценки сложности алгоритмов и вычислений имеет важное теоретическое и практическое значение.
Анализ скорости выполнения алгоритмов
Теория сложности изучает сложность алгоритмов. Существует несколько способов измерения сложности алгоритма. Программисты обычно сосредотачивают внимание на скорости алгоритма, но не менее важны и другие показатели - требования к объему памяти, свободному месту на диске. Использование быстрого алгоритма не приведет к ожидаемым результатам, если для его работы понадобится больше памяти, чем есть у вашего компьютера.
