Master theorem

Z testwiki
Verze z 31. 1. 2023, 23:49, kterou vytvořil imported>Vít Karásek (+upravit, rozděleny reference a literatura)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

Šablona:Upravit Master theorem (také Kuchařková věta nebo Mistrovská metoda) je speciální případ Akra-Bazzi theoremu, poskytuje při analýze složitosti algoritmů kuchařkové řešení asymptotické složitosti pro často používané rekurentní vztahy. Byl popularizován knihou Introduction to Algorithms napsanou Cormenem, Leisersonem, Rivestem a Steinem, kde je uveden a dokázán v sekcích 4.3 a 4.4.

Obecná forma

Master theorem řeší rekurentní vztahy ve tvaru:

T(n)=aT(nb)+f(n), kde a1b>1.

Při analýze rekurzivních algoritmů mají konstanty a funkce následující význam:

  • n je velikost problému.
  • a je počet podproblémů v rekurzi.
  • nb je velikost každého z podproblémů. Předpokládá se, že podproblémy jsou víceméně stejně velké.
  • f(n) je cena práce mimo rekurzivní volání, zahrnující rozdělení problému na podproblémy a sloučení výsledků podproblémů.

Je možné zjistit asymptotickou složitost v následujících třech případech:

Případ 1

Obecný tvar

Pokud platí, že f(n)=𝒪(nlogb(a)ϵ) pro nějaké ϵ>0

tak:

T(n)=Θ(nlogba).

Příklad

T(n)=8T(n2)+1000n2

Z výše uvedené rovnice vidíme, že hodnoty jsou:

a=8, b=2, f(n)=1000n2, logba=log28=3

Nyní musíme zkontrolovat, zda platí:

f(n)=𝒪(nlogbaϵ)

Po dosazení hodnot dostaneme:

1000n2=𝒪(n3ϵ)

Pokud zvolíme ϵ = 1, dostaneme:

1000n2=𝒪(n31)=𝒪(n2)

Protože rovnost platí, první případ master theoremu lze použít na danou rekurentní rovnost, čímž dostaneme:

T(n)=Θ(nlogba).

Po dosazení hodnot:

T(n)=Θ(n3).

Tedy pro daný rekurentní vztah T(n) je v Θ(n³).

(Tento výsledek byl potvrzen přesným řešením rekurentního vztahu, které je T(n)=1001n31000n2, za předpokladu T(1)=1.)

Případ 2

Obecný tvar

Pokud platí:

k0,f(n)=Θ(nlogbalogkn)

tak:

T(n)=Θ(nlogbalogk+1n).

Příklad

T(n)=2T(n2)+10n

Z výše uvedené rovnice vidíme, že hodnoty jsou:

a=2, b=2, k=0, f(n)=10n, logba=log22=1

Nyní ověříme, že následující rovnost platí (v tomto případě k=0):

f(n)=Θ(nlogba)

Po dosazení dostaneme:

10n=Θ(n1)=Θ(n)

Protože rovnost platí, druhý případ master theoremu lze aplikovat, čímž dostáváme:

T(n)=Θ(nlogbalogn).

Po dosazení:

T(n)=Θ(nlogn).

Tedy pro daný rekurentní vztah T(n) je v Θ(n log n).

(Tento výsledek byl potvrzen přesným řešením rekurentního vztahu, které je T(n)=n+10nlog2n, za předpokladu T(1)=1.)

Případ 3

Obecný tvar

Pokud platí:

f(n)=Ω(nlogba+ϵ) pro nějaké ϵ>0

a také platí:

af(nb)cf(n) pro nějaké c<1 a dostatečně velké n

tak:

T(n)=Θ(f(n)).

Příklad

T(n)=2T(n2)+n2

Z výše uvedené rovnice vidíme, že hodnoty jsou:

a=2, b=2, f(n)=n2, logba=log22=1

Nyní ověříme, že následující rovnost platí:

f(n)=Ω(nlogba+ϵ)

Pokud dosadíme hodnoty a zvolíme ϵ = 1, dostaneme:

n2=Ω(n1+1)=Ω(n2)

Protože rovnost platí, ověříme druhou podmínku, konkrétně, že:

af(nb)cf(n)

Opět dosadíme hodnoty:

2(n2)2cn212n2cn2

Pokud zvolíme c=12, tak platí:

12n212n2 n1

Tedy:

T(n)=Θ(f(n)).

Opět dosadíme hodnoty a dostaneme:

T(n)=Θ(n2).

Tedy pro daný rekurentní vztah T(n) je v Θ(n²), což odpovídá f (n) v původním vzorci.

(Tento výsledek byl potvrzen přesným řešením rekurentního vztahu, které je T(n)=2n2n, za předpokladu T(1)=1.)

Nepřípustné rovnice

Následující rovnice nelze vyřešit pomocí master theoremu:[1]

T(n)=2nT(n2)+nn

To protože a (2n) není konstanta.

T(n)=2T(n2)+nlogn

Mezi f(n) a nlogba je nepolynomiální rozdíl.

T(n)=0.5T(n2)+1n

Nelze mít méně, než jeden podproblém (a<1).

T(n)=64T(n8)n2logn

f(n) není kladné.

T(n)=T(n2)+n(2cosn)

Případ 3, ale porušení regularity.

Odkazy

Reference

Šablona:Překlad

Literatura

Šablona:Autoritní data