You are on page 1of 48

Сложност на алгоритъм

ФПМИ, САА Ангел Нинов каб. 2532


Анализ на алгоритъм

• Ефективност – изпълнява ли задачата за която е предназначен;

• Ефикасност – колко изчислителни ресурси използва алгоритъмът.


Ефективност

• Удовлетворени ли са условията:

• Крайност (анализът е алгоритмично нерешима задача);

• Коректност на резултата (анализът може да бъде практически нерешима


задача).
Ефикасност (изчислителна сложност)

• Необходимо време за изпълнение (времева сложност);


• Необходима памет за изпълнение (пространствена сложност);
• Точност на резултата;
• Използван мрежови трафик;
• Използвана мощност;
•…
Размер на задачата

• Размерът на задачата „n“ е мярка (най-често касаеща


количеството входни/обработвани данни), спрямо която се
анализира сложността на алгоритъма
Времева сложност

• Т(n) – времето за изпълнение на задачата;


• Анализира се с броя операции за изпълнение на задачата;
• Показва скоростта на нарастване на броя операции спрямо
размера на задачата.
Пространствена сложност

• S(n) – паметта за изпълнение на задачата;


• Анализира се с количеството памет, необходимо за изпълнение
на задачата;
• Показва скоростта на нарастване на количеството памет спрямо
размера на задачата.
Пр: Swap
Пр: func

• T(n) = 3 или 1
• S(n) = 5 или 2
Асимптотична сложност - горна граница
• 𝑂 𝑔 𝑛 = {𝑓(𝑛)|∃𝑐 > 0, ∃𝑛0 ∈ ℕ ∀𝑛 ≥ 𝑛0 ∶ 0 ≤ 𝑓(𝑛) ≤ 𝑐𝑔(𝑛)}
• 𝑂 𝑔 𝑛 e множеството от функции 𝑓, за които съществува константа c
(c>0), такава че 𝑓(𝑛) ≤ 𝑐𝑔(𝑛), за всички достатъчно големи стойности
на 𝑛 , т.е. съществува константа 𝑛0 , за която горното неравенство е
изпълнено за всяко 𝑛 > 𝑛0 .
• 𝑂 𝑔 определя множеството на всички функции, които асимптотично
нарастват не по-бързо от g

• о 𝑔 𝑛 = {𝑓(𝑛)|∃𝑐 > 0, ∃𝑛0 ∈ ℕ ∀𝑛 ≥ 𝑛0 ∶ 0 ≤ 𝑓 𝑛 < 𝑐𝑔(𝑛)}


• о 𝑔 определя множеството на всички функции, които асимптотично
нарастват по-бавно от g.
Асимптотична сложност - горна граница
Горна граница - пример

• за 𝑓 𝑛 = 3𝑛 + 3: 3𝑛 + 3 ≤ 10𝑛 ⇒ 𝑂(𝑛)
• за 𝑓 𝑛 = 3𝑛 + 3: 3𝑛 + 3 ≤ 7𝑛 ⇒ 𝑂(𝑛)
• за 𝑓 𝑛 = 3𝑛 + 3: 3𝑛 + 3 ≤ 10𝑛2 ⇒ 𝑂(𝑛2 )

• ако 1 < log 𝑛 < 𝑛 < 𝑛 < nlog n < 𝑛2 < 𝑛3 < 2𝑛 < 3𝑛 < 𝑛𝑛
• за 𝑓 𝑛 → 𝑔 𝑛 = 𝑛 < nlog n < 𝑛2 < 𝑛3 < 2𝑛 < 3𝑛 < 𝑛𝑛
Асимптотична сложност – долна граница

• Ω 𝑔 𝑛 = {𝑓(𝑛)|∃𝑐 𝑐 > 0 , ∃𝑛0 ∈ ℕ ∀𝑛 > 𝑛0 ∶ 0 ≤ 𝑐𝑔 𝑛 ≤ 𝑓(𝑛)}


• Ω 𝑔 включва всички функции, които асимптотично нарастват не
по-бавно от 𝑔

• 𝜔 𝑔 𝑛 = {𝑓(𝑛)|∃𝑐 𝑐 > 0 , ∃𝑛0 ∈ ℕ ∀𝑛 > 𝑛0 ∶ 0 ≤ 𝑐𝑔 𝑛 < 𝑓(𝑛)}


