Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЛИТА / Глава_4.doc
Скачиваний:
18
Добавлен:
17.04.2018
Размер:
1.36 Mб
Скачать

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

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

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

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

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

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

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

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

Соседние файлы в папке МЛИТА