Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / log4.doc
Скачиваний:
77
Добавлен:
16.04.2013
Размер:
1.21 Mб
Скачать

4.6. О сложности алгоритмов

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

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

Пример 1. Алгоритм Евклида нахождения наибольшего общего делителя двух натуральных чисел, является полиномиальным. Действительно, первый шаг алгоритма – это делениенас остатком:гдеЗатем с пароймы проделываем то же самое, что делали с паройи т.д. Окончание алгоритма произойдёт, когда очередное деление вообще не будет давать остатка. Так как остатки при переходе от одного шага к другому уменьшаются, то не более, чем зашагов произойдёт остановка, и мы получим ответ (здесь предполагается, что– это верхняя граница рассматриваемых чиселиТаким образом, если считать, что деление с остатком одного числа на другое делается заэлементарных шагов, то сложность алгоритма будет порядкат.е. он не просто полиномиальный, но дажелинейный.

Пример 2. Вычисление определителя матрицы размераможет быть произведено с помощью полиномиального алгоритма (хотя, если делать по определению, вычисляя и складывая всеслагаемых, то алгоритм будет даже более, чем экспоненциальным). Действительно, приведение матрицы к треугольному виду требуетопераций над строками (под операцией здесь понимается вычитание изi-й строки умноженной наj-й строки), а каждая такая операция осуществляется с помощью не болеесложений и умножений и одного деления (так как). После приведения матрицы к треугольному виду вычисление определителя делается с помощьюумножений. Таким образом, общее количество элементарных операций не превосходитчто является многочленом третьей степени.

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

Другой подход состоит в рассмотрении машины Тьюринга, обрабатывающей слова в двоичном алфавите причём слово длиныинтерпретируется как натуральное числоГоворят, что машина Тьюринга работает за полиномиальное время, если существует многочлентакой, что на любом входном слове длинымашинаостанавливается после выполнения не более, чемопераций. Пусть– множество всех конечных слов в алфавитеЯзык– это любое подмножество множестваМашина Тьюрингараспознаётязыкесли на всяком входном словемашинаостанавливается в принимающем состоянии, а на слове– в отвергающем. Класс Р – это класс всех языков, распознаваемых машинами Тьюринга, работающими за полиномиальное время. Функциявычислима за полиномиальное время, если существует работающая полиномиальное время машина Тьюринга такая, что если на её вход подано словото в момент остановки на ленте будет записано значениеЯзыкпринадлежит классуNP, если существует предикатвычислимый за полиномиальное время, и многочлентакие, что(Здесьобозначает длину словат.е. число входящих в него букв). Ясно, что РNP. Вопрос о том, совпадают или нет эти классы языков, до сих пор открыт. Большинство специалистов считают, что они не совпадают (так называемаягипотезаРNP). В классеNP-языков выделяются наиболее сложные, называемыеNP-полными, причём любойNP-полный язык распознаваем за полиномиальное время тогда и только тогда, когда Р=NP.

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

20

Соседние файлы в папке Лекции