1. РОССИЙСКАЯ АКАДЕМИЯ НАРОДНОГО ХОЗЯЙСТВА И
ГОСУДАРСТВЕННОЙ СЛУЖБЫ ПРИ ПРЕЗИДЕНТЕ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Нижегородский институт управления
Кафедра информатики и информационных технологий
Введение в алгоритмы и
структуры данных
Ивина Наталья Львовна
доцент кафедры Информатики и ИТ
2. Тема 2. Оценка сложности
алгоритма.
Определение временной и емкостной оценок
сложности алгоритма.
Нахождение асимптотических характеристик
оценок сложности алгоритма.
2
3. Введение
" Поразительно, скольким программистам приходится слишком
дорогим способом выяснять, что их программа не может
обработать входные данные раньше, чем через несколько дней
машинного времени. Лучше было бы предугадать такие случаи с
помощью карандаша и бумаги. "
С. Гудман (S. Goodman), С. Хидетниеми (S. Hedetniemi)
S.E. Goodman. Introduction to the design and analysis of algorithms/ Goodman S.E.,
Hedetniemi S.T. -1977 .
3
4. Постановка задачи
Для большинства проблем существует много различных
алгоритмов.
Какой из них выбрать для решения конкретной задачи?
Пространственная эффективность
Временная эффективность
Теория сложности вычислений возникла из потребности сравнивать
быстродействие алгоритмов (например, алгоритмов поиска и
сортировки), чётко описывать их поведение (время исполнения и объём
необходимой памяти) в зависимости от размера входа.
4
5. Вычислительная сложность
Вычислительная сложность - мера использования алгоритмом
ресурсов времени или пространства.
Время выполнения алгоритма определяется количеством
тривиальных шагов, необходимых для решения проблемы и
зависит от размера входных данных (далее n).
Пространство - объём памяти или места на носителе данных,
используемом алгоритмом.
5
6. Сравнение формул
Что быстрее: 50N2 + 31N3 + 24N + 15 или
3N2 + N + 21 + 4*3N ?
Ответ зависит от значения N:
N 50N2 + 31N3 + 24N + 15 3N2 + N + 21 + 4*3N
1 120 37
2 511 71
3 1374 159
4 2895 397
5 5260 1073
6 8655 3051
7 13266 8923
8 19279 26465
9 26880 79005
10 36255 236527
6
8. Асимптотическая сложность
F (n) – функция трудоемкости, определяющая зависимость между
входными данными и количеством базовых операций (временными
затратами алгоритма)
O(g(n)) = { F(n): существует такая пара положительных значений с и n0,
что |F(n)|≤c|g(n)| для всех n≥n0 }
f ограничена сверху функцией g
(с точностью до постоянного
множителя) асимптотически
8
9. Точное время обработки массива из N элементов:
Действительное время(N)= N2+5*N+100
Вспомогательная функция:
Оценка времени(N)=1,1*N2
Вспомогательная функция
доминирует над точной,
она проще и близка к
точной.
Порядок алгоритма
обработки массива будет
O(N2).
9
Пример
10. Правила определения сложности
k - константа, f и g – функции
1. O(k*f)=O(f)
2. O(f*g)=O(f)*O(g) или O(f/g)=O(f)/O(g)
3. O(f+g) равна доминанте O(f) и O(g)
10
11. Классы оценок сложности
- множества вычислительных проблем, для решения которых
известны алгоритмы, схожие по сложности.
•O(1) – константная сложность
•O(n) – линейное время
•O(na) - полиномиальная сложность:
- O(n2) – квадратичное время
- O(n3) – кубическое время
•O(log(n)) – логарифмическое время
•O(n log(n)) – "n-log-n" время
•O(2n) – экспоненциальное время
11
15. 15
Временные сложности
сортировок
Метод
сортировки
В лучшем
случае
В среднем
случае
В худшем
случае
Прямого
обмена
O(N) O(N2) O(N2)
Выбором O(N2) O(N2) O(N2)
Быстрая
O(N*logN) O(N*logN) O(N2)
22сортировка
16. Оценка сложности программы
"Тройки Пифагора"
O(H)=O(1)+O(1)+O(1)=O(1);
O(I)=O(N)*(O(F)+O(J))=
O(N)*O(доминанты условия) =О(N);
O(G)=O(N)*(O(C)+O(I)
+O(K))=O(N)*(O(1)+O(N)
+O(1))=O(N2);
O(E)=O(N)*(O(B)+O(G)+O(L))=O(N)*
O(N2)= O(N3);
O(D)=O(A)+O(E)=O(1)+O(N3)= O(N3)
16
17. Класс сложности - это множество вычислительных задач, для
решения которых существуют алгоритмы, схожие по
вычислительной сложности.
•Класс P
•Класс NP
Для каждого класса существует категория задач, которые являются
«самыми сложными». Это означает, что любая задача из класса
сводится к такой задаче, и притом сама задача лежит в классе.
17
Классы вычислительной
сложности
18. Проблемы, решение которых считается «быстрым», то есть
полиноминально зависящим от размера входных данных
(например, O(n), O(n2))
ПРИМЕРЫ:
•Сортировка
•Поиск во множестве
•Выяснение связности графов
18
Класс сложности P
19. Проблемы, для решения которых используются лишь алгоритмы,
экспоненциально зависящие от размера входных данных
(например, O(2n))
ПРИМЕРЫ:
•Задача коммивояжера
•Задача выполнимости булевых формул
•Факторизация
19
Класс сложности NP