Potentiaalinen menetelmä - Potential method
In laskennan vaativuus , mahdollinen menetelmä on menetelmä, jota käytetään analysoimaan jaksotettuun aikaa ja tilaa monimutkaisuus on datarakenne , jolla mitataan sen suorituskykyä sekvenssit toiminnan että tasoittaa kustannukset harvoin, mutta kallis toiminnan.
Amortizoidun ajan määritelmä
Potentiaalisessa menetelmässä valitaan funktio Φ, joka kartoittaa tietorakenteen tilat ei-negatiivisiin lukuihin. Jos S on tietorakenteen tila, Φ ( S ) edustaa työtä, joka on kirjattu ("maksettu") jaksotetussa analyysissä, mutta jota ei ole vielä suoritettu. Täten Φ ( S ) voidaan ajatella laskevan siinä tilassa varastoidun potentiaalisen energian määrän . Potentiaaliarvo ennen tietorakenteen alustamista on määritelty nollaksi. Vaihtoehtoisesti Φ ( S ) voidaan ajatella edustavan häiriön määrää tilassa S tai sen etäisyyttä ihanteellisesta tilasta.
Anna o olla mikä tahansa yksittäinen operaatioon toimintojen sekvenssi jonkin datan rakenteesta, jossa on S ennen ilmaiseva tila tietorakenteen ennen käyttöä O ja S jälkeen ilmaiseva sen tilan käytön jälkeen o on valmis. Kun Φ on valittu, toiminnan o jaksotettu aika määritellään olevan
missä C on ei-negatiivinen suhteellisuusvakio (aikayksikköinä), jonka on pysyttävä kiinteänä koko analyysin ajan. Toisin sanoen amortisoitu aika määritellään toiminnan tosiasialliseksi ajaksi plus C kertaa operaation aiheuttama potentiaaliero.
Kun tutkitaan asymptoottinen laskennallisen monimutkaisuuden käyttämällä iso O merkintä , jatkuva seikat ovat merkityksettömiä, ja niin vakion C on yleensä jätetty pois.
Amortizoidun ja todellisen ajan suhde
Keinotekoisesta ulkonäöstä huolimatta operaatioiden jaksotettu kokonaisaika antaa pätevän ylärajan todelliselle ajalle samalle toimintosekvenssille.
Määritä mihin tahansa toimintosarjaan :
- Kokonaispoistettu aika:
- Todellinen kokonaisaika:
Sitten:
jossa potentiaalisten funktioiden arvojen sekvenssi muodostaa teleskooppisarjan , jossa kaikki muut ehdot kuin alkuperäiset ja lopulliset potentiaalifunktion arvot peruutetaan pareittain. Tämän järjestelemällä saadaan:
Koska ja , niin jaksotettua aikaa voidaan käyttää tarjoamaan tarkka yläraja operaatioiden todelliselle ajalle, vaikka yksittäisen operaation amortisoitu aika voi vaihdella suuresti sen todellisesta ajasta.
Amortizoitu analyysi pahimpien tapausten panoksista
Tyypillisesti amortisoitua analyysiä käytetään yhdessä pahimman tapauksen oletuksen kanssa syötesekvenssistä. Tämän oletuksen mukaan, jos X on tietyntyyppinen operaatio, jonka tietorakenne voi suorittaa, ja n on kokonaisluku, joka määrittää tietyn tietorakenteen koon (esimerkiksi sen sisältämien kohteiden lukumäärän), niin jaksotettu aika tyypin X operaatioille määritetään suurin mahdollinen operaation jaksotettu aika o i kaikkien mahdollisten operaatiosekvenssien välillä, joiden koko on n kokoinen tietorakenne ja kaikki tyypin X operaatiot o i sekvenssissä .
Tämän määritelmän mukaan operaatioiden suorittamisen aika voidaan arvioida kertomalla jaksotettu jaksotettu jakso kunkin operaatiotyypin tämän tyyppisten operaatioiden määrällä.
Esimerkkejä
Dynaaminen taulukko
Dynaaminen taulukko on datarakenne ylläpitää joukko kohteita, jolloin molemmat random access asemiin ryhmän sisällä ja kyky lisätä array kokoa yhdellä. Se on saatavana Java- muodossa "ArrayList" -tyyppinä ja Pythonissa "listatyyppinä" .
Dynaaminen taulukko voidaan toteuttaa tietorakenteella, joka koostuu matriisista A , joiden pituus on N , sekä luvusta n < N, jotka edustavat matriisissa tähän asti käytettyjä sijainteja. Tämän rakenteen avulla dynaamisen matriisin satunnaiset pääsyt voidaan toteuttaa pääsemällä sisäisen ryhmän A samaan soluun , ja kun n < N , dynaamisen ryhmän kokoa suurentava toimenpide voidaan toteuttaa yksinkertaisesti lisäämällä n: ää . Kuitenkin, kun n = N , on tarpeen muuttaa A: n kokoa , ja yleinen strategia sitä varten on kaksinkertaistaa sen koko korvaamalla A uudella matriisilla, jonka pituus on 2 n .
Tätä rakennetta voidaan analysoida potentiaalisen funktion avulla:
- Φ = 2 n - N
Koska koon muuttamisstrategia saa A: n aina olemaan vähintään puoliksi täynnä, tämä potentiaalifunktio on aina ei-negatiivinen, kuten halutaan.
Kun suurennustoiminto ei johda koon muuttamiseen, Φ kasvaa vakiolla 2. Siksi operaation vakio todellinen aika ja jatkuva potentiaalin kasvu antavat vakiopoikkeaman tämän tyyppiselle toiminnalle.
Kuitenkin, kun suurennustoiminto aiheuttaa koon, potentiaalinen arvo n pienenee nollaan koon muuttamisen jälkeen. Uuden sisäisen taulukon A varaaminen ja kaikkien arvojen kopioiminen vanhasta sisäisestä taulukosta uuteen vie O ( n ) todellisen ajan, mutta (oikeasuhteisuuden vakion C asianmukaisella valinnalla ) tämä peruuntuu kokonaan potentiaalinen funktio, jolloin toiminnolle jää jälleen vakio amortizoitu kokonaisaika.
Tietorakenteen muut toiminnot (taulukon solujen lukeminen ja kirjoittaminen muuttamatta taulukon kokoa) eivät aiheuta potentiaalisen funktion muutosta ja niillä on sama vakio amortisoitu aika kuin niiden todellisen ajan.
Siksi tällä strategian ja potentiaalisen funktion koon muuttamisella potentiaalimenetelmä osoittaa, että kaikki dynaamiset matriisitoiminnot vievät jatkuvan amortizoidun ajan. Yhdistämällä tämä jaksotettuun aikaan ja operaatioiden todelliseen aikaan liittyvään epätasa-arvoon tämä osoittaa, että mikä tahansa n dynaamisen matriisioperaation sekvenssi vie pahimmassa tapauksessa O ( n ) todellisen ajan, huolimatta siitä, että jotkut yksittäiset operaatiot voivat itse ottaa lineaarinen aika.
Kun dynaaminen taulukko sisältää operaatioita, jotka pienentävät matriisin kokoa ja lisäävät sitä, potentiaalista funktiota on muutettava, jotta se ei muutu negatiiviseksi. Yksi tapa tehdä tämä on korvata kaava Φ sen absoluuttisella arvolla .
Monipop-pino
Tarkastellaan pinoa, joka tukee seuraavia toimintoja:
- Alusta - luo tyhjä pino.
- Työnnä - lisää yksi elementti pinon päälle suurentamalla pinoa yhdellä.
- Pop ( k ) - poista k elementtiä pinon yläosasta, jossa k on enintään nykyinen pinon koko
Pop ( k ) vaatii O ( k ) -aikaa, mutta haluamme osoittaa, että kaikki toiminnot vievät O (1) -jakson.
Tätä rakennetta voidaan analysoida potentiaalisen funktion avulla:
- Φ = pinossa olevien elementtien lukumäärä
Tämä luku ei aina ole negatiivinen tarpeen mukaan.
Push-toiminto vie vakioaikaa ja kasvaa Φ yhdellä, joten sen amortisoitu aika on vakio.
Pop-operaatio vie aikaa O ( k ), mutta vähentää myös Φ k: lla , joten myös sen amortizoitu aika on vakio.
Tämä osoittaa, että mikä tahansa m- operaatioiden sekvenssi vie O ( m ) todellisen ajan pahimmassa tapauksessa.
Binaarilaskuri
Harkitse laskuri edustettuna binaarilukuna ja tukee seuraavia toimintoja:
- Alusta: luo laskuri, jonka arvo on 0.
- Inc: lisää 1 laskuriin.
- Lue: palauta nykyinen laskurin arvo.
Tässä esimerkissä olemme ei käyttämällä transdichotomous koneen malli , mutta sen sijaan vaativat yhdessä ajan yksikössä bittiä kohden operaatio lisäys. Haluamme osoittaa, että Inc vie O (1): n amortizoidun ajan.
Tätä rakennetta voidaan analysoida potentiaalisen funktion avulla:
- Φ = bittien lukumäärä-yhtä suuri kuin 1 = vasarapaino (laskuri)
Tämä luku ei aina ole negatiivinen ja alkaa 0: lla tarpeen mukaan.
Inc-operaatio kääntää vähiten merkitsevän bitin . Sitten, jos LSB käännettiin arvosta 1 arvoon 0, myös seuraava bitti käännetään. Tätä jatketaan, kunnes lopulta vähän käännetään välillä 0 - 1, jolloin kääntö loppuu. Jos laskuri päättyy aluksi k 1 bitillä, käännämme yhteensä k +1 bittiä, ottamalla todellisen ajan k +1 ja pienentämällä potentiaalia k −1, joten amortisoitu aika on 2. Todellinen aika juoksulle m Inc: n toiminta on O ( m ).
Sovellukset
Potentiaalifunktiomenetelmää käytetään yleisesti Fibonacci-kasojen analysointiin. Se on prioriteettijono , jossa kohteen poistaminen vie logaritmisen amortizoidun ajan ja kaikki muut operaatiot vievät tasaisen amortizoidun ajan. Sitä voidaan käyttää myös analysoimaan puita , binäärisen hakupuun itsesäätyvä muoto logaritmisella amortizoidulla ajalla operaatiota kohti.