Полиномиальные и неполиномиальные оценки сложности
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

С ростом n время вычисления tT(n) обычно растет. Для конкретной модели вычисления зачастую проще и нагляднее сравнивать не сами времена, а их верхние оценки.

При грубых оценках можно сравнивать лишь типы функций, при более точных - степени полинома или даже коэффициенты.

В качестве примеров можно привести следующие две известные таблицы (они приведены во многих учебниках по теории сложности).

Следующая таблица позволяет оценить скорость роста некоторых полиномиальных и экспоненциальных функций.

 

Значение n

Функция сложности

10 20 30 40 50 60

n

0.00001 сек 0.00002 сек 0.00003 сек 0.00004 сек 0.00005 сек 0.00006 сек

n2

0.0001 сек 0.0004 сек 0.0009 сек 0.0016 сек 0.0025 сек 0.0036 сек

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 мин

2n

0.001 сек 1 сек 17.9 мин 12.7 дней 35.7 лет 366 веков

3n

0.059 сек 58 мин 6.5 лет 3855 веков 2х108 веков 1.3х1013веков
               

 

В этой таблице отражено влияние совершенствования ЭВМ на возможности алгоритмов.

 

Размеры наибольшей задачи, решаемой за один час

Функция сложности На современных ЭВМ На ЭВМ, в 100 раз более быстрых На ЭВМ, в 1000 раз более быстрых
n a 100a 1000a
n2 b 10b 31.6b
n3 c 4.64c 10c
n5 d 2.5d 3.98d
2n e e+6.64 e+9.97
3n f f+4.19 f+6.29

 

Эти таблицы, в частности, иллюстрируют различие между полиномиальными и экспоненциальными алгоритмами. Тем самым аргументируется внимание к разделению алгоритмов на классы по трудоемкости.

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

Это обычная ситуация. Она может быть проиллюстрирована и на других упомянутых выше примерах. Поэтому экспоненциальные алгоритмы ассоциируются с простым полным перебором вариантов (отсюда и термин переборный алгоритм).(Конечно, не все переборные алгоритмы имеют экспоненциальную сложность!)

В то же время для построения полиномиальных алгоритмов требуются обычно многочисленные ухищрения, позволяющие избежать перебора.

Более подробные примеры рассмотрены в следующем разделе.

Сложность алгоритмов некоторых задач.

Данный раздел содержит примеры алгоритмов, иллюстрирующих проведенные выше рассуждения. Также алгоритмы и задачи этого разделы будут использованы в дальнейшем при обсуждении классов сложности задач. Этот раздел ни в коем случае не является попыткой обзора алгоритмов и методов их построения. (Такая попытка сделана, например, в [5], а монографии  [1] и [4] целиком посвящены описанию алгоритмов и методов их построения). Более того, примеры этого раздела в большинстве своем либо очевидны, либо знакомы вам из курса дискретной математики.

Далее коротко приводится алгоритм и оценка его сложности «в худшем». Описание задач, а также обозначение их параметров приведены выше.

Задача нахождения максимального числа.

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

Задача сортировки.

В дискретной математике сортировке подлежат объекты разной природы. Пусть необходимо отсортировать (например, по возрастанию) числовой массив из n элементов. Без ограничения общности будем считать, что – степень двойки (чтобы не возиться с целыми частями). В качестве элементарной операции используется операция сравнения чисел. Чтобы сравнивать числа нужно их различать как объекты сортировки (эти объекты имеют численные значения). Сравнение – это операция с результатом «да» или «нет», поэтому кодируем объекты сортировки бинарными последовательностями. Какова минимальная длина такой последовательности для множества их M элементов? Очевидно, что это  log M. В теории информации этот факт известен как энтропия по Хартли.

Если мы упорядочиваем  n  объектов (чисел), то в зависимости от их значений можно получить n! различных упорядочиваний. Последовательность сравнений для их различения не может быть меньше log(n!). Применяем формулу Стирлинга: log(n!)=(n+1/2)logn-n+0,5log2π+α/(12n), 0< α <1, n→∞ . Отсюда следует, что задачу сортировки нельзя решить со сложностью алгоритма, меньшей  O(nlogn).

C 1950-х годов разработано много методов сортировки со сложностью алгоритма, равной O(nlogn).

Задача о камнях.

Здесь тоже дан массив из n чисел, но его не нужно упорядочивать или искать в нем число. Нужно попробовать разложить его на две «максимально» равные части. Каждая из этих частей является подмножеством всего множества камней и полностью определяет другую (оставшиеся камни). Всего подмножеств, как вы знаете, 2n. На сегодняшний день не существует алгоритма решения этой задачи, отличного от полного перебора. Перебирая последовательно все подмножества мы сравниваем их вес с числом (S ai)/2). Если получили совпадение, то ответ «да», если же такого совпадения мы не получаем после того, как все множества просмотрены, то ответ «нет». Сложность такого алгоритма O(n2n).

Простота числа.

Пусть дано натуральное N. Тогда длина входа задачи: n=logN.

Из школы известно два алгоритма: простой перебор и решето Эратосфена.

В первом случае нужно осуществить n1/2 делений. Сложность алгоритма t(n)=2n/2.

Можно показать, что сложность алгоритма решето Эратосфена составляет O(2nlog n) операций в модели вычислений RAM, или O(2n n(log n)) битовых операций, при условии вычисления и зачеркивания каждого кратного числа за время O(1). Таким образом, другая из приведенных в качестве примеров задач – задача о разложении числа на множители – тоже имеет экспоненциальную сложность, так как задача о простоте – это частный случай.

Дата: 2019-07-30, просмотров: 366.