ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.04.2019

Просмотров: 2345

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

36 

 

1.  F

a

(N)  – 

найгірший  випадок  –  найбільша  кількість  операцій,  що 

здійснюються алгоритмом А для вирішення конкретних проблем розмірністю 
N:  

                F

a

(N) = max {F

a

 (D)} – 

найгірший випадок на D

 
 

2. F

a

(N)  – 

кращий  випадок  –  найменша  кількість  операцій,  що 

здійснюються алгоритмом А для вирішення конкретних проблем розмірністю 
N: 

F

a

(N) = min {F

a

 (D)} – 

кращий випадок на D

 
 

3. F

a

(N)  – 

середній  випадок  –  середня    кількість  операцій,  що 

здійснюються алгоритмом А для вирішення конкретних проблем розмірністю 
N:                  

                F

a

(N) = (1 / M

DN

)*

 {F

a

 (D)} – 

середній випадок на D

N

 

 
 
4.3  Класифікація алгоритмів по виду функції трудомісткості 
 

Залежно від впливу вхідних даних на функцію трудомісткості алгоритму 

запропонована  наступна  класифікація,  що  має  практичне  значення  для 
аналізу алгоритмів. 

 

1. 

Кількісно-залежні алгоритми за трудомісткістю 

 
Це  алгоритми,  функція  трудомісткості  яких  залежить  тільки  від 

розмірності конкретного входу, і не залежить від конкретних значень: 

 
F

a

 (D) = F

a

 (|D|) = F

a

 (N) 

 
Прикладами  алгоритмів  з  кількісно-залежною  функцією  трудомісткості 

можуть  служити  алгоритми  для  стандартних  операцій  з  масивами  і 
матрицями – множення матриць, множення матриці на вектор тощо. 

 
 
 

D

D

N

 

D

D

N

 


background image

37 

 

2. 

Параметрично-залежні алгоритми за трудомісткістю. 

 
Це  алгоритми,  трудомісткість  яких  визначається  не  розмірністю  входу 

(як  правило,  для  цієї  групи  розмірність  входу  зазвичай  фіксована),  а 
конкретними значеннями оброблюваних слів пам'яті: 

 

F

a

 (D) = F

a

 (d

1

,…,d

n

) = F

a

 (P

1

,…,P

m

),  m 

 n 

 
Прикладами  алгоритмів  з  параметрично-залежної  трудомісткістю  є 

алгоритми  обчислення  стандартних  функцій  із  заданою  точністю  шляхом 
обчислення  відповідних  ступеневих  рядів.  Очевидно,  що  такі  алгоритми, 
маючи  на  вході  два  числових  значення  –  аргумент  функції  і  точність 
виконують істотно залежне від значень кількість операцій. 

а) Обчислення x

k

  

послідовним множенням  ⇒  F

a

(x, k) = F

a

 (k). 

б) Обчислення e

 (x

n

/n!), 

з точністю до 

ξ

 

⇒ F

a

 = F

a

 (x, 

ξ

) 

 

3. 

Кількісно-параметричні за трудомісткістю алгоритми 

 
У  більшості  практичних  випадків  функція  трудомісткості  залежить  як 

від кількості даних на вході, так і від значень вхідних даних, в цьому випадку: 

F

a

 (D) = F

a

 ( ||D||, P

1

,…,P

m

) = F

