Kargers algoritm | |
---|---|
Grafen och dess två snitt. Det röda snittet korsar tre kanter och det gröna snittet två. Det senare är en av de minimala snitten i denna graf. | |
Döpt efter | David Karger [d] |
ändamål | hitta det minsta snittet i en graf |
Datastruktur | Graf |
Snittid | |
Minneskostnad | - |
Kargers algoritm - inom datavetenskap och grafteori är en probabilistisk algoritm som låter dig hitta minimisnittet för en sammankopplad graf . Algoritm uppfann av David Karger och publicerades 1993 [1] .
Idén med algoritmen är baserad på kantkontraktion i en oriktad graf. Under kantkontraktion slås två hörn samman till en, vilket minskar antalet grafhörn med en. Alla kanter på de sammandragna hörnen är anslutna till den nybildade vertexen, vilket genererar en multigraf . Kargers algoritm väljer iterativt slumpmässiga kanter och utför operationen tills två hörn återstår, som är ett snitt av den ursprungliga grafen. Om algoritmen upprepas tillräckligt många gånger, kan minimisnittet hittas med hög sannolikhet.
Huvuduppgiften är att hitta flaskhalsar i olika nätverk. Exempel:
Den grundläggande operationen av Kargers algoritm är en form av kantkontraktion . För att utföra den här operationen på en godtycklig kant slås grafens hörn och samman till en . Om en vertex tas bort ersätts varje vykant med en vykant . Slingorna tas bort, och efter denna operation innehåller grafen inga slingor. Kostnadsfunktionen omdefinieras enligt följande: .
Algoritmen är ett lika sannolikt val av en slumpmässig tillgänglig kant och en förening av hörn enligt den beskrivna operationen. Resultatet av algoritmen är ett par hörn, vars uppsättning kanter är en sektion av grafen. Detta snitt kanske inte är minimalt, men sannolikheten att detta snitt är minimalt är betydligt större än för ett slumpmässigt valt snitt.
Lemma 1. .
Bevis. Observera att varje inskärning motsvarar en inskärning . Låt , och . Då är följande skillnader giltiga: , (förutsatt att ) och . Alltså .
Lemma 2. Sannolikheten att resultatet av algoritmen är det minsta snittet är större än eller lika med .
Bevis. Låt vara den -: e sammandragna kanten förutsatt att . Vidare, låt och vara graferna efter den -e sammandragningen, och vara vilket minsta snitt av grafen som helst . Då är följande sant:
Observera att sannolikheten för att inte hitta det minsta snittet med upprepningar är . Således är det möjligt att godtyckligt minska sannolikheten för ett fel, men detta kommer att öka exekveringstiden för algoritmen. För felsannolikhetskonstanten räcker det att köra algoritmen en gång och exekveringstiden ökar till . När den konstanta felsannolikheten har uppnåtts kommer den att minska exponentiellt som en funktion av . Hittills har de möjliga minsta nedskärningarna genererats av algoritmen oberoende av varje anrop, men resultaten från de första kantsammanslagningarna kan användas för många körningar. Tanken med Karger-Stein-algoritmen är att identifiera två kontraktionskandidater varje iteration och fortsätta Karger-algoritmen rekursivt för var och en av dem:
Sats. Karger-Stein-algoritmen har tidskomplexitet .
Bevis. Följande förenklade rekursiva ekvation beskriver körtiden för algoritmen: för och för . Rekursionsdjupet är , eftersom storleken på indata minskas med ett konstant antal gånger. Låt på nivån av rekursion . Observera att på rekursionsnivån är det nödvändigt att köra algoritmen en gång och storleken på indatagrafen för varje rekursivt anrop är . Sålunda är exekveringstiden för varje rekursivt anrop , och exekveringstiden som krävs inom rekursionsdjupet är . Den totala exekveringstiden är .
Lemma. .
Bevis.
Sats. Algoritmen beräknar det minsta snittet med sannolikhet .
Bevis. Låta vara det minsta snittet i grafen och . Då är sannolikheten att den kommer att bevaras efter sammandragningar lika med minimum:
Sannolikheten att eller har samma minsta snitt som och är minst . Karger-Stein-algoritmen kommer endast att lyckas i två fall: om eller innehålla en minimistorlek , och det återkommande anropet av algoritmen lyckas. Låt sannolikheten att algoritmen är framgångsrik för grafen . Då är sannolikheten att algoritmen kommer att slutföras framgångsrikt . Låt vara sannolikheten att algoritmen är framgångsrik på rekursionsnivån . Då verkligen om och . Det följer att , var är rekursionsdjupet.
Efter att ha startat om algoritmen en gång får vi exekveringstiden och felsannolikheten .