Вы находитесь на странице: 1из 3

Теория алгоритмов.

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

1.1 Введение.

В связи с развитием вычислительной техники и информационных технологий


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

1.2. Основные свойства алгоритма.

1) Дискретность – исполнение алгоритма разбивается на шаги (команды), которые


выполняются последовательно.
2) Детерминированность – после выполнения очередного шага должно быть точно
известно, какой шаг выполняется далее.
(отметим, что иногда применяются недетерминированные алгоритмы, в которых
происходит недетерминированный выбор следующего шага).
3) Результативность – выполнение алгоритма должно приводить к получению
определенного результата, решению задачи.
4) Массовость – алгоритм должен позволять решать большое число задач данного
типа.

1.3. Анализ и сравнение алгоритмов.

Современные алгоритмы, как правило, реализуются при конкретном


использовании в виде компьютерных программ. Поэтому основными характеристиками
алгоритмов являются следующие:
1) затраты времени, необходимые для работы алгоритма,
2) объем компьютерной памяти, необходимый для реализации алгоритма.
Для анализа затрат времени работы алгоритма обычно вычисляют количество
операций, необходимых для выполнения алгоритма.
Сравнение алгоритмов при этом обычно производят по скорости роста числа
операций алгоритма в зависимости от объема входных данных n . Если количество
операций выражается функцией f (n) , то оценивают асимптотический рост числа
операций алгоритма при больших n и говорят об асимптотической сложности
алгоритма. Например, если f (n) - полиномиальная функция от n , то говорят, что
алгоритм имеет полиномиальную асимптотическую сложность.
При этом, обычно, оценивают старшую степень этого полинома.

Пример 1. Пусть f (n)  2n3  n2 . Тогда алгоритм имеет асимптотическую сложность


O(n3 ) .
Пример 2. Пусть для решения данной задачи есть два алгоритма и алгоритм 1 имеет
асимптотическую сложность O(n3 ) , а алгоритм 2 имеет асимптотическую сложность
O(n 2 ) , то алгоритм 2 является более эффективным, так как количество операций с ростом
n у алгоритма 1 растет быстрее, чем для алгоритма 2.

При таком анализе алгоритма важную роль имеют входные данные, так как для
разных классов входных данных время работы алгоритма может существенно отличаться.
Поэтому нужно разбить всевозможные входные данные на классы. На данных
одного класса условия работы алгоритма должны быть одинаковыми. Поэтому на данном
классе входных данных алгоритм имеет определенную асимптотическая сложность. На
другом классе входных данных асимптотическая сложность алгоритма может быть
другой.
Анализируя всевозможные классы входных данных определяют наихудший случай
(дающий максимальное количество операций), наилучший случай и средний случай. Для
каждого случая определяют асимптотическую сложность алгоритма.

1.4. Задачи P – класса и NP –класса.

Задачи, имеющие полиномиальную асимптотическую сложность, образуют P-


класс задач, т.е. класс задач полиномиальной сложности. Задачи P-класса могут быть
решены на компьютере за разумное количество времени, т.е. являются практически
разрешимыми.
NP- класс – это задачи недетерминированной полиномиальной сложности. К этому
классу относятся задачи, при решении которых детерминированные алгоритмы решения
задачи получаются экспоненциальной или факториальной сложности.
Пример. Пусть f (n)  2n . Тогда при добавлении к списку данных дополнительно только
одного элемента время работы алгоритма удваивается : f (n  1)  2n1  2n  2  2  f (n)
Такой быстрый рост числа операций, необходимых для выполнения алгоритма,
приводит к тому, что задача становится практически неразрешимой с помощью этого
алгоритма на компьютере за разумное время. Приходится применять приближенные
алгоритмы, имеющие полиномиальную сложность.
Задача называется NP-полной, если к ней можно свести все остальные задачи NP-
класса. Если для такой задачи будет найдена возможность ее решения с помощью
алгоритма полиномиальной сложности, то тем самым будет доказано, задачи NP- класса
допускают полиномиальные алгоритмы решения. Пока таких алгоритмов не найдено NP-
полной задачи и многие исследователи высказывают пессимизм по поводу возможности
найти такие алгоритмы. Однако, нет и доказательства того, что найти такой алгоритм
невозможно.
Типичные задачи NP- класса – это оптимизационные задачи, задачи о принятии
решений, раскраска графа, упаковка рюкзака и т.д. Для их решения применяются
недетерминированные алгоритмы полиномиальной сложности. Например, при раскраске
графа : недетерминированный этап – генерируется возможное решение (раскраска графа
данным количеством цветов), затем пытаются уменьшить число цветов, пока это
возможно. В этом случае детерминированный этап – проверка допустимости данной
раскраски.

Вам также может понравиться