Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Часть 5. Элементы теории вычислительной сложности

Математическая логика и теория алгоритмов. Курс лекций

В.В. Гуренко

Раздел 2. Теория алгоритмов

(продолжение)

 

В процессе проектирования и реализации программных и программно-аппаратных систем является обязательным качественное оценивание алгоритма. Критерием оценки качества принято считать сложность алгоритма. Для получения объективной оценки сложность должна иметь количественное выражение.

Можно считать, что два алгоритма А1 и А2, применяемые к одному и тому же классу задач, сравнимы по длине кода (например, количеству операторов языка программирования). Чем короче код, тем, казалось бы, алгоритм лучше. Однако можно привести достаточное число примеров, когда короткая программа работает дольше, чем длинная, причем намного.

На практике более приемлема временн á я оценка сложности. Необходимо понимать, что временн ы е оценки не привязывают к техническим характеристикам конкретной вычислительной среды (компьютерной системы).

Как вариант, можно построить математическую модель алгоритма, например, машину Тьюринга, и число тактов ее работы принять за временн у ю оценку, т.е. сложность алгоритма. Число тактов ТМ равно количеству конфигураций тьюрингова вычисления, приводящего к преобразованию исходного слова a на ленте к результирующему слову β = Т(a).

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

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

В случае ТМ число ячеек на ленте, к которым обращалась машина для чтения/записи в процессе работы над исходным словом a отражает временн у ю сложность алгоритма, а в целом количество ячеек ленты, необходимое для работы ТМ на данном слове, отражает пространственную сложность. Понятно, что и временная, и пространственная сложность алгоритма зависит от размерности исходных данных, к которым он применяется. Очевидно, однако, что размерность данных гораздо больше влияет на временн у ю сложность.

Так, в случае поиска кратчайшего пути в графе классические алгоритмы Форда и Дейкстры будут менее эффективными с точки зрения затрачиваемых единиц времени, чем метод полного перебора, если число вершин графа 5–6, и более эффективными на графах с числом вершин 10-15. Сами алгоритмы Форда и Дейкстры на больших графах имеют разную временн у ю сложность: чем выше мощность множества вершин, тем более эффективен алгоритм Дейкстры и менее эффективен алгоритм Форда.

В теории алгоритмов принято выполнять построение функции от размерности задачи именно для определения временн о й сложности алгоритма, и в дальнейшем, говоря о сложности алгоритма, будем подразумевать именно временн у ю сложность. Саму функцию будем называть функцией сложности. В частности, сложность алгоритмов на графах можно рассматривать как функцию сложности от числа вершин графа. Функцию необходимо строить для худшего случая, т.е. наименее благоприятного с точки зрения объема вычислений в ходе решения задачи.

В принято разделять алгоритмы на два класса в зависимости от характера функции сложности.

1). Полиномиальные, или «хорошие» алгоритмы. Функция сложности «хорошего» алгоритма представима в виде некоторого полинома. Например:

T(n) = 15n3 + 2n2 + 3n – 7,

где n – размерность задачи (в частности, число вершин графа).

2). Экспоненциальные, или «плохие» алгоритмы. Функция сложности такого алгоритма не представима полиномом. Их называют экспоненциальными несмотря на различный математический характер. Например, функция сложности может иметь в своей записи вычисление факториала и не содержать вычисление экспоненты. Однако любая неполиномиальная функция сложности представима в виде:

T(n) = 2P(n),

где P – некоторый полином.

Полиномиальный алгоритм считают приемлемым, если степень полинома не более 4.

В построении точной функции сложности нет необходимости, т.к. с увеличением размерности задачи влияние коэффициентов при меньших степенях полинома и самих младших степеней становится незначительным. На практике оказывается достаточным оценить рост функции сложности с увеличением размерности задачи. Это достигается при помощи асимптотической оценки функции сложности.

Смысл заключается в сравнении некоторой реальной функции f(n) и идеальной (упрощенной) функции g(n) при n ® ¥:

 

 

Если этот предел есть const > 0, то говорят, что f(n) = O(g(n)) (читается «О большое от g от n).

Например, для приведенного выше полинома можно записать:

f(n) = 15n3 + 2n2 + 3n – 7,

g(n) = n3,

 

 
 


Если то говорят, что f(n) = о(g(n)) (читается «О малое от g от n).

 

В предыдущем примере можно положить g(n) = n3,5, т.к.

 
 

 


Тогда f(n) = o(n3,5).

O(g(n)) называют верхней границей функции сложности, а

o(g(n)) называют нижней границей функции сложности.

Когда это возможно, стремятся к получению верхней границы, т.к. время работы алгоритма растет с увеличением размерности задачи n не быстрее, чем g(n).

Говорят, что реальная функция сложности f(n) асимптотически эквивалентна идеальной функции сложности g(n), если указанный предел равен единице:

 

 
 


Если верхней границы функции сложности не существует, т.е. то
пишут: f(n) = Ω(g(n)) (читается «Омега большое от g от n).

<== предыдущая лекция | следующая лекция ==>
Брендинг | Решение уравнений в частных производных методом конечных разностей (решающая функция multigrid)
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 371; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.