Table of Contents
Edmonds-Karp Algoritmi: yksityiskohtainen tehokkuusanalyysi
Edmonds-Karp-algoritmi on erityinen toteutus Ford-Fulkerson menetelmä laskenta maksimivirran virtaus verkossa. Vaikka alkuperäinen Ford-Fulkerson menetelmä käyttää mielivaltaista hakua lisäten polkuja (joka voi johtaa eksponentiaaliseen aikaan patologisissa tapauksissa), Edmonds-Karp toteuttaa BFS-pohjainen haku, varmistaa, että lyhin lisäys polku (lukumäärä reunoja) valitaan kunkin iteraatio. Tämä takuu tuottaa hyvin määritelty polynomi runtime ja tekee algoritmi kulmakivenä johdanto verkon virtausteoria.
Algoritminen kuvaus ja avainominaisuudet
Kun otetaan huomioon suunnattu kaavio G = (V, E), jonka lähde s[, allas ]t[], ja kapasiteettifunktio c: E → R+, Edmonds-Karp-algoritmi etenee seuraavasti:
- Alusta virtaus f(e) = 0 kaikille reunoille.
- Muodosta jäännöskaavio Gf (mukaan lukien taaksepäin reunojen kapasiteetti virtana).
- Suorita BFS ]Gf[]s[]]] - [] - ] -tielle, joka on lyhin suunnattu reitti [ [[] (reunojen lukumäärässä mitattuna).
- Jos polkua ei ole, lopeta; virta on suurin.
- Muussa tapauksessa määritetään pullonkaulakapasiteetti reitin varrella (vähimmäiskapasiteetti).
- Lisävirtaa tuolla määrällä polkua pitkin ja päivittää jäännöskapasiteettia.
- Toistan vaiheesta 2.
BFS:n käyttö varmistaa, että jokainen löydetty lisäpolku on lyhin polku jäännöskäyrässä. Kriittinen ominaisuus syntyy: etäisyys (reunoilla) s[] []] [[]]] jäännöksen kuviossa ei koskaan pienene ja ehdottomasti lisää jokaista []O(E][[] iteraatioita. Tämä johtaa suoraan monimutkaiseen sidottuun.
Kompleksisuusanalyysi
Kunkin BFS:n käyttöaika on ]O(V + E)[, joka yksinkertaistaa [O(E][] tyypillisten harvakuvioiden osalta. Ydinhaaste sitoo lisäyksien määrän.Koska kukin lisäyskyllästyy vähintään yhdellä reunalla (pullonkaula) ja jokainen reuna voidaan täyttää enintään []V/2[] kertaa (koska kukin kyllästys lisää etäisyyttä []- [[]]- [[[]]]]-kertaan.]
Tarkemmin sanottuna standardianalyysi osoittaa, että lisäysten määrä on enintään ]O(VE][], joten kokonaisaika on [[O(V E2)[ [[]] tai [[] [[[[V E * (V+E]]]]]]) [[]. Tiheiden kaavioiden osalta []E = . Käytännössä suorituskyky on kuitenkin usein parempi kuin pahin mahdollinen sidottu, erityisesti yksikkökapasiteettiverkkojen osalta tai kun kaavio on harva.
Vertailu muihin Max Flow Algoritmeihin
Diniikka...
Dinic.S algoritmi käyttää BFS:ää myös tason kaavion rakentamiseen, mutta sallii sen jälkeen useita lisäyttäviä polkuja DFS:n kautta tasokuvaukseen. Tämä vähentää BFS:n kulkujen määrää enintään []V[] (koska tiskialtaan taso kasvaa kussakin vaiheessa). Kokonaiskompleksisuus on [O(V2 E) [] yleensä ja []O(E .V)[[] yksikkökapasiteetti bpartiittien yhteenlaskuun. Useimmissa käytännön verkoissa diniikka outperforms Edmonds-Karp koska se lähettää virtaa pitkin useita polkuja samanaikaisesti.
Push- relabel algoritmit
Push-remarking-menetelmät, kuten yleinen algoritmi tai korkein merkki variantti, saavuttaa [O(V2 ...][ tai .O(V3)[[] rajat. Ne toimivat työntämällä virtausta paikallisesti pitkin tukikelpoisia reunoja ja uudelleenmerkitsemällä vertices ylläpitää voimassa merkintä. Nämä algoritmit ovat monimutkaisempia toteuttaa mutta usein ajaa nopeammin käytännössä, erityisesti suurille, tiheille kaavioille. Korkein-merkki Push-remarket-algoritmia käytetään laajalti kilpailukykyisessä ohjelmoinnissa ja reaalimaailman virtausratkaisuissa.
Toinen tärkeä variantti on kapasiteettiskaalaus algoritmi, joka lisää Ford-Fulkerson-menetelmään skaalausparametrin, tuottaa O(E2 log U)[] jossa []U[]] on suurin kapasiteetti. Tämä on myös polynomillinen mutta yksinkertaisempi kuin työntöremarking.
Miksi Edmonds-Karp Still Matters?
Huolimatta hitaampi kuin Dinic ja työntö-relabel, Edmonds-Karp on pedagogisesti arvokas. Sen yksinkertaisuus ja intuitiivinen todiste polynomi runtime (perustuu lyhin polku yksitoikkoisuus) tekevät siitä erinomaisen opetustyökalun. Monet tietojenkäsittelyn opetussuunnitelmat esitellä Edmonds-Karp ennen siirtymistä kehittyneempiä menetelmiä. Lisäksi, pienten ja keskisuurten verkkojen (saada, jopa muutamia tuhansia vertices ja reunat), käytännön suorituskyvyn ero voi olla mitätön, varsinkin jos kaavio on harva ja on alhainen reuna kapasiteettia.
Käytännön vaikutukset ja käyttötapaukset
Reaalimaailman sovelluksissa algoritmien valinta riippuu suuresti ongelmarajoitteista.
- Bipartiittien yhteensovitus[: Edmonds-Karp vähentää Hopcroft.Karp-algoritmin tehoa, kun kapasiteetti on yksikkö ja verkko on kaksihaarainen? Oikeastaan ei ole . Hopcroft.Karp on omistettu algoritmi []O.[E .V.][. Edmonds-Karp on yksikkökapasiteetti kaksihaarainen kaaviot toimii ]O.V.E.[]. Yksikkökapasiteettiverkoissa kukin BFS löytää kuitenkin lisätyn polun, joka tyydyttää yhden reunan ja lisääntymien määrää.
- Traffic engineering[: Televiestinnässä ja tieverkoissa virrat ovat usein suuria ja kaavioita harvalukuisia. Dioniset tai työntö-remarketit ovat suosittuja paremman skaalauksen vuoksi.
- Kuvasegmentointi[: Graafinen leikkausalgoritmit tietokonevision usein luottaa max-flow / min-cut-laskelmia. Boykov-Kolmogorov-algoritmi, erikoistunut augmentointi-polku menetelmä, usein outperforms generic algoritmeja näitä ruuduston kaltaisia kaavioita, mutta Edmonds-Karp voidaan käyttää pienempiin ongelmiin.
- Koulutus ja prototyyppien [: Kun yksinkertaisuus ja oikeellisuus ovat etusijalla raakanopeuden yläpuolella, Edmonds-Karp on turvallinen valinta. Sen käyttäytyminen on ennustettavissa ja vianetsintä on yksinkertaista, koska BFS on helppo toteuttaa.
Empiirinen suorituskyky
Satunnaiskuvioiden vertailuarvot osoittavat, että Edmonds-Karp toimii usein lähes lineaarisessa ajassa käytännössä, kun reunakapasiteetti on pieni ([]O(1)]), koska augmentaatioiden määrää rajoittaa maksimivirtausarvo, joka voi olla pieni. Kuitenkin suurikapasiteettisten verkkojen algoritmi voi hajota. Esimerkiksi harkita verkkoa, jossa kapasiteetti on suuri kokonaislukuja; virtausarvo voisi olla valtava, mikä johtaa moniin lisäyksiin. Tällaisissa tapauksissa diniikka- tai skaalausmenetelmät ovat vankempia.
Täytäntöönpano
Edmonds-Karp-ohjelman toteutuksessa on tärkeää, että graafinen jälkikäsittely on huolellista. Sekä eteenpäin että taaksepäin reunojen edustaminen mahdollistaa helpon augmentoinnin ja takaperin jäljittämisen. Adjaitability-listan käyttäminen käänteiskulmilla (tai käänteisen reunan indeksien tallentaminen) yksinkertaistaa päivityksiä. BFS:n on myös kirjattava edeltäjiä, jotta se voi rekonstruoida augmentoivan polun. Muistin käyttö on O(V + E)[, kuten muissa algoritmeissa.
Optimisointiin kuuluvat:
- Jos BFS ei pysty saavuttamaan .
- Käyttämällä kokonaisluku kapasiteetti ja virrat välttää kelluva-piste kysymyksiä.
- Yhdistää useita augmentaatioita, jos kaavio on monia rinnakkaisia reunoja (vaikka vähemmän yleisiä).
Hyvin suurissa verkoissa kannattaa käyttää dynaamista BFS:ää, joka päivittää etäisyyksiä asteittain, mutta tämä usein lisää monimutkaisuutta ilman Edmonds-Karpin kannalta merkittäviä hyötyjä.
Suhteet alkuperäiseen Ford-Fulkerson-menetelmään
Jack Edmonds ja Richard Karp julkaisivat algoritminsa vuonna 1972, mikä osoittaa, että BFS tuottaa polynomi-aika maksimivirtausalgoritmi. Ennen sitä Ford-Fulkerson menetelmä (1956) ei täsmentänyt polun valintasääntöä, ja tiedettiin, että huonot valinnat voivat johtaa eksponentiaaliseen aikaan. Edmonds ja Karp.s työ oli perustava askel kehityksessä voimakkaasti polynomi algoritmit verkkovirtoihin. Paperi "Teoreettinen parannukset algoritminen tehokkuus verkkovirtaongelmia"[ on klassinen viite.
Laajennukset ja muutokset
Muunnoksia Edmonds-Karp ovat:
- Valuuttaskaalausversio[]: Algoritmi toimii aina lyhintä reittiä täydentävän algoritmin sijaan skaalausparametrilla Δ[] ja ottaa huomioon vain reunoja, joiden jäännöskapasiteetti on ≥ Δ. Tämä tuottaa []]O(E2 log U)[] -algoritmin.
- Yksikön kapasiteetin optimointi[: Kun kaikki kapasiteetti on 1, BFS-pohjainen lisäpolkualgoritmi on erikoistunut Hopcroft.Karp-algoritmiin, vaikka viimeksi mainittu käyttääkin huolellisesti vaihdettavia BFS/DFS:iä ]O(E .V][].
- Integriteetti[: Algoritmi ylläpitää luonnollisesti integraaleja virtoja, kun kapasiteetti on kiinteä, joten se sopii kombinatorisiin ongelmiin.
Päätelmä
Edmonds-Karp-algoritmi on luotettava ja hyvin ymmärretty menetelmä maksimivirtausongelmien ratkaisemiseksi. Sen [O(V E2)[ pahin tapaus aikakompleksi tekee siitä epäkäytännöllisen hyvin suurille tai tiheille verkoille, mutta sen yksinkertaisuus ja selvä näyttö polynomijuoksuajasta ovat lujittaneet paikkansa algoritmien oppikirjoissa. Tosielämän järjestelmien, jotka vaativat korkeaa suorituskykyä, Dinic. Dinics-algoritmi tai työntöremark-menetelmät ovat yleensä suosittuja. Kuitenkin koulutusasetuksissa, pienimuotoisissa ongelmissa tai perustasona oikeellisuuden todentamiselle, Edmonds-Karp on edelleen arvokas työkalu.
Lisätietoja edistyneistä virtausalgoritmeista on -julkaisussa Wikipedia-artikkelissa[ ja klassisessa oppikirjassa Esittely algoritmeihin[ (CLRS). Virtausalgoritmin suorituskyvyn syvällisempää analyysia varten ks. [NetworkX-virran toteutusta koskevat huomautukset.