Potentiaalinen menetelmä on yksi poistoanalyysimenetelmistä, jonka avulla voit "tasoittaa" kalliiden mutta harvinaisten operaatioiden vaikutusta algoritmin laskennalliseen kokonaismonimutkaisuuteen [1] [2] .
Potentiaalien menetelmässä otetaan käyttöön funktio , joka linkittää tietorakenteen tilan johonkin ei-negatiiviseen numeroon. Tämän funktion merkitys on, että jos on rakenteen nykyinen tila, niin on arvo, joka kuvaa "kalliin" operaatioiden työmäärää, joka on jo "maksettu" halvemmalla operaatiolla, mutta jota ei ole tuotettu. Siten sitä voidaan pitää tiettyyn tilaan liittyvän potentiaalienergian analogina [1] [2] . Aluksi potentiaalifunktion arvoksi asetetaan yleensä nolla.
Olkoon jokin sarjasta erillinen operaatio, olkoon rakenteen tila ennen tätä operaatiota ja sen jälkeen. Silloin toiminnan jaksotettu monimutkaisuus on
Toimintosarjan jaksotettu kokonaishinta on kelvollinen yläraja kyseisen toimintosarjan todelliselle kustannukselle.
Toimintosarjalle voidaan määrittää:
Näissä merkinnöissä:
Siten potentiaalifunktioarvojen sarja muodostaa teleskooppisen summan , jossa peräkkäiset alku- ja loppupotentiaalifunktioarvot kumoavat toisensa.
Siitä, että epätasa- arvo seuraa , kuten aiemmin sanottiin.
Voit harkita pinon muunnelmaa, joka tukee seuraavia toimintoja:
Yksi operaatio pop(k) vie aikaa, kun taas kokonaisajoaika voidaan analysoida käyttämällä seuraavaa potentiaalifunktiota, joka on yhtä suuri kuin pinon elementtien lukumäärä . Tämä arvo on aina ei-negatiivinen, kun taas push -operaatio toimii vakiolla ja kasvaa yhdellä, ja pop -operaatio toimii arvolla , mutta myös pienentää potentiaalifunktiota , joten sen kuoletusaika on myös vakio. Tästä seuraa, että minkä tahansa toimintosarjan kokonaissuoritusaika on yhtä suuri pahimmassa tapauksessa.
Toinen esimerkki on binäärilukuna toteutettu laskuri , joka tukee seuraavia toimintoja:
Osoittaaksesi, että inc :n jaksotettu kustannus on , harkitse potentiaalista funktiota, joka on yhtä suuri kuin laskuribittien lukumäärä (laskurin Hamming - paino ). Tarvittaessa tällainen funktio on aina ei-negatiivinen ja on aluksi yhtä suuri kuin . Inc - toiminto kääntää ensin laskurin vähiten merkitsevän bitin , ja sitten, jos se oli , toistaa samaa seuraavalla bitillä, kunnes se osuu . Jos ennen sitä laskurin bittitietueen lopussa oli yksittäisiä bittejä, bitti on invertoitava , kuluttamalla reaaliaikayksiköitä ja vähentäen potentiaalia . Siten inc -operaation jaksotettu hankintameno on yhtä suuri ja sen seurauksena inc - toimintojen suoritusaika on yhtä suuri kuin .
Potentiaalien menetelmää käytetään yleisesti Fibonacci-kasojen analysointiin , jossa elementin erottaminen vie amortisoitua logaritmisaikaa ja kaikki muut operaatiot kulutettua vakioaikaa [3] . Sitä voidaan myös käyttää osoittamaan, että splay-puulla on logaritminen jaksotettu toimintameno [4] .