Kargers algoritme | |
---|---|
Grafen og dens to snit. Det røde snit krydser tre kanter, og det grønne snit to. Sidstnævnte er en af de minimale udskæringer i denne graf. | |
Opkaldt efter | David Karger [d] |
formål | at finde det mindste snit af en graf |
Datastruktur | kurve |
Gennemsnitlig tid | |
Hukommelsesomkostninger | - |
Kargers algoritme inden for datalogi og grafteori er en sandsynlighedsalgoritme , der giver dig mulighed for at finde minimumsskæringen af en forbundet graf . Algoritme opfundet af David Karger og udgivet i 1993 [1] .
Ideen med algoritmen er baseret på kantkontraktion i en urettet graf. Under kantkontraktion slås to hjørner sammen til én, hvilket reducerer antallet af grafhjørner med en. Alle kanter af de sammentrukne toppunkter er forbundet med det nydannede toppunkt, hvilket genererer en multigraf . Kargers algoritme udvælger iterativt tilfældige kanter og udfører operationen, indtil der er to hjørner tilbage, som er et snit af den originale graf. Hvis algoritmen gentages nok gange, kan minimumsskæringen findes med stor sandsynlighed.
Hovedopgaven er at finde flaskehalse i forskellige netværk. Eksempler:
Den grundlæggende operation af Kargers algoritme er en form for kantkontraktion . For at udføre denne operation på en vilkårlig kant , flettes hjørnerne af grafen og sammen til én . Hvis et toppunkt fjernes , erstattes hver visningskant af en visningskant . Sløjferne fjernes, og efter denne operation indeholder grafen ingen løkker. Omkostningsfunktionen omdefineres som følger: .
Algoritmen er et lige sandsynligt valg af en tilfældig tilgængelig kant og en forening af hjørner i henhold til den beskrevne operation. Resultatet af algoritmen er et par knudepunkter, hvorimellem sættet af kanter er et udsnit af grafen. Dette snit er måske ikke minimalt, men sandsynligheden for, at dette snit er minimalt, er betydeligt større end for et tilfældigt udvalgt snit.
Lemma 1. .
Bevis. Bemærk, at hvert snit svarer til et snit i . Lad , og . Så er følgende forskelle gyldige: , (forudsat at ) og . Således .
Lemma 2. Sandsynligheden for, at resultatet af algoritmen er det mindste snit, er større end eller lig med .
Bevis. Lad være den -te kontraheret kant forudsat at . Yderligere, lad og være graferne efter den -. kontraktion, og vær ethvert mindste snit af grafen . Så er følgende sandt:
Bemærk, at sandsynligheden for ikke at finde det mindste snit med gentagelser er . Det er således muligt vilkårligt at reducere sandsynligheden for en fejl, men dette vil øge algoritmens eksekveringstid. For fejlsandsynlighedskonstanten er det nok at køre algoritmen én gang, og udførelsestiden vil stige til . Når den konstante fejlsandsynlighed er nået, vil den falde eksponentielt som funktion af . Indtil videre er de mulige mindste snit blevet genereret af algoritmen uafhængigt af hvert kald, men resultaterne af de første kantfletninger kan bruges til mange kørsler. Ideen med Karger-Stein-algoritmen er at identificere to kontraktionskandidater hver iteration og fortsætte Karger-algoritmen rekursivt for hver af dem:
Sætning. Karger-Stein-algoritmen har tidskompleksitet .
Bevis. Følgende forenklede rekursive ligning beskriver køretiden for algoritmen: for og for . Rekursionsdybden er , da størrelsen af inputdata reduceres med et konstant antal gange. Lad på niveauet af rekursion . Bemærk, at på rekursionsniveau er det nødvendigt at køre algoritmen én gang, og størrelsen på inputgrafen for hvert rekursivt kald er . Således er eksekveringstiden for hvert rekursivt opkald , og den nødvendige eksekveringstid inden for rekursionsdybden er . Den samlede udførelsestid er .
Lemma. .
Bevis.
Sætning. Algoritmen beregner det mindste snit med sandsynlighed .
Bevis. Lad være det mindste snit i grafen og . Så er sandsynligheden for, at den vil blive bevaret efter sammentrækninger lig med minimum:
Sandsynligheden for at eller har samme mindste snit som og er mindst . Karger-Stein-algoritmen vil kun lykkes i to tilfælde: hvis eller indeholder en minimumsstørrelse, og det rekusive kald af algoritmen er vellykket. Lad sandsynligheden for, at algoritmen er vellykket for grafen . Så er sandsynligheden for, at algoritmen vil fuldføre med succes . Lad være sandsynligheden for, at algoritmen er vellykket på rekursionsniveauet . Så faktisk hvis og . Det følger heraf , hvor er rekursionsdybden.
Efter at have genstartet algoritmen én gang, får vi udførelsestiden og fejlsandsynligheden .