• 𝜔 𝑔 включва всички функции, които асимптотично нарастват по-
бързо от 𝑔
Асимптотична сложност – долна граница
Долна граница - пример

• за 𝑓 𝑛 = 3𝑛 + 3: 3𝑛 + 3 ≥ 𝑛 ⇒ Ω(𝑛)
• за 𝑓 𝑛 = 3𝑛 + 3: 3𝑛 + 3 ≥ 1 ⇒ Ω 1

• ако 1 < log 𝑛 < 𝑛 < 𝑛 < nlog n < 𝑛2 < 𝑛3 < 2𝑛 < 3𝑛 < 𝑛𝑛
• за 𝑓 𝑛 → 𝑔 𝑛 = 1 < log 𝑛 < 𝑛 < 𝑛
Асимптотична сложност – точна граница

• Θ 𝑔 𝑛 = {𝑓(𝑛)|∃𝑐1 𝑐1 > 0 , ∃𝑐2 𝑐2 > 0 , ∃𝑛0 𝑐1 , 𝑐2 : ∀𝑛 ≥


𝑛0 : 0 ≤ 𝑐1 𝑔(𝑛) ≤ 𝑓(𝑛) ≤ 𝑐2 𝑔(𝑛)}

• Θ 𝑔 включва всички функции, които асимптотично нарастват


еднакво с g
Асимптотична сложност – точна граница
Точна граница - пример

• за 𝑓 𝑛 = 3𝑛 + 3 → 𝑛 ≤ 3𝑛 + 3 ≤ 10𝑛 ⇒ Θ (𝑛)

• ако 1 < log 𝑛 < 𝑛 < 𝑛 < nlog n < 𝑛2 < 𝑛3 < 2𝑛 < 3𝑛 < 𝑛𝑛
• за 𝑓 𝑛 → 𝑔 𝑛 = 𝑛
Пр: Swap – константна сложност
Пр: Sum(int[]) – времева сложност
(спрямо всички операции)
Пр: Sum(int[]) – пространствена сложност
Пр: Sum(int[,]) – времева сложност
Пр: Sum(int[,]) – времева сложност
(спрямо всички операции)
Пр: Sum(int[,]) – пространствена сложност
Пр: Sum(int[,]) – пространствена сложност
Пр: Mul(int[,]) – времева сложност
Пр: Mul(int[,]) – времева сложност
Пр: Mul(int[,]) – пространствена сложност
Пр: Mul(int[,]) – пространствена сложност
Пр:
Пр:
i k X
0 0 0
1 0 1
1
2 0 2
1
2
3 0 3
1
2
3
Полезни суми

• σ𝑛𝑖=1 1 = 𝑛
• σ𝑏𝑖=𝑎 1 = 𝑏 − 𝑎 + 1
𝑛
• σ𝑛𝑖=1,𝑖=𝑖+𝑘 1 ≈
𝑘
𝑛 𝑛+1
• σ𝑛𝑖=1 𝑖=
2
𝑛 2 𝑛 𝑛+1 (2𝑛+1)
• σ𝑖=1 𝑖 =
6
Пр:

i Нека при 𝑖 = 2𝑘 : 𝑖 ≤ 𝑛, а при 𝑖 = 2𝑘+1 : 𝑖 > 𝑛.


1 = 20 Тогава блока ще се изпълни 𝑘 пъти, но:
2 = 21 𝑖 = 2𝑘 ≤ 𝑛 ⇒ 𝑘 ≤ log 2 𝑛 ⇒
4 = 22
… 𝑂(log 2 𝑛)
2𝑘
Пр:

i p
Нека при 𝑖 = 𝑘: 𝑝 ≤ 𝑛, а при 𝑖 = 𝑘 + 1: 𝑝 > 𝑛
1 1
Тогава блока ще се изпълни 𝑘 пъти:
𝑘
2 1+2 𝑘 𝑘+1
p = ෍𝑖 = ≤𝑛⇒ 𝑘 2 + 𝑘 ≤ 2𝑛 ⇒
… … 2
𝑖=1
k 1+2+3+…+k
𝑘 ≤ 2𝑛 ⇒

