Mester-tétel

Innen: Hungaropédia
Ugrás a navigációhozUgrás a kereséshez

A mester-tétel a rekurzív algoritmusok egy gyakran előforduló típusának az aszimptotikus bonyolultságának az elemzésére szolgál. A tétel lazán fogalmazva azt mondja meg, mennyi a teljes futásideje egy olyan algoritmusnak, ami minden lépésben a-szor újra meghívja önmagát b-ed akkora bemenetre, valamint további f(n) nagyságrendű műveletet végez (ahol f(n) egy bizonyos bonyolultsági osztályba tartozik). Formálisan a mester-tétel azt mondja ki, hogy ha a T függvényt a T(n)=aT(nb)+f(n) rekurzív reláció definiálja, amiben a1 és b>1, akkor

  1. T(n)=Θ(nlogba), ha f(n)=O(nlogb(a)ϵ)
  2. T(n)=Θ(nlogbalogk+1n), ha f(n)=Θ(nlogbalogkn)
  3. T(n)=Θ(f(n)), ha f(n)=Ω(nlogba+ϵ) és af(nb)cf(n) valamilyen c<1 konstansra és elég nagy n-re.

Az összefüggés akkor is igaz marad, ha T(nb) helyett T(nb) vagy T(nb) áll. A tétel néhány alkalmazása:

  • a bináris keresés minden lépésben egyszer hívja meg magát feleakkora bemenetre, és még konstans sok lépést végez; a futásideje így a T(n)=T(n2)+O(1) rekurzív képlettel írható le, amiből a tétel alapján T(n)=O(log(n)) adódik.
  • egy teljes bináris fa rekurzív bejárása során az algoritmus kétszer hívja meg magát feleakkora bemenetre, és még konstans sok lépést végez, amiből O(n) futásidő adódik.
  • az összefésüléses rendezés is kétszer hívódik meg feleakkora bemenetre, de O(n) lépést végez mellette, a teljes futásidő így O(nlog(n))

Megjegyzések

  • Tegyük fel, hogy a rekurziós szabály egy additív konstans erejéig különbözik az eredetitől:
T(n)=aT(nb+c)+f(n)

Ha n elég nagy, akkor mellette eltörpül a c konstans, nagyságrendi változást nem okoz. Ezért számolhatunk c = 0-val.

  • Ha n/b-nek vesszük a felső vagy az alsó egészrészét, például T(n)=aT(nb)+f(n), akkor az tekinthető nb-nek.
  • Az ordo jelölésben mindegy, hogy melyik logaritmust használjuk; a T(n)Θ(ln(n))  logarithmus naturalis, természetes logaritmus helyett gondolhatunk akár kettes, akár tízes alapúra is, mivel ezek csak egy konstans szorzóban különböznek egymástól. Ugyanis:
ln(n)=logb(n)=loga(n)loga(b)=cloganΘ(logan)=Θ(lgn)

Általánosítás

A tétel általánosítása az Akra–Bazzi-tétel. Legyen T: a vizsgált leképezés,

T(n)=i=1mT(αin)+f(n),

ahol αi:0<αi<1, m:m1 és f(n)Θ(nk) ahol k:k0. T-t implicit módon fejezzük ki T(x):=T(x) vagy T(x) minden x+-re. Ekkor:

T(n){Θ(nk)ha i=1m(αik)<1Θ(nklogn)ha i=1m(αik)=1Θ(nc)i=1m(αic)=1ha i=1m(αik)>1

Források

  • Th.H.Cormen/C.E.Leiserson/R.Rivest/C.Stein: Introduction to Algorithms. MIT Press 2002 ISBN 0-262-03293-7