
- •Эффективность
- •Эффективность алгоритма
- •Время выполнения зависит
- •Порядком некоторой функции F(n)
- •Время работы
- •Микроконтроллеры AVR семейства Tiny и Mega фирмы ‘ATMEL’
- ••если алгоритм не содержит вложенных циклов, то это будет какая-то линейная функция от
- •асимптотика роста
- •Скорость алгоритмов на ПК с быстродействием 1млн оп в секунду
- •Примеры сложности алгоритмов
- •правила определения сложности
- •список функционального доминирования
- •Алгоритм сортировки
- •Алгоритм сортировки слиянием
- •Алгоритм сортировки слиянием
- •разница в применении 2-х алгоритмов
- •Сложность рекурсивных алгоритмов
- •Сложность рекурсивных алгоритмов
- •Объёмная сложность рекурсивных алгоритмов
- •Резюме
Эффективность
алгоритмов
Эффективность алгоритма
оценивается:
•временем его работы, или временной сложностью и объемом памяти, требуемой для его выполнения, или емкостной сложностью.
Время выполнения зависит
•от порядка следования элементов и
часто определяется размером входа.
•Размером входа может быть:
•число элементов на входе (сортировка, преобразование Фурье);
•число байт памяти для представления данных;
При анализе алгоритмов интерес представляет максимальный размер
входа.
Порядком некоторой функции F(n)
•(при достаточно больших n) называют
другую функцию G(n), такую, что:
• lim = const 0 |
при n |
•Обозначение: F(n) = O[G(n)] (О- нотация)
•Например, F(n) = 2n4 - 3n3 + 4n2 – 5
•порядком является n4 или
•F(n) = O (n4),
Время работы
•оценивается числом элементарных
шагов (операций) для каждой строки алгоритма.
•При вызове процедуры оценивается время ее исполнения.
•Т. о., для каждого конкретного
алгоритма мы можем приблизительно подсчитать время его выполнения.

Для С++ на Pentium
№ |
Операторы С++ |
Обоз- |
Количество тактов |
|
|
наче-ния |
|
1 |
a+b, a>b, a>>b и т.д. |
t+ |
2 |
a*b |
t* |
3 |
a/b |
t/ |
4t++, a+, a>const и т.д. t++
+
5 |
*p |
tp |
6 |
a[] |
t[] |
7 |
if (…) P1 else P2 |
tif |
8 |
for () // n раз |
tfor |
2
20
28
1
1 2
tусл+1+ P1tветвь1+P2tветвь2
tусл+tпров.+2+n(tтела+tмодиф.+
tпров. +1)

Микроконтроллеры AVR семейства Tiny и Mega фирмы ‘ATMEL’
№ |
Команда |
Количество машинных циклов |
|
|
|
(тактов) |
|
1 |
Условный переход |
Результат True |
- 2 или 3 |
|
|
Результат False |
- 1 |
2 |
Безусловный переход |
|
2 |
3 |
Прерывание |
Max 4 |
|
4 |
Вызов подпрограмм |
3 (2 из кот. –сохран. в стеке 2 |
|
|
|
байта сч. команд) |
|
5 |
Возврат из п/программ и обработки |
|
4 |
|
прерываний |
|
|
6 |
Логические операции |
|
1 |
7 |
Арифметические операции и сдвиг |
|
1 |
8 |
Умножение и обработка 2-х байтовых |
|
2 |
|
значений |
|
|
9 |
Сложение с константой |
|
2 |
•если алгоритм не содержит вложенных циклов, то это будет какая-то линейная функция от n: Т (n) = (n), где n – размер входа и тип цикла не влияет на сложность алгоритма.
•Если алгоритм использует вложенные циклы, то это будет квадратичная функция Т(n2) = (n2), то есть, вложенность повторений является основным фактором усложнения алгоритмов.
•Рекурсивность же алгоритма усложняет его меньше, чем вложенные циклы. В общем случае, анализируя алгоритмы, можно не подсчитывать общее количество выполняемых операций, а проанализировать применяемые управляющие структуры и оценить асимптотику роста времени работы алгоритма при стремлении n в бесконечность.

асимптотика роста
Если асимптотика роста одного алгоритма меньше чем другого, то в большинстве случаев первый алгоритм будет эффективнее для всех входов, кроме самых коротких

Скорость алгоритмов на ПК с быстродействием 1млн оп в секунду
сложность |
N=10 |
N=30 |
N=50 |
||
N3 |
0.001c |
0.027c |
0.12с5 |
||
2n |
0.001c |
17.9 |
мин |
35.7 |
лет |
3n |
0.059c |
6.53 |
лет |
2.28 |
*10 10 лет |
N! |
3.63c |
8.41*10 18 лет |
9.64 |
*10 50лет |