Teorema Master este utilizată în analiza algoritmilor pentru a obține o estimare asimptotică pentru relațiile recursive ( ecuații recursive ), care apar adesea în analiza algoritmilor de tip „ divid și cuceri ” ( divide și cuceri ), de exemplu, la estimarea timpul lor de executare. Teorema a fost introdusă și demonstrată de John Bentley, Doroten Haken și James Haken în 1980. Teorema a fost popularizată în cartea Algorithms: Construction and Analysis ( Thomas Cormen , Charles Letherston , Ronald Rivest , Clifford Stein ) în care a fost dată.
Nu toate relațiile recursive pot fi rezolvate folosind teorema principală. Există mai multe generalizări ale acesteia, inclusiv metoda Akra-Bazzi .
Luați în considerare o problemă care poate fi rezolvată printr-un algoritm recursiv :
funcția T(intrare n : dimensiunea sarcinii): dacă n < o constantă k : rezolvați problema pentru n în mod nerecursiv altfel : definiți un set de subsarcini , fiecare cu dimensiunea n/b apelați funcția T în mod recursiv pentru fiecare subsarcină combina solutii SfârşitÎn exemplul de mai sus, algoritmul împarte recursiv sarcina inițială de dimensiunea n în mai multe subsarcini noi, fiecare cu dimensiunea n/b . O astfel de partiție poate fi reprezentată ca un arbore de apeluri, în care fiecare nod corespunde unui apel recursiv, iar ramurile care ies din nod corespund apelurilor ulterioare pentru subsarcini. Fiecare nod va avea o ramuri. De asemenea, fiecare nod produce cantitatea de muncă corespunzătoare mărimii subsarcinii curente n (trecută la acest apel de funcție) conform relației . Cantitatea totală de lucru a algoritmului este definită ca suma tuturor lucrărilor din nodurile arborelui dat.
Complexitatea computațională a unor astfel de algoritmi poate fi reprezentată ca o relație recursivă . Poate fi rezolvată prin substituții multiple ale expresiei . [unu]
Cu ajutorul teoremei principale, este posibil să se calculeze rapid astfel de relații, ceea ce face posibilă obținerea unei estimări asimptotice a timpului de rulare a algoritmilor recursivi în notația O(n) ( notația Θ) fără substituții.
Teorema principală ia în considerare următoarele relații de recurență:
După cum se aplică analizei algoritmilor, constantele și funcțiile denotă:
Teorema principală ne permite să obținem o estimare asimptotică pentru următoarele trei cazuri:
Dacă , și relația
apoi:
ExempluConform formulei, valorile constantelor și complexitatea părții nerecursive a problemei sunt:
, UndeApoi, verificăm dacă relația de prima opțiune este îndeplinită:
.Prin urmare,
(Pentru acest exemplu, soluția exactă de recurență oferă , cu condiția ).
Dacă pentru o constantă k ≥ 0 este valabilă următoarele:
Undeapoi:
Exemplu
Conform formulei, valorile constantelor și complexitatea părții nerecursive a problemei sunt:
UndeVerificarea raportului opțiunii 2:
, și, prin urmareÎn conformitate cu cea de-a doua versiune a teoremei principale:
Astfel relația de recurență T ( n ) este Θ( n log n ).
(Acest rezultat poate fi verificat prin soluția exactă a relației în care , sub rezerva .)
Dacă este executat:
Undesi este de asemenea adevarat ca:
pentru unele constante și suficient de mari (așa-numita condiție de regularitate )apoi:
ExempluValori și funcții constante:
, UndeVerificăm dacă relația de la opțiunea 3 este satisfăcută:
, și, prin urmareCondiția de regularitate este valabilă și :
, la alegerePrin urmare, conform celei de-a treia versiuni a teoremei principale:
Această relație recursivă T ( n ) este egală cu Θ( n 2 ), care este același cu f ( n ) în formula originală.
(Acest rezultat este confirmat de soluția exactă de recurență în care , sub rezerva .)
Următoarele relații nu pot fi rezolvate folosind teorema principală: [2]
În al doilea exemplu, diferența dintre și poate fi exprimată ca . Arată că pentru orice constantă . Prin urmare, diferența nu este un polinom și teorema principală nu se aplică.
Algoritm | Relație recurentă | Ore de lucru | Notă |
---|---|---|---|
Căutare binară | Teorema principală, a doua opțiune: , unde [3] | ||
Traversarea arborelui binar | Teorema principală, versiunea 1: unde [3] | ||
Algoritmul Strassen | Teorema principală, versiunea 1: , unde [4] | ||
Căutare optimă în matrice sortată | Teorema Akra-Bazzi pentru și pentru obținere | ||
Sortare îmbinare | Teorema principală, a 2-a opțiune: , unde |