Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / Асимптотическая_сложность_О_нотация_или_Big_O

.pdf
Скачиваний:
0
Добавлен:
28.06.2026
Размер:
263.87 Кб
Скачать

Data Structures and Algorithms

O - нотация

Но как этим пользоваться? Например если указанно, что сложность сортировки O(n2).

Это означает что время работы этого алгоритма возрастает медленнее чем функция g(n) = n2 умноженная на константу.

Это же позволяет оценить как увеличится (в самом худшем случае) время работы алгоритма при увеличении объема данных в определенное количество раз.

Рассмотрим пример такой оценки. Предположим что массив из 2000000 объектов на заданном ПК сортируется 50 ms. Нужно оценить как возрастет время если нужно сортировать массив из 8000000 элементов.

t=C t (n)t C

C g(n)

t1

 

C PC C g(n1 )

t

 

n22

80000002

=50 16=800 ms

t2

C PC C g(n2)

t

=50

PC

PC

 

2

1

n12

20000002

 

Именно поэтому константу С обычно и не указывают, она все равно сокращается при оценке увеличения времени.

Data Structures and Algorithms

Вычислительный эксперимент

Для проверки асимптотических оценок проведем вычислительный эксперимент.

Возьмем алгоритм сортировки с известной оценкой асимптотической сложности. Для примера возьмем алгоритм сортировки пузырьком (будет изучаться в этом курсе в дальнейшем). Сложность алгоритма сортировки пузырьком равна O(n2).

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

Data Structures and Algorithms

Результаты вычислительного эксперимента

 

14000

 

 

 

 

 

 

 

 

 

 

 

12000

 

 

 

 

 

 

 

 

 

 

 

10000

 

 

 

 

 

 

 

 

 

 

 

8000

 

 

 

 

 

 

 

 

 

 

t(ns)

6000

 

 

 

 

 

 

 

 

 

t(n)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4000

 

 

 

 

 

 

 

 

 

 

 

2000

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

0

10

20

30

40

50

60

70

80

90

100

 

 

 

 

 

 

n

 

 

 

 

 

Для малых значений n время ведет себя отлично от параболы.

Data Structures and Algorithms

Результаты вычислительного эксперимента

 

700000

 

 

 

 

 

 

 

 

 

 

 

600000

 

 

 

 

 

 

 

 

 

 

 

500000

 

 

 

 

 

 

 

 

 

 

t(ns)

400000

 

 

 

 

 

 

 

 

 

 

300000

 

 

 

 

 

 

 

 

 

t(n)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

200000

 

 

 

 

 

 

 

 

 

 

 

100000

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

0

100

200

300

400

500

600

700

800

900

1000

 

 

 

 

 

 

n

 

 

 

 

 

При увеличении значения n поведение функции t(n) приближается к параболе

Data Structures and Algorithms

Результаты вычислительного эксперимента

 

100000000

 

 

 

 

 

 

 

 

 

 

 

90000000

 

 

 

 

 

 

 

 

 

 

 

80000000

 

 

 

 

 

 

 

 

 

 

 

70000000

 

 

 

 

 

 

 

 

 

 

 

60000000

 

 

 

 

 

 

 

 

 

 

t(ns)

50000000

 

 

 

 

 

 

 

 

 

 

40000000

 

 

 

 

 

 

 

 

 

t(n)

 

 

 

 

 

 

 

 

 

 

 

30000000

 

 

 

 

 

 

 

 

 

 

 

20000000

 

 

 

 

 

 

 

 

 

 

 

10000000

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

0

1000

2000

3000

4000

5000

6000

7000

8000

9000

10000

 

 

 

 

 

n

 

 

 

 

 

 

Чем больше n тем ближе поведение t(n) к своей асимптотической оценке

Data Structures and Algorithms

Результаты вычислительного эксперимента

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

Data Structures and Algorithms

Список литературы

1) Лафоре Р. Структуры данных и алгоритмы в Java. Классика Computers Science. 2-е изд. —СПб.: Питер, 2013. — 704 с.:ISBN 978-5-496-00740-5. Стр.[166-181]