Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТСД. Лекции Силантьевой / Лекция6_Эффективность алгоритмов.ppt
Скачиваний:
58
Добавлен:
10.02.2015
Размер:
89.6 Кб
Скачать

Эффективность

алгоритмов

Эффективность алгоритма

оценивается:

временем его работы, или временной сложностью и объемом памяти, требуемой для его выполнения, или емкостной сложностью.

Время выполнения зависит

от порядка следования элементов и

часто определяется размером входа.

Размером входа может быть:

число элементов на входе (сортировка, преобразование Фурье);

число байт памяти для представления данных;

При анализе алгоритмов интерес представляет максимальный размер

входа.

Порядком некоторой функции 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лет