Karger algoritmusa | |
---|---|
| |
Valaki után elnevezve | David Karger [d] |
célja | a grafikon legkisebb metszetének megtalálása |
Adatstruktúra | grafikon |
Átlagos idő | |
A memória költsége | - |
Karger algoritmusa a számítástechnikában és a gráfelméletben egy valószínűségi algoritmus , amely lehetővé teszi egy összefüggő gráf minimális metszésének megtalálását . Az algoritmust David Karger találta ki és 1993 -ban jelent meg [1] .
Az algoritmus ötlete egy irányítatlan gráf élösszehúzódásán alapul . Az élösszehúzás során két csúcs összevonódik egybe, ami eggyel csökkenti a gráf csúcsok számát. Az összehúzott csúcsok összes éle kapcsolódik az újonnan kialakított csúcshoz, így multigráfot generál . A Karger-algoritmus iteratív módon kiválasztja a véletlenszerű éleket, és addig hajtja végre a műveletet, amíg két csúcs marad, amelyek az eredeti gráf egy metszete. Ha az algoritmust elégszer megismételjük, akkor a minimális vágás nagy valószínűséggel megtalálható.
A fő feladat a szűk keresztmetszetek megtalálása a különböző hálózatokban. Példák:
A Karger-algoritmus alapművelete az élösszehúzódás egyik formája . Ahhoz, hogy ezt a műveletet tetszőleges élen hajtsuk végre , a és a gráf csúcsait egyesítjük . Ha egy csúcsot eltávolítunk , akkor minden nézet élét egy nézet él helyettesíti . A ciklusok eltávolításra kerülnek, és a művelet után a gráf nem tartalmaz ciklusokat. A költségfüggvény újradefiniálása a következőképpen történik: .
Az algoritmus egy véletlenszerűen elérhető él és csúcsok uniójának ekvivalens választása a leírt művelet szerint. Az algoritmus eredménye egy csúcspár, amelyek közötti élhalmaz a gráf egy szakasza. Lehet, hogy ez a vágás nem minimális, de annak a valószínűsége, hogy ez a vágás minimális, lényegesen nagyobb, mint egy véletlenszerűen kiválasztott vágásnál.
1. lemma .
Bizonyíték. Vegye figyelembe, hogy minden bevágás egy bevágásnak felel meg . Hagyjuk , és . Ekkor a következő eltérések érvényesek: , (feltéve, hogy ) és . Így .
2. lemma. Annak a valószínűsége, hogy az algoritmus eredménye a legkisebb vágás, nagyobb vagy egyenlő, mint .
Bizonyíték. Legyen a -edik összehúzott él, feltéve, hogy . Továbbá legyen és a -edik összehúzódás utáni grafikonok , és a gráf bármely legkisebb metszete . Akkor a következő igaz:
Vegye figyelembe, hogy annak a valószínűsége, hogy nem találja meg a legkisebb vágást az ismétlésekkel, . Így tetszőlegesen csökkenthető a hiba valószínűsége, de ez megnöveli az algoritmus végrehajtási idejét. A hibavalószínűségi állandóhoz elég egyszer lefuttatni az algoritmust, és a végrehajtási idő -ra nő . Az állandó hibavalószínűség elérése után exponenciálisan csökken a függvényében . Eddig a lehetséges legkisebb vágásokat az algoritmus külön-külön generálta minden híváson, de az első élösszevonások eredményei számos futtatásra felhasználhatók. A Karger-Stein algoritmus ötlete az, hogy minden iterációban azonosítson két összehúzódási jelöltet, és mindegyiknél rekurzívan folytassa a Karger algoritmust:
Tétel. A Karger-Stein algoritmus időben bonyolult .
Bizonyíték. Az alábbi egyszerűsített rekurzív egyenlet írja le az algoritmus futási idejét: for and for . A rekurziós mélység , mivel a bemeneti adatok mérete konstans számú alkalommal csökken. Legyen a rekurzió szintjén . Vegye figyelembe, hogy rekurziós szinten az algoritmust egyszer kell futtatni, és minden rekurzív hívás bemeneti gráfjának mérete . Így minden rekurzív hívás végrehajtási ideje , a rekurziós mélységen belül szükséges végrehajtási idő pedig . A teljes végrehajtási idő .
Lemma. .
Bizonyíték.
Tétel. Az algoritmus kiszámítja a legkisebb vágást valószínűséggel .
Bizonyíték. Legyen a legkisebb vágás a grafikonon és . Ekkor annak a valószínűsége, hogy az összehúzódások után megmarad , egyenlő a minimummal:
Annak a valószínűsége, hogy vagy azonos a legkisebb vágással, mint és legalább . A Karger-Stein algoritmus csak két esetben lesz sikeres: ha vagy tartalmaz egy minimális méretű vágást , és az algoritmus rekuszív hívása sikeres. Legyen annak a valószínűsége, hogy az algoritmus sikeres lesz a gráf esetében . Ekkor annak a valószínűsége, hogy az algoritmus sikeresen befejeződik, . Legyen annak a valószínűsége, hogy az algoritmus sikeres lesz a rekurzió szintjén . Akkor valóban , ha és . Ebből következik, hogy hol van a rekurziós mélység.
Az algoritmus egyszeri újraindítása után megkapjuk a végrehajtási időt és a hiba valószínűségét .