Preflow push - algoritmi ratkaisee ongelman löytää maksimivirtaus kuljetusverkossa . Algoritmi ei ole Ford-Fulkerson-algoritmin erikoistapaus . Ilman erityisiä parannuksia toteutettu algoritmi toimii ajallaan . Jotkut parannukset nopeuttavat algoritmia entisestään: "nousu alkuun" huippupisteen valintasääntö - asti , korkeimman aktiivisen kärjen valinta - asti , toteutus Seanorin ja Tarjanin tietorakenteella - asti . Julkaisivat ensimmäisen kerran vuonna 1986 Andrew W. Goldbergin ja Tarjanin. [1] .
Tässä artikkelissa kutsutaan kärjen u lapsiksi mitä tahansa kärkeä v siten, että jäännösverkko sisältää reunan (u, v).
Verkon kärkien ja reunojen joukkoja merkitään ja ja niiden numeroita V:llä ja E:llä.
Algoritmi käyttää preflowa , funktiota , jolla on seuraavat ominaisuudet kaikille pisteille ja :
Kaksi ensimmäistä ominaisuutta ovat samat kuin virralla, kolmas on virran pysyvyysominaisuuden heikkeneminen. Tämän ominaisuuden sisältämää summaa kutsutaan ylimääräiseksi virtaukseksi (ylimäärä) ja sitä merkitään . Tämän ominaisuuden mukaan ylivirtaus ei ole negatiivinen kaikille pisteille paitsi lähteelle ja nielulle.
Kutsumme kärkeä ylivuodoksi , jos se ei ole lähde eikä nielu, ja ylivirtaus kyseiseen kärkeen on ehdottomasti positiivinen. On helppo nähdä, että esivuoto on vuo silloin ja vain, jos ylivuotopisteitä ei ole.
Algoritmi tallentaa seuraavat tiedot:
Aluksi esivirtaus on yhtä suuri kuin kaikkien lähteestä lähtevien reunojen kapasiteetti ja on päinvastainen kääntöpisteparien kohdalla:
Jäljelle jääville kärkipareille esivirtaus on yhtä suuri kuin nolla.
Alkukorkeus on V origolle ja 0 kaikille muille pisteille.
Algoritmi käyttää kahta operaatiota: työntämistä (työntö) ja nostamista (uudelleenmerkintä).
TyönnäTyöntäminen kärjestä u kärkeen v on mahdollista seuraavissa olosuhteissa:
Työntäminen tarkoittaa, että virtausta lisätään tietyllä määrällä
Ylivirtaus kasvaa saman verran .
Vastavirtaus ja ylivirtaus vähenevät samalla määrällä.
Työntämistä kutsutaan kyllästymiseksi , jos . Kyllästyvän työnnön jälkeen tulee yhtä suureksi kuin , minkä seurauksena reuna (u, v) jää pois jäännösverkosta. Ei-kyllästävällä työntöllä se siis tekee kärjestä u ruuhkattoman.
NouseHuippupisteen u nostaminen on mahdollista seuraavissa olosuhteissa:
Nosto tarkoittaa, että kaikista u:n jälkeläisistä valitaan minimikorkeudella oleva kärki v, jonka jälkeen kärjen u korkeudeksi tulee yhtä suuri kuin .
Osoittakaamme, että jos algoritmi joskus päättyy, sillä hetkellä preflow on maksimivirtaus. Matkan varrella todistamme muita lemmoja, jotka ovat hyödyllisiä seuraavassa.
Lemma 1 . Minkä tahansa kärjen nostaminen lisää sen korkeutta.
Todiste . Ennen nousua huippu ei ole korkeampi kuin alin jälkeläisistä. Noustuaan ylös hän on häntä pitempi. Lapsen pituus ei ole muuttunut. Tämän seurauksena nostettavan yläosan korkeus on kasvanut.
Lemma 2 . Minkään huippupisteen korkeus ei koskaan laske.
Todiste . Työntäminen ei muuta kärkien korkeutta. Nosto lisää nostettavan kärjen korkeutta eikä muuta muiden kärkien korkeutta.
Lemma 3 . Lähteen ja nielun korkeus pysyy aina yhtä suurena V ja 0, vastaavasti.
Todiste . Lähde ja nielu eivät määritelmän mukaan voi vuotaa yli, eivätkä siksi koskaan nouse. Muiden pisteiden nostaminen tai työntäminen ei vaikuta lähteen tai nielun korkeuteen. Siksi niiden korkeudet pysyvät aina samoina kuin alustushetkellä, mikä oli todistettava.
Lemma 4 . f täyttää aina esivirtausominaisuudet.
Todiste . Todistamme sen suoritettujen operaatioiden lukumäärän induktiolla. Meidän on todistettava, että alustuksen jälkeen f täyttää esivirran ominaisuudet, ja myös, että jos f täyttää esivirran ominaisuudet ennen työntö- tai nostotoimintoa, se täyttää ne sen jälkeen.
Lemma 5 ( korkeusominaisuus ) . Jollekin jäännösverkon reunalle (u, v), epäyhtälö
Todiste . Todistamme induktiolla suoritettujen operaatioiden lukumäärän samalla tavalla kuin edellisessä lemassa.
Lemma 6 . Jos jäännösverkon kärki w on saavutettavissa kärjestä u, niin . Todiste . Harkitse lyhintä polkua u:sta w:hen. Se ei sisällä jaksoja, joten sen pituus on enintään . Mutta korkeusominaisuudella tämän polun jokaisella reunalla korkeus pienenee enintään 1. Siksi koko polulla se pienenee enintään , mikä vaadittiin todistettavaksi.
Lemma 7 . Jäännösverkossa nielu ei ole koskaan tavoitettavissa lähteestä.
Todiste . Älkää antako olla niin. Sitten edellisen lemman mukaan . Mutta Lemma 3, . Ristiriita.
Lemma 8 . Jos algoritmi joskus päättyy, siinä vaiheessa preflow on säiettä.
Todiste . Ylivuotopisteessä voimme aina joko työntää (jos kärki on korkeammalla kuin vähintään yksi lapsi) tai nostaa (muuten). Koska algoritmi päättyy vain silloin, kun operaatiot eivät ole mahdollisia, tällä hetkellä ei ole ylivuotopisteitä, mikä tarkoittaa lemman vahvistamista.
Lause . Jos algoritmi joskus päättyy, siinä vaiheessa esivirtaus on maksimivirtaus.
Todiste . Lemmassa 8 esivirtauksesta tulee virtaus. Lemman 7 mukaan jäännösverkossa nielu ei ole tavoitettavissa lähteestä, toisin sanoen lisäyspolkua ei ole. Siksi virtaus on maksimaalinen. [2]
Tässä osiossa emme vain todista, että algoritmi valmistuu äärellisessä ajassa, vaan annamme myös ylärajan työntö- ja nostotoimintojen enimmäismäärälle.
Lemma 1 . Ylimääräinen virtaus nielulle ( ) ei koskaan vähene. Todiste . Työntäminen u:sta v:ään vähentää ylimääräistä virtausta vain kohdassa u, kun taas työntäminen ei vaikuta ylimääräisiin virtauksiin ollenkaan. Siksi ainoa tapa pienentää on työntää nielusta toiseen kärkeen. Mutta työntäminen on mahdollista vain ylivuotavista pisteistä, eikä nielua voi määritelmän mukaan ylivoittaa. Joten sitä on mahdotonta vähentää.
Lemma 2 . Ylimääräinen virtaus pesualtaaseen ( ) on aina ei-negatiivinen. Todiste . Välittömästi alustuksen jälkeen se on yhtä suuri kuin , joten se ei ole negatiivinen. Tulevaisuudessa se ei laske, joten pysyy ei-negatiivisena.
Lemma 3 . Jäännösverkossa lähde on aina tavoitettavissa mistä tahansa ruuhkaisesta kärjestä.
Todiste . Olkoon lähde s saavuttamaton jostain kärjestä u. Osoittakaamme, että et ole täynnä. Olkoot U, U' jäännösverkon kärkijoukot, jotka ovat u:lta saavutettavissa ja joita ei voida saavuttaa. Oletuksena ,. Harkitse mitä tahansa kärkiparia , . Jäännösverkossa ei ole reunaa (v,w), muuten olisi mahdollista päästä v:stä u:sta ja sitten tätä reunaa w pitkin, mikä on ristiriidassa . Toisaalta, jos , niin jäännöskapasiteetti on positiivinen, joten tällaisen reunan täytyy olla. Siis mistä . Summataan nyt ylimääräiset virrat U:n kaikkiin pisteisiin:
Ensimmäinen oikealla puolella olevista kahdesta summasta on nolla, koska kullekin relevantille pisteparille (v,w) sillä on kaksi termiä f(v,w) ja f(w,v), joiden summa on nolla . Toinen on ei-positiivinen, koska kaikki sen ehdot ovat ei-positiivisia. tarkoittaa,
Toisaalta jokainen summan termi ei ole negatiivinen:
Koska ei-negatiivisten termien summa on ei-positiivinen, tästä seuraa, että kaikki sen termit ovat yhtä suuria kuin nolla. Erityisesti , eli u ei ole ylikuormittava, mikä oli todistettava.
Lemma 4 . Minkä tahansa kärjen korkeus on aina alle 2V.
Todiste . Harkitse jotain kärkeä u. Ainoa tapa muuttaa kärjen korkeutta on nostaa sitä. Siksi, jos kärkeä u ei ole koskaan nostettu, sen korkeus pysyy samana kuin se oli alustuksen jälkeen, eli 0 tai V, ja lemma todistetaan. Muuten sen korkeus pysyi samana kuin se oli edellisen nousun seurauksena. Ennen viimeistä nousua u oli ylivuoto, mikä tarkoittaa, että jäännösverkossa lähde s oli tavoitettavissa siitä. Nousun jälkeen polku u:sta s:iin jäännösverkostossa säilyy, koska nousu ei vaikuta jäännösverkkoon. Tästä syystä edellisen osan Lemmalla 6 , mistä , joka oli todistettava.
Lause . Algoritmin koko toiminta-ajalla ei voi olla enempää kuin . Todiste . Huippupisteen nostaminen lisää sen korkeutta vähintään 1. Jokaisen kärjen alkukorkeus on vähintään 0, viimeinen edellisen lemman mukaan enintään 2V-1. Huippupisteen korkeutta ei voi pienentää. Tämä tarkoittaa, että kukin huippu voi kestää enintään 2V-1 nousua. Yhteensä voit nostaa korkeintaan V-2 kärkeä (kaikki paitsi s ja t). Tämä edellyttää lauseen vahvistamista.
Lause . Algoritmin koko toiminta-ajalla ei voi olla enempää kuin . Todiste . Tarkastellaan kahta peräkkäistä kyllästystyöntöä u:sta v:ään. Ensimmäinen niistä jättää reunan (u, v) pois jäännösverkosta; kun toinen suoritetaan, tämä reuna tulee uudelleen esiin. Joten näiden kahden työntövälin välillä suoritetaan työntö v:stä u:hun, mikä on ainoa tapa palauttaa reuna. Ensimmäisen kyllästyvän painalluksen aikana , kun painat v:stä u:han, päinvastoin . Ottaen huomioon, että korkeudet eivät voi laskea, saadaan, että korkeus on kasvanut vähintään 2. Koska tämä tapahtuu jokaisen kahden peräkkäisen kyllästyvän työnnön välillä u:sta v:hen, eikä minkään kärjen korkeus voi kasvaa enempää kuin 2V-1 (0:sta 2V-1), työntöjen määrä u:sta v:iin ei ylitä V:tä. Työntöyn sopivia kärkipareja on yhteensä 2E (kaikki reunat ja niiden käänteiskohdat). Siksi kyllästyviä työntöjä ei voi olla enemmän kuin 2VE.
Lopuksi, löytääksemme ylärajan ei-tyydyttyvien työntöjen lukumäärälle, käytämme kaikkien ylivuoteltujen kärkien korkeuksien summaa potentiaalifunktiona. Merkitään tämä summa Φ:llä. Ei-tyydyttävä työntö u:sta v:hen ei muuta korkeuksia, mutta muuttaa u:n täpötäytteisestä ruuhkattomaksi ja voi kääntää v:n ahtaasta ruuhkaiseksi; se ei vaikuta muiden kärkien tilaan. Siksi Φ pienenee vähintään . Työntäminen on mahdollista vain , jos siksi tyydyttymätön työntäminen vähentää Φ:tä vähintään yhdellä. Aluksi Φ=0, mutta Φ ei voi koskaan muuttua negatiiviseksi. Tämä tarkoittaa, että algoritmi voi suorittaa vain niin monta ei-tyydyttävää työntöä kuin muut toiminnot lisäävät Φ. Nosto lisää Φ:tä enintään 2V-1 ja Saturating Push lisää Φ:tä enintään 2V-1. Näin ollen tällaisten työntöjen kokonaismäärä on enintään , tai .
Koska eristetyt kärjet (jotka eivät ole sattumanvaraisia alkuperäisen verkon mihinkään reunaan) eivät vaikuta työntö- tai nostooperaatioihin millään tavalla, voimme jättää ne henkisesti pois arvioidaksemme operaatioiden lukumäärän, jonka jälkeen . Siksi ei-kyllästystyöntöjen määrä on . Kun tähän lisätään korkeintaan kyllästyviä työntöjä, saadaan, että työntöjen kokonaismäärä on myös .
Säilytämme joukon ylivuotavia kärkipisteitä, ja jokaiselle kärjelle - kaksi sarjaa jälkeläisiä: vähintään korkeudella ja pienemmällä korkeudella. Tallennamme kaikki nämä joukot yksinkertaisesti elementtien taulukoina (C++ -vektorien suhteen).
Tarvittavan toimenpiteen määrittäminen ja työntäminen suoritetaan vakioajassa (huomaa, että työnnössä joukon viimeinen elementti on aina poissuljettu). Siksi kaikki halutun toiminnon ja työntömääritykset vaativat operaatioita.
Nousuajan selvittämiseksi huomaamme, että kärjen u siirtäminen jälkeläisten joukkoon, jonka korkeus ei ole pienempi, vaatii sen poissulkemista alhaisemman korkeuden omaavien jälkeläisten joukosta. Koska jälkeläisten joukot tallennetaan vektoreina ja vektorin elementin poistaminen vaatii useita sen pituuteen verrannollisia operaatioita, tällainen siirto voi vaatia operaatioita. Tämä tarkoittaa, että käännösten suorittaminen kaikille naapureille vaatii operaatioita, joissa on kärjen u aste. Loput noston aikana suoritettavat toiminnot vaativat vähemmän operaatioita, mikä tarkoittaa, että hissi vaatii toimenpiteitä. Yksi kärki kestää nostoa, joten sen kaikki nostot vaativat operaatioita ja kaikkien kärkien kaikki nostot vaativat operaatioita.
Näin ollen algoritmin toteutus vaatii operaatioita.
Label to front -algoritmi on tehokkaampi toteutus preflow push -algoritmista kuin edellä on kuvattu. Toiminta-aika on .
Algoritmi käyttää sallittujen reunojen käsitettä . Reunaa (u, v) kutsutaan hyväksyttäväksi , jos kaksi ehtoa täyttyy:
Huomaa, että ottaen huomioon korkeusominaisuuden, nämä ehdot ovat yhtäpitäviä kahden viimeisen työntöoperaation reunoihin sovellettavuuden ehdon kanssa. Näin ollen
Työntäminen tapahtuu vain sallittuja reunoja pitkin. |
Lisäksi noston hyväksyttävyys, ottaen huomioon korkeuden ominaisuus, voidaan muotoilla seuraavasti:
Nostaminen on sallittua vain, jos nostettava kärki on ylivuoto eikä siitä tule sallittuja reunoja |
Lisäksi voidaan todistaa kaksi muuta sallittujen reunojen ominaisuutta.
Ominaisuus 1. Työntäminen ei luo uusia kelvollisia reunoja.
Todiste. Oletetaan, että jokin työntäminen teki reunan (u, v) hyväksyttäväksi. Reunan (u, v) hyväksyttävyys määräytyy täysin neljällä parametrilla: kärkien u ja v korkeudella, kulmalla reunaa pitkin ja sen kapasiteetilla. Työntäminen ei vaikuta kärjen korkeuksiin ja reunakapasiteeteihin. Tämä tarkoittaa, että se vaikutti virtaukseen f(u, v). Tämä voidaan tehdä vain työntämällä reunaa (u, v) tai (v, u) pitkin. Mutta reunaa (u, v) pitkin työntäminen edellyttää, että se on sallittu jo ennen työntämistä, mikä on ristiriidassa oletuksen kanssa. Reunaa (v, u) pitkin työntäminen edellyttää erityisesti, että u on v:n alapuolella. Koska työntäminen ei vaikuta korkeuksiin, u on työntämisen jälkeen pienempi kuin v, mikä rikkoo toista hyväksymisehtoa.
Ominaisuus 2. Kun kärki v on nostettu, kaikki v:n sisältämät reunat ovat virheellisiä.
Todiste. Tarkastellaan mitä tahansa tällaista reunaa (u, v) ja todistetaan, että noston jälkeen se on virheellinen.
Esivirtauksen ja korkeuksien lisäksi algoritmi tallentaa seuraavat tiedot:
Tässä osiossa kuvataan funktio nimeltä vertex-purkaus . Välit koskevat vain ruuhkaisia huippuja.
KuvausHuippupisteen u purku suoritetaan seuraavasti:
Vaihe 1. Kun kärkipiste u on täynnä, noudata vaiheita 2-4. Vaihe 2. Jos virta on ylittänyt listan lopun, nosta kärki u ja palauta virta listan alkuun. Vaihe 3. Muussa tapauksessa, jos työntäminen u:sta nykyiseen[u] on sallittu, tee se. Vaihe 4. Muussa tapauksessa siirrä nykyinen 1 elementti eteenpäin. OminaisuudetLemma 1 . Jokaisen silmukan iteraation jälkeen, jos funktio ei ole pysähtynyt, kärki u vuotaa yli.
Todiste . Seuraa vaiheessa 1 tehdystä tarkistuksesta.
Lemma 2 . Jokaisen silmukan iteraation jälkeen reuna (u, current[u]) on virheellinen, sitä ei ole olemassa tai funktio pysähtyy. Tässä nykyinen on iteraation alkuun johtavan osoittimen arvo .
Todiste . Jos vaiheen 2 ehto täyttyy, reunaa ei ole olemassa. Muuten, jos vaiheen 3 ehto ei täyttynyt, reuna oli virheellinen; koska push ei luo uusia kelvollisia reunoja, se pysyy virheellisenä. Lopuksi, jos työntö suoritettiin vaiheessa 3, se oli joko kyllästävä tai ei-kyllästävä. Ensimmäisessä tapauksessa reuna (u, v) on kadonnut jäännösverkosta, mikä tarkoittaa, että sen ensimmäinen hyväksymisehto on rikottu. Toisessa tapauksessa kärjestä ei tullut ylivuotoa, minkä jälkeen funktio pysähtyi vaiheessa 1.
Lemma 3 . Kun vaiheen 2 ehto täyttyy, u:sta lähtevää reunaa ei sallita.
Todiste . Harkitse mitä tahansa tällaista reunaa (u, v). Jos kärki v ei ole kärjen u vieressä, jäännösverkossa ei ole reunaa, joten ensimmäinen hyväksyttävyysehto on rikottu. Muuten kärkipiste otettiin huomioon vaiheessa 3. Mieti, milloin tämä tapahtui viimeksi. Välittömästi tämän jälkeen edellisen lemman reuna (u, v) muuttui virheelliseksi. Lisäksi funktiossa ei voitu suorittaa muita toimintoja, paitsi työntäminen pitkin u:sta lähteviä muita reunoja. Sellaiset työnnät eivät voi ensimmäisellä hyväksyttävyysominaisuudella tehdä reunasta (u, v) uudelleen hyväksyttäväksi.
Kiinteistö 1 . Työntäminen ja nostaminen suoritetaan vain silloin, kun ne ovat sallittuja.
Todiste . Jokaisen työntöjen hyväksyttävyys tarkistetaan erikseen. Noston hyväksyttävyys taataan sillä, että vaiheessa 2 kärki u ylittyy Lemmalla 1, ja myös sillä, että Lemma 3 ei lähde siitä yhtään sallittua reunaa.
Kiinteistö 2 . Kun funktio päättyy, kärki u ei ole ylivuoto.
Todiste . Funktio voi pysähtyä vain vaiheessa 1. Pysäytys tapahtuu vain, jos kärki u ei ole ylivuoto.
Prestreamin ja korkeuksien lisäksi "korotus alkuun" -algoritmi tallentaa listan pisteistä L ja osoittimen johonkin sen elementistä (C++-termeissä iteraattori) sen .
Digraafin topologinen lajittelu (V,E) on lista joistakin sen kärjeistä, lajiteltuna siten, että minkä tahansa reunan kohdalla u on listassa ennen v:tä.
Lemma 1. Jokaisen ulomman silmukan iteraation jälkeen lista L on topologinen tyyppi hyväksyttävästä reunagraafista (ATGGR).
Todiste. Induktio ulomman silmukan iteraatioiden lukumäärälle.
Pohja. Alustuksen jälkeen lähteen korkeus on yhtä suuri kuin V, kaikki muut kärjet ovat 0. Samalla , koska pisteitä on vähintään 2 - lähde ja nielu. Siksi minkä tahansa kärkiparin toinen hyväksyttävyysehto rikotaan, eikä hyväksyttäviä reunoja ole ollenkaan. Siksi mikä tahansa kärkiluettelo on TSGDR. Vaihe. Katsotaanpa v.
Lemma 2. Ulkosilmukan jokaisen iteraation jälkeen skannattua kärkeä ja kaikkia sen vasemmalla puolella olevia pisteitä ei ylilennä listassa.
Todiste. Induktio ulomman silmukan iteraatioiden lukumäärälle.
Pohja. Ensimmäisen iteraation jälkeen skannattu kärkipiste ei ole ylivuotettu väliominaisuuden vaikutuksesta, eikä sen vasemmalla puolella ole kärkipisteitä.
Vaihe. Katsotaanpa v. Hän itse ei ole ylenpalttinen vastuuvapauden ominaisuudesta. Jos se nostetaan ja siksi siirretään listan alkuun, sen vasemmalla puolella ei ole kärkeä ja lause on todistettu. Muuten tässä iteraatiossa suoritettiin vain työntöoperaatioita kärjestä v niihin kärkiin, joihin sallitut reunat johtavat v:stä. Koska push-toiminto ei luo uusia kelvollisia reunoja, kaikki nämä reunat olivat voimassa ennen iteraation alkua. Siksi edellisen lemman mukaan kaikki kärjet, joihin työnnettiin, olivat listan v:n oikealla puolella. Siksi listan v:n vasemmalla puolella olevat kärjet eivät voineet tulla ylivuodoiksi tässä iteraatiossa. Mutta induktiohypoteesin mukaan he eivät olleet liian täynnä myöskään aiemmin. Lause on todistettu.
Lemma 3. Algoritmin valmistumisen jälkeen mikään kärki ei vuoda yli.
Todiste. Algoritmin suorittamiseksi on tarkasteltava listan L viimeistä kärkeä. Edellisen lemman mukaan sen jälkeen mikään listan L kärki ei ole ylivuoto. Mutta lista L sisältää kaikki kärjet paitsi lähteen ja nielun, ja lähdettä ja nielua ei voi määritelmän mukaan ylittää.
Omaisuus. Lift-to-front (PHA) -algoritmi on erikoistapaus preflow push (PFP) -algoritmista.
Todiste. Korkeuksien ja esivirtauksen alustus ALP:ssä on sama kuin APS:ssä. Korkeuden ja esivirtauksen muutokset ALP:ssä tapahtuvat vain laukaisemalla purkaus, joka puolestaan suorittaa vain laillisia työntö- ja nostotoimintoja. Lopuksi, APN:n lopussa mikään kärki ei vuoda yli, joten työntö- tai nostotoiminnot eivät ole mahdollisia.
Arvioidaan kuinka monta kertaa eri toiminnot suoritetaan, ja niiden kokonaiskesto.
PurkauksetJokaisella purkauksella ilman nostamista se siirtyy yhden asennon oikealle. Lista L sisältää V-2 kärkeä, joten enemmän kuin V-2 purkaus peräkkäin ilman nostoa on mahdotonta. Nousujen määrä , siis purkausten määrä .
Itse purkukutsu ja siihen liittyvät kustannukset (iteraattorin eteneminen, takaisinkytkentä) vievät jatkuvasti aikaa. Siksi kaikkien tällaisten toimien kokonaisaika on .
KiipeilyTarkastellaan mielivaltaista kärkeä u. Olkoon sen aste. Huippua voidaan nostaa korkeintaan 2V-1 kertaa, ja jokaiseen nousuun kuluu aika . Siksi kaikkien kärkien nostamiseen käytetty aika on , tai .
TyönnäKyllästyneet työnnät, kuten olemme aiemmin todenneet, eivät ole enempää kuin O(VE).
Ei-kyllästävä työntö tekee kannen ruuhkautumattomaksi, minkä jälkeen purkautuminen pysähtyy. Siksi ei ole sen enempää ei-kyllästäviä työntöjä kuin purkauskutsuja, eli .
Yhden painalluksen käyntiaika on vakio. Tämä tarkoittaa, että työntöjen kokonaisajoaika on .
Iteraattori siirtää nykyistäTarkastellaan mielivaltaista kärkeä u. Olkoon sen aste. Jokainen virran[u] siirto saa kärjen nousemaan. Kokonaisnostot enintään 2V-1. Siksi iteraattorisiirtymien määrä kaikille kärkipisteille on , tai .
Jokaisen vuoron aika on vakio.
KokonaisaikaYhteenvetona edellisistä osista saadaan, että algoritmin ajoaika on , tai .