- •Оценка сложности алгоритмов
- •Процесс создания компьютерной программы
- •►Теоо́рия алгорио́тмов— это наука, изучающая общие свойства и закономерности алгоритмов и разнообразные формальные
- •Задачи теории алгоритмов
- •Теория алгоритмов развивается
- •Анализ трудоёмкости
- •Оценка сложности алгоритма
- •►Когда используют обозначение O(), имеют в виду не точное время исполнения, а только
- •Скорость роста функций
- •►Оценка Ώ задает нижнюю
- •►Доказано, что все алгоритмы сортировки, основанные на попарном сравнении элементов,
- •Классы сложности
- •машина Тьюринга
Оценка сложности алгоритмов
Процесс создания компьютерной программы
►формализация и разработка технического задания;
►разработка алгоритма решения задачи;
►написание, тестирование, отладка
и документирование программы; ►получение решения.
►Теоо́рия алгорио́тмов— это наука, изучающая общие свойства и закономерности алгоритмов и разнообразные формальные модели их представления.
Задачи теории алгоритмов
формальное доказательство алгоритмической неразрешимости задач
асимптотический анализ сложности
алгоритмов
классификация алгоритмов в соответствии с классами сложности
разработка критериев сравнительной оценки качества алгоритмов и т. п.
Теория алгоритмов развивается
проблемы формулировки задач P, NP и др.
методы получения асимптотических оценок
получение явных функции трудоёмкости,
интервального анализа функций, поиска практических критериев качества алгоритмов, разработки методики выбора рациональных алгоритмов
Анализ трудоёмкости
алгоритмов
►асимптотический анализ
►Основной оценкой функции сложности
алгоритма f(n) является оценка Ө (читается “тэта большое”) или O (О
большое) . Здесь n — величина объёма данных или длина входа.
Оценка сложности алгоритма
►f(n) = Ө(g(n)), если при g > 0 при n > 0 существуют положительные с1, с2,
n0, такие, что: c1(g(n)) <= f(n) <= c2(g(n)) при n > n0, иначе говоря,
можно найти такие с1 и c2, что при
достаточно больших n f(n) будет заключена между c1(g(n)) и c2(g(n)).
►Изf(n) = Ө(g(n)) следует, что g(n) =
Ө(f(n)).
►Говорят, что f(n) = O(g(n)) если Ǝ c>0, n0 > 0: 0 <= f(n) <= cg(n) для любого
n > n0
►Иначе говоря, запись f(n) = O(g(n)) означает, что f(n) принадлежит
классу функций, который растут не быстрее, чем функция g(n) с точностью до постоянного множителя.
►Когда используют обозначение O(), имеют в виду не точное время исполнения, а только его предел сверху, причем с точностью
до постоянного множителя. Когда говорят, например, что алгоритму Ὠ
требуется время порядка O(n2), имеют в виду, что время исполнения задачи растет не быстрее, чем квадрат количества элементов.
Скорость роста функций
n |
log n |
n*log n |
|
n2 |
0 |
0 |
1 |
1 |
|||
16 |
4 |
64 |
256 |
256 |
8 |
2048 |
65536 |
4096 |
12 |
49152 |
|
16777216 |
|
|
|
65536 |
16 |
1048565 |
|
4294967296 |
|
|
|
1048476 |
20 |
20969520 |
|
1099301922576 |
|
|
|
16775616 |
24 |
402614784 |
|
81421292179456 |
|
|