Metoda potențială este una dintre metodele de analiză a deprecierii care vă permite să „neteziți” impactul operațiilor costisitoare, dar rare, asupra complexității totale de calcul a algoritmului [1] [2] .
În metoda potențialelor, este introdusă o funcție care leagă starea structurii de date cu un număr nenegativ. Semnificația acestei funcții este că, dacă este starea actuală a structurii, atunci este o valoare care caracterizează cantitatea de muncă a operațiunilor „scumpe”, care a fost deja „plătită” de operațiuni mai ieftine, dar nu a fost produsă. Astfel, poate fi considerată ca un analog al energiei potențiale asociate cu o stare dată [1] [2] . Inițial, valoarea funcției potențiale este de obicei setată la zero.
Să fie o operație separată de serie, să fie starea structurii înainte de această operație și să fie după ea. Atunci complexitatea amortizată a operațiunii este
Costul total amortizat al unei secvențe de operațiuni este o limită superioară valabilă pentru costul real al acelei secvențe de operațiuni.
Pentru o secvență de operații , se poate defini:
În aceste notații:
Astfel, succesiunea valorilor funcției potențiale formează o sumă telescopică , în care valorile succesive ale funcției potențiale inițiale și finale se anulează reciproc.
Din faptul că inegalitatea decurge , așa cum sa spus mai devreme.
Puteți lua în considerare o variantă a stivei care acceptă următoarele operații:
O operație pop(k) necesită timp, în timp ce timpul total de rulare poate fi analizat folosind următoarea funcție potențială egală cu numărul de elemente din stiva . Această valoare este întotdeauna nenegativă, în timp ce operația push funcționează pentru o constantă și crește cu unu, iar operația pop funcționează pentru , dar scade și funcția potențială cu , astfel încât timpul său amortizat este și el constant. De aici rezultă că timpul total de execuție al oricărei secvențe de operații este egal în cel mai rău caz.
Un alt exemplu este un numărător , implementat ca număr binar care acceptă următoarele operații:
Pentru a arăta că costul amortizat al inc este , luăm în considerare o funcție potențială egală cu numărul de biți de contor egal cu ( Greutatea Hamming contorului). După cum este necesar, o astfel de funcție este întotdeauna nenegativă și este inițial egală cu . Operația inc inversează mai întâi bitul cel mai puțin semnificativ al contorului și apoi, dacă a fost , repetă același lucru cu următorul bit până când atinge . Dacă înainte de aceasta existau biți unici la sfârșitul înregistrării de biți a contorului, va fi necesar să se inverseze bitul, cheltuind unități de timp real și reducând potențialul cu . Astfel, costul amortizat al operațiunii inc este egal și, în consecință, timpul de execuție al operațiunilor inc este egal cu .
Metoda potențialelor este folosită în mod obișnuit pentru a analiza grămezi Fibonacci , unde extragerea unui element necesită timp logaritmic amortizat, iar toate celelalte operațiuni iau timp constant amortizat [3] . Poate fi folosit și pentru a arăta că un arbore splay are un cost amortizat logaritmic al operațiunilor [4] .