a

 ( N, P

1

,…,P

m

Як  приклад  можна  навести  алгоритми  чисельних  методів,  в  яких 

параметрично-залежний зовнішній цикл з точності включає в себе кількісно-
залежний фрагмент з розмірності.  

 

4. 

Порядково-залежні за трудомісткістю алгоритми  

 
Серед розмаїття параметрично-залежних алгоритмів виділимо групу, для 

якої кількість операцій залежить від порядку розташування вхідних об'єктів. 

Нехай множина D складається з елементів (d

1

,…,d

n

), 

і ||D||=N

Визначимо  D

= {(d

1

,…,d

n

)}  – 

множину  всіх  впорядкованих  N-ок  з 

d

1

,…,d

n

, відмітимо, що |D

p

|=n!. 

Якщо F

a

 (

i

D

p

 F

a

 (

j

D

p

),  

де 

i

D

p

j

D

p

 

  D

p

то  алгоритм  називають 

порядково-залежним за трудомісткістю.  

Прикладами  таких  алгоритмів  можуть  служити  ряд  алгоритмів 

сортування, алгоритми пошуку мінімуму і максимуму в масиві.  


background image

38 

 

Розглянемо більш докладно алгоритм пошуку максимуму в масиві S, що 

складається  з n елементів: 

 
MaxS (S,n; Max) 

Max 

 S

1

 

For i

2 to n 

   

if Max < S

i

 

 then Max 

 S

i

  

(кількість  виконаних  операцій  присвоювання  залежить  від  порядку 
розташування елементів масиву). 

 
 
4.4
 

Асимптотичний аналіз функцій  

 

При  аналізі  поведінки  функції  трудомісткості  алгоритму  часто 

використовують  прийняті  в  математиці  асимптотичні  позначення,  що 
дозволяють  показати  швидкість  росту  функції,  маскуючи  при  цьому 
конкретні коефіцієнти. 

Така  оцінка  функції  трудомісткості  алгоритму  називається  складністю 

алгоритму  і  дозволяє  визначити  переваги  у  використанні  того  чи  іншого 
алгоритму для більших значень розмірності вхідних даних. 

У асимптотичному аналізі прийняті наступні позначення [5]:  

1. Оцінка 

Θ

 

(тетта) 

Нехай  f (n) і g (n) – додатні функції додатного аргументу, n ≥ 1 (кількість 

об'єктів на вході і кількість операцій – додатні числа), тоді: 
 
       f

g

 

                            

с

2

g(n) 

                            f(n)                        

 

                               c

g(n),               

 
 
    

f(n) = 

Θ

 (g(n)), 

якщо існують додатні с

1

, с

2

, n

0

, такі, що: с

* g(n) 

 f(n) 

 

c

* g(n

), при n > n

0

 . 


background image

39 

 

 
Зазвичай  кажуть,  що  при  цьому  функція  g  (n)  є  асимптотично  точною 

оцінкою функції f (n), тому що, за визначенням, функція f (n) не відрізняється  
від функції g (n) з точністю до постійного множника. 

Відзначимо, що з f (n) = 

Θ

 (g (n)) 

випливає  наступне: 

                      g (n) = 

Θ

 (f (n))

Приклади: 

1) f(n)=4n

2

+nlnN+174 – f(n)= 

Θ

(n

2

); 

2)  f(n)=

Θ

(1)  – 

запис  означає,  что  f(n)  або  дорівнює  константі,  яка  не 

дорівнює нулю, або f(n) обмежена константою на 

 : f(n) = 7+1/n = 

Θ

(1). 

2. Оцінка О (О велике) 

На відміну від оцінки 

Θ

, 

оцінка О потребує тільки, що б функція f(n) не 

перевищувала  g(n) починаючи з n > n0, з точністю до постійного множника: 

 
 

 

 c > 0, n0 > 0 : 

 f(n) 

 c * g(n), 

>

 n0 

 

 
 

Взагалі,  запис  O(g(n))  означає  клас  функцій,  які  зростають  не  швидше, 

ніж функція g(n) з точністю до постійного множника.  Тому  іноді говорять, 
що g(n) мажорірує функцію f(n).  

Наприклад, для всіх функцій: 
 
f(n)=1/n,  
f(n)= 12, 
 f(n)=3*n+17,  
f(n)=n*Ln(n),  
f(n)=6*n

+24*n+77 

 
буде  вірною  оцінка  О(n

). 

Вказуючи  оцінку  О  є  сенс  вказувати  найбільш 

«

близьку»  функцію,  оскільки,  наприклад,  для  f  (n) = n2  є  справедливою 

оцінка О (2n), проте вона не має практичного сенсу. 

n

0

 

f

,

c

2

g(n) 

 

f(n) 

 

 


background image

40 

 

3. Оцінка 

 

(Омега) 

На  відміну  від  оцінки  О,  оцінка 

 

є  оцінкою  знизу  –  тобто  визначає 

клас функцій, які зростають не повільніше, ніж g(n) з точність до постійного 
множника: 

 

 

 c > 0, n0 >0 :  

 c * g(n) 

 f(n) 

 
 

 
 
Наприклад, запис Ω (n * Ln(n)) позначає клас функцій, які зростають  не 

повільніше,  ніж  g  (n)  =  n  *  Ln(n).  В  цей  клас  потрапляють  всі  поліноми  зі 
ступенем  більшої  одиниці,  так  само  як  і  всі  степеневі  функції  з  основою 
більш ніж  одиниця. 

Відзначимо,  що  не  завжди  для  пари  функцій  справедливо  одне  з 

асимптотичних співвідношень, наприклад для f (n) = n1 + sin(n) і g(n) = n не 
виконується жодна з асимптотичних співвідношень. 

У  асимптотичному  аналізі  алгоритмів  розроблені  спеціальні  методи 

отримання  асимптотичних  оцінок,  особливо  для  класу  рекурсивних 
алгоритмів.  

Очевидно,  що  Θ  є  переважною  оцінкою  ніж  оцінка  О.  Знання 

асимптотики поведінки функції трудомісткості алгоритму – його складності, 
дає  можливість  робити  прогнози  щодо  вибору  більш  раціонального  з  точки 
зору трудомісткості алгоритму для великих розмірностей вхідних даних. 

 
 
4.5
 

Питання для самоконтролю 

 

1)  

Формальна система мови високого рівня. 

2)  

Поняття трудомісткості алгоритму у формальному базисі. 

3)  

Узагальнений критерій оцінки якості алгоритму. 

4)  Система  позначень  в  аналізі  алгоритмів  –  найгірший,  кращий  і 

середній випадки.  

5)  

Класифікація алгоритмів по виду функції трудомісткості. 

6)  

Приклади кількісних і параметрично-залежних алгоритмів. 

F(n) 

cg(n)