
Garbage / Информатика / 3.4.3 - Полиномиальные алгоритмы и труднорешаемые задачи
.pdfПолиномиальные алгоритмы и труднорешаемые задачи
Разные алгоритмы имеют различную временную сложность, и выяснение того, какие алгоритмы "достаточно эффективны", а какие "совершенно неэффективны", всегда будет зависеть от конкретной ситуации. Однако теоретики, занимающиеся разработкой и анализом алгоритмов, предлагают для сравнения эффективности алгоритмов один простой подход, позволяющий существенно прояснить
ситуацию. Речь идет о различии между |
полиномиальными |
и |
экспоненциальными алгоритмами. |
|
|
Будем говорить, что функция f(n) есть 0(g(n)), если существует константа с,
такая, что |f(n)| ≤ c|g(n)| для всех значений n ≤ 0. Полиномиальным алгоритмом (или алгоритмом полиномиальной временной сложности) называется алгоритм, у
которого временная сложность равна 0(р(п)), где р(п) - некоторая полиномиальная функция, а n —входная длина. Алгоритмы, временная сложность которых не поддается подобной оценке, называются "экспоненциальными".
Различие между двумя указанными типами алгоритмов становится особенно заметным при решении задач большого размера. Таблица на рис. 2 позволяет сравнить скорости роста нескольких типичных полиномиальных и экспоненциальных функций. (Обратите внимание на чрезвычайно быстрый рост двух приведенных экспонент.)
Различие между полиномиальными и экспоненциальными алгоритмами проявляется еще более убедительно, если проанализировать влияние увеличения быстродействия ЭВМ на время работы алгоритмов. Рис. 3 показывает, насколько увеличатся размеры задач, решаемых за один час машинного времени, если благодаря совершенствованию технологии быстродействие ЭВМ возрастет в 100 или 1000 раз по сравнению с современными машинами. Заметим, что для функции f(n) = 2n увеличение скорости вычислений в 1000 раз приводит лишь к тому, что размер наибольшей задачи, разрешимой за один час, возрастет только на 10, в то время как для функции f(n) = n5 этот размер возрастет почти в 4 раза.
Функция |
|
|
|
|
|
|
|
временной |
|
|
|
|
Размер п |
|
|
сложности |
|
|
|
|
|
|
|
|
10 |
20 |
30 |
40 |
50 |
60 |
|
|
|
|
|
|
|
|
|
п |
0,0000 |
0,00002 |
0,000 |
0,60004 |
0,00005 |
0,00006 сек |
|
|
1 сек |
сек |
|
03 сек |
сек |
сек |
|
n2 |
0,0001 |
0,0004 |
0,000 |
0,0016 |
0,0025 сек |
0,0036 сек |
|
|
сек |
сек |
|
9 |
сек |
|
|
n3 |
0,001 |
0,008 |
0,027 |
0,064 сек |
0,125 сек |
0,216 сек |
|
|
сек |
сек |
|
сек |
|
|
|
n5 |
0,1 |
3,2 |
сек |
24,3 |
1,7, мин |
5,2 мин |
13,0 мин |
|
сек |
|
|
сек |
|
|
|
2n |
0,001 |
1.0 |
сек |
17,9 |
12,7 дней |
35,7 лет |
366 столетий |
|
сек |
|
|
мин |
|
|
|
|
|
|
|
|
|
|
|
3n |
0,059 |
58 мин |
6,5 |
3855 |
2 х 108 |
l,3 |
x |
l013 |
|
сек |
|
лет |
столети |
столетий |
столетий |
|
Рис. 2. Сравнение нескольких полиномиальных и экспоненциальных функций временной сложности.
Функция |
На |
На ЭВМ в |
На ЭВМ в |
|
временной |
современных |
100 |
раз |
1000 раз |
сложности |
ЭВМ |
более |
более |
|
п |
N1 |
100 N1 |
1000 N1 |
|
п2 |
N2 |
10 |
N2 |
31,6 N2 |
п3 |
N3 |
4,64 N3 |
10 N3 |
|
п5 |
N4 |
2,5 N4 |
3,98 N4 |
|
2n |
N5 |
N5 + 6,64 |
N5 + 9,97 |
|
3n |
N6 |
N6 + 4,19 |
N6 + 6,29 |
Рис. 3. Влияние технического совершенствования ЭВМ на полиномиальные и экспоненциальные алгоритмы.
Эти таблицы демонстрируют некоторые причины, по которым олиномиальные алгоритмы обычно считаются более предпочтительными по сравнению с экспоненциальными. Эта точка зрения различающая, с одной стороны, полиномиальные алгоритмы, а с другой стороны, экспоненциальные, является отправным пунктом в нашем определении труднорешаемых задач и теории NPполных задач.
Часто отождествляют полиномиальные алгоритмы с "хорошими" алгоритмами. Согласно такой точке зрения, экспоненциальные алгоритмы не следует считать "хорошими", и чаще всего так оно и есть.
Большинство экспоненциальных алгоритмов - это просто варианты полного перебора, в то время как полиномиальные алгоритмы обычно можно построить лишь тогда, когда удается более глубоко проникнуть в суть решаемой задачи. Имеется широко распространенное соглашение, согласно которому задача не считается "хорошо решаемой" до тех пор, пока для нее не получен полиномиальный алгоритм. Поэтому мы будем называть задачу труднорешаемой, если для ее решения не существует полиномиального алгоритма.
Конечно, это формальное определение следует рассматривать только как одну из возможных трактовок понятия "труднорешаемая задача". Различие между "эффективными" (полиномиальными) алгоритмами и "неэффективными" (экспоненциальными) алгоритмами может принять совсем иной характер, когда размеры решаемых задач невелики. Даже на рис. 2 функция f(n) = 2n ведет себя
лучше, чем f(n) = n5 при п ≤ 20. Можно легко построить еще более яркие примеры
Более того, известны некоторые экспоненциальные алгоритмы, весьма хорошо зарекомендовавшие себя на практике. Дело в том, что временная сложность определена нами как мера поведения алгоритма в наихудшем случае, и тот факт, что какой-то алгоритм имеет временную сложность порядка 2n, означает только, что решение по крайней мере одной индивидуальной задачи размера п требует времени порядка 2n. На самом деле может оказаться, что большинство индивидуальных задач требует для своего решения значительно меньших затрат времени, и такого рода ситуация действительно имеет место для нескольких хорошо известных алгоритмов.
К сожалению, подобные примеры очень редки. Хотя экспоненциальные алгоритмы известны для многих задач, немногие из них считаются приемлемыми для практических целей. Даже при наличии успешно работающих экспоненциальных алгоритмов, упомянутых выше, исследователи не отказались от попыток найти для соответствующих задач полиномиальные алгоритмы. В действительности сам факт успешного применения экспоненциальных алгоритмов давал основание предположить, что они каким-то образом выявляют некоторые существенные особенности решаемых задач и что более глубокое их исследование может привести к дальнейшему улучшению методов. В настоящее время пока не получено удовлетворительных объяснений, почему эти алгоритмы работают успешно, и не известны методы, позволяющие заранее прогнозировать хорошую работу того или иного экспоненциального алгоритма в практической ситуации.
С другой стороны, полиномиальные алгоритмы часто позволяют делать такого рода прогнозы, поскольку полиномиальные функции значительно более адекватно оценивают время работы алгоритмов. Хотя алгоритмы, имеющие временную сложность типа п100 или 1099n2, не могут считаться эффективными с практической точки зрения, естественно возникающие "полиномиальные" задачи обычно требуют для своего решения (в самом худшем случае) времени порядка п2 или п3, причем коэффициенты при старших членах полиномов не слишком велики. Алгоритмы, обладающие такими оценками, можно считать "эффективными", и именно это весьма желательное свойство заставляет отдавать предпочтение полиномиальным алгоритмам как средству решения задач.
Наше определение "труднорешаемой задачи" создает базу для теории, обладающей значительной общностью и большими возможностями. Понятие труднорешаемой задачи оказывается, по существу, независимым от конкретной схемы кодирования и модели ЭВМ, используемых при определении временной сложности.
Можно показать, что при различных способах описания задачи получаемые входы отличаются друг от друга не более чем "полиномиальным образом", т. е. любой алгоритм, имеющий полиномиальную временную сложность при одной из этих схем кодирования, будет также обладать полиномиальной временной сложностью при всех остальных схемах.
В действительности стандартные схемы кодирования, используемые на практике для любой конкретной задачи, по-видимому, всегда будут отличаться друг от друга не более чем полиномиальным образом. Было бы трудно представить себе разумную схему кодирования для какой-либо задачи, которая отличалась бы более чем полиномиальным образом от стандартных схем. Хотя мы не можем формально выразить такое понятие, как "разумная схема кодирования", следующие два условию охватывают важные требования, связанные с этим понятием
(1)код любой индивидуальной задачи I должен быть "сжатым", т. е. не содержать избыточной информации или символов;
(2)числа, входящие в условия задачи I, должны быть представлены в двоичной системе счисления (или десятичной, или, восьмеричной, или иметь любое другое основание, но только не 1).
Если мы ограничимся рассмотрением только тех схем кодирования, которые удовлетворяют этим условиям, то выяснением вопроса, является ли данная задача труднорешаемой, не будет зависеть от выбора конкретной схемы кодирования.
Аналогичные замечания можно сделать относительно выбора модели ЭВМ. Все известные в настоящее время реалистические модели ЭВМ (например, одноленточные и многоленточные машины Тьюринга, машины с произвольным доступом к памяти) эквивалентны относительно. Можно ожидать, что и любая иная "разумная" модель ЭВМ будет эквивалентна по сложности всем перечисленным моделям.
Под словами "разумная модель" здесь главным образом имеется в виду то, что объем работы, выполняемой машиной в единицу времени, ограничен (сверху) полиномом. Так, например, модель, обладающая способностью выполнять параллельно произвольно много операций, не будет считаться "разумной", и в действительности ни одна из существующих (или проектируемых) ЭВМ не обладает подобным свойством. Во всяком случае, если ограничиться рассмотрением стандартных моделей реальных ЭВМ, то класс труднорешаемых задач не будет зависеть от выбора конкретной модели, и такой выбор можно осуществлять, исходя из интересов дела и не уменьшая при этом сферы применимости наших результатов.