Glavni izrek je orodje, ki se uporablja za reševanje ponavljajočih se relacij, ki se pojavijo pri analizi algoritmov deli in vladaj. Glavni izrek zagotavlja sistematičen način reševanja rekurenčnih relacij oblike:
T(n) = aT(n/b) + f(n)
- kjer so a, b in f(n) pozitivne funkcije in je n velikost problema. Glavni izrek zagotavlja pogoje, da je rešitev ponovitve v obliki O(n^k) za neko konstanto k, in daje formulo za določanje vrednosti k.
- Napredna različica glavnega izreka zagotavlja bolj splošno obliko izreka, ki lahko obravnava ponavljajoče se relacije, ki so bolj zapletene od osnovne oblike. Napredna različica Master Theorem lahko obravnava ponovitve z več členi in bolj zapletenimi funkcijami.
- Pomembno je omeniti, da glavni izrek ni uporaben za vse povratne relacije in morda ne zagotavlja vedno natančne rešitve dane ponovitve. Je pa uporabno orodje za analizo časovne kompleksnosti algoritmov deli in vladaj in zagotavlja dobro izhodišče za reševanje bolj zapletenih ponovitev.
Glavni izrek se uporablja za določanje časa delovanja algoritmov (algoritmov deli in vladaj) v smislu asimptotičnih zapisov.
Razmislite o problemu, ki je rešen z rekurzijo.
function f (input x size n) if (n else divide x into a subproblems of size n/b call f recursively to solve each subproblem Combine the results of all sub-problems>
Zgornji algoritem razdeli problem na a podproblemov, od katerih je vsak velikosti n/b, in jih rekurzivno rešiti za izračun težave, dodatno delo, opravljeno za težavo, pa poda f(n), tj. čas za ustvarjanje podproblemov in združevanje njihovih rezultatov v zgornjem postopku.
Tako lahko v skladu z glavnim izrekom čas izvajanja zgornjega algoritma izrazimo kot:
T(n) = aT(n/b) + f(n)>
kjer je n = velikost problema
a = število podproblemov v rekurziji in a>= 1
n/b = velikost vsakega podproblema
f(n) = stroški dela, opravljenega zunaj rekurzivnih klicev, kot je razdelitev na podprobleme, in stroški njihovega združevanja, da bi dobili rešitev.
Vseh rekurenčnih relacij ni mogoče rešiti z uporabo glavnega izreka, tj. če
- T(n) ni monoton, npr.: T(n) = sin n
- f(n) ni polinom, npr.: T(n) = 2T(n/2) + 2n
Ta izrek je napredna različica glavnega izreka, ki se lahko uporabi za določitev časa delovanja algoritmov deli in vladaj, če je ponovitev naslednje oblike:

kjer je n = velikost problema
a = število podproblemov v rekurziji in a>= 1
n/b = velikost vsakega podproblema
b> 1, k>= 0 in p je realno število.
potem,
- če a> bk, potem je T(n) = θ(ndnevnikba)
- če je a = bk, potem
(a) če je p> -1, potem je T(n) = θ(ndnevnikbadnevnikp+1n)
(b) če je p = -1, potem je T(n) = θ(ndnevnikbaprijava)
(c) če je p <-1, potem je T(n) = θ(ndnevnikba)
- če k, potem
(a) če je p>= 0, potem je T(n) = θ(nkdnevnikstrn)
(b) če je p <0, potem je T(n) = θ(nk)
Analiza časovne kompleksnosti –
- Primer-1: Binarno iskanje – T(n) = T(n/2) + O(1)
a = 1, b = 2, k = 0 in p = 0
bk= 1. Torej je a = bkin p> -1 [Primer 2.(a)]
T(n) = θ(ndnevnikbadnevnikp+1n)
T(n) = θ(logn) Primer-2: Razvrščanje z združitvijo – T(n) = 2T(n/2) + O(n)
a = 2, b = 2, k = 1, p = 0
bk= 2. Torej je a = bkin p> -1 [Primer 2.(a)]
T(n) = θ(ndnevnikbadnevnikp+1n)
T(n) = θ(nlogn) Primer-3: T(n) = 3T(n/2) + n2
a = 3, b = 2, k = 2, p = 0
bk= 4. Torej, a k in p = 0 [Primer 3.(a)]
T(n) = θ(nkdnevnikstrn)
T(n) = θ(n2)
Primer-4: T(n) = 3T(n/2) + log2n
a = 3, b = 2, k = 0, p = 2
bk= 1. Torej, a> bk[1. primer]
T(n) = θ(ndnevnikba)
T(n) = θ(ndnevnik23)
Primer-5: T(n) = 2T(n/2) + nlog2n
a = 2, b = 2, k = 1, p = 2
bk= 2. Torej je a = bk[Primer 2.(a)]
T(n) = θ(ndnevnikbadnevnikp+1n )
T(n) = θ(ndnevnik22dnevnik3n)
T(n) = θ(nlog3n)
Primer-6: T(n) = 2nT(n/2) + nn
Te ponovitve ni mogoče rešiti z zgornjo metodo, ker funkcija ni oblike T(n) = aT(n/b) + θ(nkdnevnikstrn)
GATE vprašanja za vadbo –
- GATE-CS-2017 (Sklop 2) | 56. vprašanje
- GATE IT 2008 | 42. vprašanje
- GATE CS 2009 | 35. vprašanje
Tukaj je nekaj pomembnih točk, ki jih morate upoštevati v zvezi z glavnim izrekom:
- Ponovitve razdeli in vladaj: Glavni izrek je posebej zasnovan za reševanje relacij ponovitev, ki se pojavijo pri analizi algoritmov deli in vladaj.
- Oblika ponovitve: Glavni izrek velja za povratne relacije oblike T(n) = aT(n/b) + f(n), kjer so a, b in f(n) pozitivne funkcije in je n velikost problema.
- Časovna kompleksnost: Glavni izrek zagotavlja pogoje, da je rešitev ponovitve v obliki O(n^k) za neko konstanto k, in daje formulo za določanje vrednosti k.
- Napredna različica: Napredna različica glavnega izreka zagotavlja splošnejšo obliko izreka, ki lahko obravnava ponovitvene relacije, ki so bolj zapletene od osnovne oblike.
- Omejitve: Glavni izrek ni uporaben za vse ponovitvene relacije in morda ne zagotavlja vedno natančne rešitve dane ponovitve.
- Uporabno orodje: Glavni izrek je kljub svojim omejitvam uporabno orodje za analizo časovne kompleksnosti algoritmov deli in vladaj in zagotavlja dobro izhodišče za reševanje bolj zapletenih ponovitev.
- Dopolnjeno z drugimi tehnikami: V nekaterih primerih bo glavni izrek morda treba dopolniti z drugimi tehnikami, kot sta metoda zamenjave ali metoda ponovitve, da bi v celoti rešili dano relacijo ponavljanja.