Вы находитесь на странице: 1из 3

Асимптотический анализ алгоритмов

O −нотация (верхняя граница). O(g (n)) – множество функций


f (n) таких что, существуют такие положительные константы c и n0
таких что, для всех n>n0
0≤ f (n)≤ cg(n)
g(n) = n2
g(n) = nn
g(n) = 2
Чтобы проверить принадлежность функции f к классу O( g)
можно воспользоваться определением выше или вычислить предел:
Это означает, что если предел существует и он не равен
бесконечности, то f ∈ O (g).

fследование= f1 + … + fn
f ветвление = f1 + fthen * p + felse * (1-p), где f1 – сложность вычисления внутренней конструкции
оператора

Конструкция «Цикл по счётчику».

fцикл=1+3n+телоцикла
Для циклов с зависимыми параметрами можно
воспользоваться формулами суммирования.

Провести анализ временной трудоёмкости алгоритмов (точный


и асимптотический в терминах O - нотации). Проверить, что
функция T (n)∈ O(g (n)) для каждого алгоритма.

fun SumTriangle(A, N) {
sum = 0
for(i := 0; N; 1){
for(j := 0; N - i, 1) {
sum := sum + A[i,j]
(взять sum, взять A[i,j], +, =)
}
}
}
fцикл=1+3n+телоцикла

F1 = 1 +21+3n+ = 2+3n+ = 2+3n+ = 22+3n 2+n+3n2 + +4n*(n+1)-4 =2+


8n + 7n -4*(n*(n+1)/2) = 2+8n+7n – 2n – 2n = 2 + 6n + 5n2
= (5+6/n+2/n2) = 5 → f1∈O (n2)

fun TwoPointers(A, N, M) {
r := 0
s := 0
ansL := 0
ansR := 0
for(L := 0; N; 1) {
while((r < N) and (S + A[r] ≤ M)){
s := A[r]
r := r + 1
} (max N)
if(ansR – AnsL < r – L) {
ansL := L
ansR := r
}
s := s – A[L]
}
}
F2 = 4 + 1 +3n + 5n += 5+ 8n + 16n +9n2 = 5 + 24n + 9n2
= 2 + 2 = 4 = 2*2 = 2*(2-1+1)

= 9 → f2 ∈O (n2)

fun sumA(arr, size) {


if (size = 0) {
return 0;
}
else if (size = 1) {
return arr[0];
}
else {
return sumA(arr, size / 2) + sumA(arr + size / 2,
size / 2);
}
}

Вам также может понравиться