Stöhr-Wagner- algoritmi on rekursiivinen algoritmi vähiten leikatun ongelman ratkaisemiseksi ohjaamattomissa painotetuissa graafisissa nollasta poikkeavilla painoilla. Algoritmia ehdottivat Mechthild Stöhr ja Frank Wagner vuonna 1995. Tämän algoritmin pääideana on kutistaa graafia yhdistämällä voimakkaimmat kärjet, kunnes graafi sisältää vain kaksi yhdistettyä (liiton tulos) kärkeä [2] . Algoritmilla on jokaisessa vaiheessa pienin st -leikkaus kahdelle pisteelle s ja t . Algoritmi vähentää sitten s:n ja t :n välisen reunan löytääkseen reunan st , joka ei sisälläviilto. Pienin kaikista vaiheista löydetty leikkaus on kaavion pienin painotettu leikkaus.
Leikkaus on graafin kärkien osio kahdeksi erilliseksi osajoukoksi. Pienin leikkaus on leikkaus, jonka koko tai paino ei ole suurempi kuin toisen leikkauksen koko tai paino. Painottamattomassa kaaviossa pienin leikkaus, jolla on vähiten reunoja. Painotetussa kaaviossa kaikkien leikkausreunojen painojen summa määrittää, onko leikkaus pienin. Käytännössä pienin leikkausongelma käsitellään aina maksimivirtausongelman kanssa, joka tutkii verkon maksimiläpäisykykyä, koska pienin leikkaus on graafin tai verkon pullonkaula.
Huippupisteissä st leikkaus on pisteet s ja t erottava leikkaus . Minimileikkaus on st - leikkaus, jonka paino on pienin .
Antaa olla painotettu suuntaamaton graafi. Olkoon graafin G globaali minimileikkaus . Oletetaan, että . Jos täsmälleen yksi pisteistä s tai t kuuluu S :ään , on myös graafin G [3] :95 pienin st -leikkaus .
Tämä algoritmi alkaa etsimällä G : n minimileikkaus kahdelle kärjelle . Huippuparilla on kaksi eri tilannetta - onko graafin G globaali minimileikkaus tai ne kuuluvat samaan osaan graafin G globaalia minimileikkausta . Siksi globaali minimileikkaus voidaan löytää tarkastelemalla graafia , joka on graafi sen jälkeen, kun kärjet s ja t on yhdistetty . Jos yhdistämisen aikana s ja t on yhdistetty reunalla, reuna katoaa. Jos sekä s:llä että t :llä on reuna johonkin kärkeen v , niin uudesta kärjestä st pisteeseen v tulevan reunan paino on [3] . Algoritmi kuvataan seuraavasti [2] :
Algoritmi toimii useissa vaiheissa. MinimumCutPhase-vaiheessa graafin kärkien osajoukko A kasvaa mielivaltaisesta yksittäisestä kärjestä alkaen, kunnes A on yhtä suuri kuin V . Jokaisessa vaiheessa joukkoon A lisätään kärki, joka ei kuulu A :han, mutta joka liittyy läheisimmin A :han . Tämä menettely voidaan kirjoittaa muodossa [2] : lisää kärkipiste , jolloin , missä on kaikkien A:n ja y :n välisten reunojen painojen summa . Siten yhdessä vaiheessa määritellään pari pisteitä s ja t sekä pienin st - leikkaus C [4] . Yhden MinimumCutPhase-vaiheen jälkeen kaksi kärkeä yhdistetään uudeksi kärjeksi ja kahdesta pisteestä jäljellä oleviin kärkipisteisiin korvataan reuna, jossa on kahden edellisen reunan painojen summa. Solmuja yhdistävät reunat poistetaan. Jos G :stä on pienin leikkaus, joka erottaa s :n ja t :n , C on G :n pienin leikkaus . Jos ei, G :n pienimmässä leikkauksessa on oltava s ja t samalla puolella. Siksi algoritmi yhdistää ne yhdeksi solmuksi. Lisäksi MinimumCut kirjoittaa ja päivittää globaalin pienimmän leikkauksen jokaisen MinimumCutPhase-kutsun jälkeen. Vaiheiden jälkeen löydetään pienin leikkaus [4] .
Vaiheen 1 kuvaaja edustaa alkuperäistä graafia G , ja satunnaisesti valittu solmu 2 toimii tämän algoritmin aloitussolmuna. MinimumCutPhase-vaiheessa joukko A sisältää vain solmun 2, jonka raskain reuna on reuna (2,3), joten lisäämme solmun 3 A :han . Nyt joukko A sisältää solmut 2 ja 3 ja raskain reuna on (3,4), joten solmu 4 lisätään joukkoon A. Tämän toimenpiteen jälkeen solmu 5 ja 1 ovat viimeinen solmu, joka tulee solmuksi s . ja t tässä vaiheessa. Niiden yhdistämisen jälkeen (solmuun 15) saadaan uusi graafi vaiheelle 2. Tässä vaiheessa leikkauksen paino on 5, joka on reunojen (1,2) ja (1,5) painojen summa. ). Ensimmäinen MinimumCut-sykli on valmis.
Vaiheessa 2 alkaen solmusta 2 raskain reuna on (2,15), joten solmu 15 lisätään joukkoon A. Seuraavaksi painavin reuna on (2,3) tai (15,6), valitsemme (15,6), joten solmu 6 lisätään joukkoon. Nyt verrataan reunoja (2,3) ja (6,7) ja valitaan solmu 3 sisällytettäväksi joukkoon A . Kaksi viimeistä solmua ovat 7 ja 8. Siksi supistamme reunaa (7,8). Pienin leikkaus on 5, joten se pysyy minimaalisena.
Seuraavat vaiheet toistavat samoja graafin supistusoperaatioita, kunnes jäljellä on vain yksi reuna. Globaalilla pienimmällä leikkauksella on reuna (2,3) ja reuna (6,7), joka löytyy vaiheessa 5.
Algoritmin oikeellisuuden todistamiseksi on todistettava, että MinimumCutPhase antaa graafin todellisen minimileikkauksen , jossa s ja t ovat kaksi vaiheen viimeiseksi lisättyä kärkeä. Alla on lemma:
Lemma 1 : MinimumCutPhase palauttaa G : n vähimmäisleikkauksen .
Todistamme lemman induktiolla aktiivisten pisteiden joukossa. Olkoon mielivaltainen st - leikkaus ja olkoon CP vaiheleikkaus. Meidän on näytettävä se . Huomaa, että yksi MinimumCutPhase-ajo antaa permutaation kaikille graafin pisteille (jossa a on ensimmäinen kärkipiste ja s ja t ovat kaksi viimeistä tähän vaiheeseen lisättyä kärkeä). Sanomme, että kärki v on aktiivinen , jos MinimumCutPhase-proseduurilla saadun kärjen katkaisujärjestyksen kärjet ennen v :tä ovat kohdassa , tai päinvastoin. Määrittelemme A :han ennen v : tä lisättyjen pisteiden joukoksi , ja se on C :n leikkauksen generoiman joukon leikkaus . Kaikille aktiivisille pisteille v
Antaa olla ensimmäinen aktiivinen kärkipiste. Määritelmän mukaan nämä kaksi määrää ja ovat samanarvoisia. ovat yksinkertaisesti kaikki kärjet, jotka on lisätty A: hen asti , ja näiden pisteiden väliset reunat, jotka leikkaavat leikkauskohdan C . Siksi, kuten yllä on esitetty, aktiivisille pisteille u ja v ( v lisätään A :han ennen u ),
induktiolla , koska se vaikuttaa mutta ei (ja muilla reunoilla on ei-negatiiviset painot)Sitten, koska t on aina aktiivinen kärki, koska viimeinen vaiheleikkaus erottaa s : n t :stä , määritelmän mukaan mille tahansa aktiiviselle kärkipisteelle t
Siten vaiheleikkaus ei ylitä painoa C.
MinimumCut- algoritmin aikamonimutkaisuus on yhtä suuri kuin MinimumCutPhase - proseduurin kokonaisajoaika , jota kutsutaan graafille, jossa on laskeva määrä pisteitä ja kulmia.
Yksi MinimumCutPhase- menettelyn ajo ei vaadi enempää aikaa.
Siksi kokonaisajan tulee olla kahden vaiheen tulo, joka on [2] .
Lisäparannuksia varten pitäisi olla helppo valita seuraava joukoon A lisättävä kärki , eli vahvimmin yhdistetty kärki. Kun vaihe suoritetaan, kaikki pisteet, jotka eivät ole A :ssa, sijoitetaan prioriteettijonoon avainkentän perusteella. Huippupisteen V avain on sen nykyiseen joukkoon A yhdistävien reunojen painojen summa , eli . Kun vertex v lisätään joukkoon A , meidän tulee päivittää jono. Piikki v tulee poistaa jonosta ja kaikkien niiden kärkien w avaimia, jotka eivät liity v : hen, tulee lisätä reunan vw painolla , jos sellainen on. Koska tämä tehdään täsmälleen kerran mille tahansa reunalle, meidän tarvitsee vain ExtractMax- ja IncreaseKey-operaatiot. Fibonacci -keon avulla voimme suorittaa ExtractMax-operaation jaksotettuna aikana ja IncreaseKey-operaation jaksotettuna aikana [5] . Joten aika, joka meidän on suoritettava tämä avainvaihe, joka hallitsee loput, on [2] .