Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебно-практическое пособие ПРОГ.doc
Скачиваний:
38
Добавлен:
20.11.2019
Размер:
5.63 Mб
Скачать

6.2.Время выполнения программ

В зависимости от выбранных структур данных может меняться время выполнения программ. В данном курсе, как правило, приводятся временные оценки алгоритмов без доказательства. Рассмотрим общепринятые временные оценки алгоритмов.

Время выполнения программы обычно определяют как функцию от длины исходных данных. Обычно говорят, что время выполнения программы выражается функцией T(n) от входных данных размера n.

Для многих программ время выполнения является функцией входных данных, а не их размера. В этом случае T(n) определяется как функция времени выполнения программы в наихудшем случае, т.е. как максимум времени выполнения по всем входным данным размера n. Также иногда рассматривают Tср(n) как среднее время выполнения по всем входным данным размера n. На практике среднее время найти сложнее, чем наихудшее.

Считается, что все функции времени определены на множестве неотрицательных целых чисел и их значения также неотрицательны, но необязательно целые.

Для описания скорости роста функций времени выполнения программ используется O-символика. Например, когда говорят, что время выполнения T(n) некоторой программы имеет порядок O(n2) (читается «о-большое от n в квадрате» или «о от n в квадрате»), то подразумевают, что существуют положительные константы c и n0 такие, что для всех nn0 выполняется неравенство T(n) T(n), где T(n)=cn2.

Пример. Пусть T1(n)=(n+5)2. Тогда T1(n) будет иметь порядок O(n2). Действительно, если положить n0=1 и c=37, то легко показать, что для n1 будет выполняться неравенство (n+5)2T2(n), T2(n)=36n2.

В общем случае будем говорить, что T(n) имеет порядок O(f(n)), если существуют положительные константы c и n0 такие, что для всех nn0 выполняется неравенство T(n)cf(n).

Пример. Пусть T3(n)=3n3+2n2. Данная функция имеет порядок O(n3). Действительно, если положить n0=0 и c=5, то легко показать, что для n0 будет выполняться неравенство 3n3+2n25n3. Можно сказать, что T3(n)=3n3+2n2 имеет порядок O(n4), но это более слабое утверждение, чем то, что T3(n)=3n3+2n2 имеет порядок O(n3).

Применение O-символики для оценок времени выполнения алгоритмов чаще предпочтительнее чем использование конкретных функций времени. Однако, для оценки реальных программ, т.е. программ работающих с данными ограниченного размера, нужно учитывать вид конкретных функций времени.

Пример. Пусть одна и та же задача может быть решена с помощью двух программ P1, P2 или P3, имеющих функции времени T1(n)=(n+5)2, T2(n)=36n2, T3(n)=3n3+2n2 соответственно. Значения данных функций для различных значений n сведены в табл.6.1. Из таблицы видно, что функция T3(n) для n=1 и n=2 имеет меньшее значение, чем функция T1(n). Поэтому несмотря на то, что функция T3(n) имеет порядок O(n3), а функция T1(n) - O(n2), использование программы P3 при n=1 и n=2 более предпочтительно, чем использование программы P1. Также функция T3(n) для n=1,2,…,11 имеет меньшее значение, чем функция T2(n). Поэтому для n=1,2,…,11 предпочтительнее использовать программу PЗ чем программу P2, несмотря на то, что порядок функции T3(n) - O(n3), а функция T2(n) - O(n2).

Таблица 6.1

Значения функций времени выполнения программ

n

T1(n)=

(n+5)2

T2(n)=

36n2

T3(n)=

3n3+2n2

n

T1(n)=

(n+5)2

T2(n)=

36n2

T3(n)=

3n3+2n2

1

36

36

5

7

144

1764

1127

2

49

144

32

8

169

2304

1664

3

64

324

99

9

196

2916

2349

4

81

576

224

10

225

3600

3200

5

100

900

425

11

256

4356

4235

6

121

1296

720

12

289

5184

5472