𝑂( 𝑛)
Пр:
Пр:
Търсене на елемент в масив (𝑇𝑚𝑖𝑛 , 𝑇𝑚𝑎𝑥 )
Търсене на елемент в масив (𝑇𝑚𝑖𝑛 , 𝑇𝑚𝑎𝑥 )

• 2, 3, 4, 5, 8, 10
• 𝑇𝑚𝑖𝑛 6 = 1
• 𝑇𝑚𝑎𝑥 6 = 6
Търсене на елемент в масив (𝑇𝑚𝑖𝑛 , 𝑇𝑚𝑎𝑥 )

• A[0],A[1],…,A[n-1]
• 𝑇𝑚𝑖𝑛 𝑛 = 1
• 𝑇𝑚𝑎𝑥 𝑛 = 𝑛

•𝑂 𝑛
Търсене на елемент в масив (𝑇𝑎𝑣 )
Търсене на елемент в масив (𝑇𝑎𝑣 )

• A 𝟎 ,𝐴 1 ,𝐴 2 → 1
• A 0 ,𝑨 𝟏 ,𝐴 2 → 2
• A 0 ,𝐴 1 ,𝑨 𝟐 → 3

6
• 𝑇𝑎𝑣 3 =
3
Търсене на елемент в масив (𝑇𝑎𝑣 )
• 𝑨 𝟎 ,𝐴 1 ,…,𝐴 𝑛 − 1 → 1
• 𝐴 0 ,𝑨 𝟏 ,…,𝐴 𝑛 − 1 → 2
• …
• 𝐴 0 , 𝐴 1 , … , 𝑨[𝒏 − 𝟏] → n

1 𝑛 1 𝑛 𝑛+1 𝑛+1
• 𝑇𝑎𝑣 𝑛 = σ 𝑖 = . =
𝑛 𝑖=1 𝑛 2 2
Максимален елемент в масив (𝑇𝑚𝑖𝑛 , 𝑇𝑚𝑎𝑥 )
Максимален елемент в масив (𝑇𝑚𝑖𝑛 , 𝑇𝑚𝑎𝑥 )

•𝐴 2 <𝐴 1 <𝐴 0 →0
• 𝑇𝑚𝑖𝑛 3 = 0

•𝐴 0 <𝐴 1 <𝐴 2 →2
• 𝑇𝑚𝑎𝑥 3 = 2
Максимален елемент в масив (𝑇𝑚𝑖𝑛 , 𝑇𝑚𝑎𝑥 )

• 𝐴 0 >𝐴 1 >⋯>𝐴 𝑛−1 →0


• 𝑇𝑚𝑖𝑛 𝑛 = 0

• 𝐴 0 <𝐴 1 <⋯<𝐴 𝑛−1 →𝑛−1


• 𝑇𝑚𝑎𝑥 𝑛 = 𝑛 − 1

•𝑂 𝑛
Максимален елемент в масив (𝑇𝑎𝑣 )
Максимален елемент в масив (𝑇𝑎𝑣 )

•𝐴0 <𝐴 1 <𝐴2 →2


•A0 <𝐴 2 <𝐴1 →1
•A1 <𝐴 0 <𝐴2 →1
•A1 <𝐴 2 <𝐴0 →0
•A2 <𝐴 0 <𝐴1 →1
•A2 <𝐴 1 <𝐴0 →0

5
• 𝑇𝑎𝑣 3 =
6
Максимален елемент в масив (𝑇𝑎𝑣 )
• 𝑨 𝒏 < 𝐴 0 < 𝐴 1 < ⋯ < 𝐴 𝑛 − 1 → +0
• 𝐴 0 < 𝑨 𝒏 < 𝐴 1 < ⋯ < 𝐴 𝑛 − 1 → +0
• …
• 𝐴 0 < 𝐴 1 < ⋯ < 𝐴 𝑛 − 1 < 𝑨 𝒏 → +1

1
• 𝑇𝑎𝑣 𝑛 = 𝑇ср 𝑛 − 1 +
𝑛
1 1 1
• 𝑇𝑎𝑣 𝑛 = 0 + + + ⋯ + ≈ ln(𝑛)
2 3 𝑛

You might also like