Kargerův algoritmus | |
---|---|
| |
Pojmenoval podle | David Karger [d] |
účel | nalezení nejmenšího řezu grafu |
Datová struktura | graf |
Průměrný čas | |
Náklady na paměť | - |
Kargerův algoritmus - v informatice a teorii grafů je pravděpodobnostní algoritmus , který vám umožňuje najít minimální řez spojeného grafu . Algoritmus vynalezený Davidem Kargerem a publikováno v roce 1993 [1] .
Myšlenka algoritmu je založena na kontrakci hran v neorientovaném grafu. Při kontrakci hrany se dva vrcholy spojí do jednoho, čímž se počet vrcholů grafu sníží o jeden. Všechny hrany kontrahovaných vrcholů jsou spojeny s nově vytvořeným vrcholem a generují multigraf . Kargerův algoritmus iterativně vybírá náhodné hrany a provádí operaci, dokud nezůstanou dva vrcholy, které jsou výřezem z původního grafu. Pokud se algoritmus opakuje dostatečně často, pak lze s vysokou pravděpodobností nalézt minimální řez.
Hlavním úkolem je najít úzká místa v různých sítích. Příklady:
Základní operací Kargerova algoritmu je forma zkracování hran . Chcete-li provést tuto operaci na libovolné hraně , jsou vrcholy grafu a sloučeny do jednoho . Pokud je vrchol odstraněn , pak je každá hrana pohledu nahrazena hranou pohledu . Smyčky jsou odstraněny a po této operaci graf neobsahuje žádné smyčky. Nákladová funkce je nově definována následovně: .
Algoritmus je ekvipravděpodobná volba náhodné dostupné hrany a sjednocení vrcholů podle popsané operace. Výsledkem algoritmu je dvojice vrcholů, množina hran mezi nimiž je výřez grafu. Tento řez nemusí být minimální, ale pravděpodobnost, že tento řez je minimální, je výrazně větší než u náhodně vybraného řezu.
Lemma 1 .
Důkaz. Všimněte si, že každý střih odpovídá střihu . Nechte , a . Pak platí tyto rozdíly: , (za předpokladu, že ) a . Tedy .
Lemma 2. Pravděpodobnost, že výsledkem algoritmu je nejmenší řez, je větší nebo rovna .
Důkaz. Nechť je -tá stažená hrana za předpokladu, že . Dále nechť a být grafy po -té kontrakci a být jakýmkoli nejmenším řezem grafu . Pak platí následující:
Všimněte si, že pravděpodobnost, že nenajdete nejmenší řez s opakováním, je . Je tedy možné libovolně snížit pravděpodobnost chyby, ale prodlouží se tím doba provádění algoritmu. Pro konstantu pravděpodobnosti chyby stačí spustit algoritmus jednou a doba provádění se prodlouží na . Jakmile je dosaženo konstantní pravděpodobnosti chyby, bude exponenciálně klesat jako funkce . Doposud byly možné nejmenší řezy generovány algoritmem nezávisle na každém volání, ale výsledky sloučení první hrany lze použít pro mnoho běhů. Myšlenkou algoritmu Karger-Stein je identifikovat dva kandidáty na kontrakci v každé iteraci a rekurzivně pokračovat v Kargerově algoritmu pro každého z nich:
Teorém. Algoritmus Karger-Stein má časovou složitost .
Důkaz. Následující zjednodušená rekurzivní rovnice popisuje dobu běhu algoritmu: for a for . Hloubka rekurze je , protože velikost vstupních dat je redukována konstantním počtem opakování. Nechť na úrovni rekurze . Všimněte si, že na úrovni rekurze je nutné spustit algoritmus jednou a velikost vstupního grafu pro každé rekurzivní volání je . Doba provedení každého rekurzivního volání je tedy , a doba provedení požadovaná v rámci hloubky rekurze je . Celková doba provedení je .
Lemma. .
Důkaz.
Teorém. Algoritmus vypočítá nejmenší řez s pravděpodobností .
Důkaz. Dovolit být nejmenší řez v grafu a . Pravděpodobnost, že bude zachována i po kontrakcích, je pak rovna minimu:
Pravděpodobnost, že nebo bude mít stejný nejmenší řez jako a je alespoň . Algoritmus Karger-Stein uspěje pouze ve dvou případech: pokud nebo obsahuje minimální velikost řezu a rekuzivní volání algoritmu je úspěšné. Nechť pravděpodobnost, že algoritmus je úspěšný pro graf . Pak je pravděpodobnost, že algoritmus bude úspěšně dokončen, . Nechť je pravděpodobnost, že je algoritmus úspěšný na úrovni rekurze . Pak skutečně pokud a . Z toho vyplývá, že , kde je hloubka rekurze.
Po restartování algoritmu jednou dostaneme čas provedení a pravděpodobnost chyby .