Taglio minimo randomizzato - algoritmo di Karger
In questa pagina 6
Metodo: Monte Carlo a errore unilaterale ripetuto (Algoritmi randomizzati - Monte Carlo, Las Vegas e amplificazioneUn algoritmo randomizzato usa bit casuali indipendenti; la probabilità è sulle scelte dell'algoritmo, mai sull'input (garanzia per ogni input). Las Vegas: sempre corretto, tempo aleatorio (conta il tempo atteso). Monte Carlo: tempo fisso, risposta sbagliata con probabilità limitata; errore unilaterale (RP: accetta solo se x sta nel linguaggio, accetta con prob almeno 1/2) o bilaterale (BPP: giusto con prob almeno 2/3). ZPP = RP ∩ co-RP = Las Vegas con tempo atteso polinomiale. Amplificazione: unilaterale, k ripetizioni indipendenti, errore (1-p)^k ≤ e^(-pk), serve k ≥ ln(1/ε)/p; bilaterale, voto di maggioranza su k esecuzioni, errore binomiale esatto, esponenziale in k (Chernoff, e^(-k/18) per p=2/3) mentre Chebyshev dà solo 8/k. Las Vegas -> Monte Carlo: interrompere a c volte il tempo atteso (Markov, errore ≤ 1/c). Monte Carlo -> Las Vegas: solo se la risposta si verifica in fretta. Esempio: Miller-Rabin, errore ≤ 1/4 per esecuzione.Algoritmi randomizzati - Monte Carlo, Las Vegas e amplificazione →), con prodotto di probabilità condizionate (Probabilità condizionataLa probabilità di A sapendo che si è verificato B è P(A ∣ B) = P(A ∩ B) / P(B), con P(B) > 0; è una nuova misura di probabilità, e da essa seguono la regola del prodotto e la regola della catena.Probabilità condizionata →) e union bound (Union bound e verifica randomizzata - identità polinomiali e prodotti di matriciSpazi discreti richiamati; inclusione-esclusione (con le troncate di Bonferroni) e union bound Pr[unione] ≤ somma, valido senza indipendenza e stretto quando gli eventi sono rari (collisioni: C(n,2)/m). Principio delle decisioni differite: si fissa tutto tranne una scelta casuale e si limita la probabilità su quella. Lemma di Schwartz-Zippel: un polinomio non nullo di grado totale d, valutato in un punto di S^n scelto uniformemente, si annulla con prob ≤ d/|S| (induzione sul numero di variabili); test di identità polinomiale con errore unilaterale, ripetuto (d/|S|)^k. Freivalds: per verificare AB=C si controlla A(Br)=Cr con r in {0,1}^n in tempo O(n^2), errore ≤ 1/2 (stretto), 2^-k con k prove. Fingerprint: due stringhe di n bit si confrontano con a mod p per un primo casuale p ≤ M, errore ≤ n/π(M).Union bound e verifica randomizzata - identità polinomiali e prodotti di matrici →). Grafi: Grafi - definizioni e proprietàGrafo G=(V,E) diretto e non diretto, grafo semplice e pesato; incidenza, adiacenza, grado; cammini, cicli, sottografi, grafi connessi e componenti connesse; alberi liberi, foreste, spanning tree e spanning forest; proprietà con dimostrazioni (somma dei gradi = 2m, m <= n(n-1)/2, alberi m = n-1, connessi m >= n-1, foreste m <= n-1).Grafi - definizioni e proprietà →, Rappresentazione dei grafiStrutture di base (lista dei vertici LV, lista degli archi LE), liste di adiacenza, matrice di adiacenza; operazioni incidentEdges, opposite, areAdjacent; spazio e tempi a confronto; esempio con un grafo di 5 vertici.Rappresentazione dei grafi →.
1. Il problema
Sia un multigrafo non orientato connesso (sono ammessi archi paralleli) con vertici. Un taglio è una partizione con e ; la sua dimensione è il numero di archi con un estremo per parte. Il taglio minimo (globale, senza sorgente e pozzo) è quello di dimensione minima : indica quanti archi bisogna togliere per sconnettere il grafo. Si può calcolare con algoritmi di flusso massimo; l'algoritmo di Karger ottiene lo stesso risultato con un'idea molto più semplice.
2. L'algoritmo di contrazione
Definizione. Contrarre un arco significa fondere e in un unico supervertice: gli archi paralleli a diventano cappi e si eliminano, gli altri archi restano (anche se diventano paralleli tra loro). Il numero di vertici scende di .
Algoritmo (Karger). Finché il multigrafo ha più di vertici: scegliere un arco uniformemente tra gli archi rimasti e contrarlo. Restituire gli archi che collegano i due supervertici finali.
Ogni supervertice rappresenta un insieme di vertici originali; al termine i due supervertici sono una partizione di e gli archi rimasti sono esattamente gli archi di che attraversano il taglio. L'algoritmo restituisce sempre un taglio valido (quindi di dimensione ): è un Monte Carlo a errore unilaterale, che sbaglia solo restituendo un taglio non minimo. Con la matrice di adiacenza una contrazione costa e l'intera esecuzione .
Esempio. Due triangoli collegati da un ponte: vertici , archi , , , , , e il ponte . Il taglio minimo è , di dimensione , con .
Grafico interattivo: Due triangoli collegati dal ponte 3-4 (evidenziato): il taglio minimo ha dimensione 1
Esecuzione che riesce. Le scelte casuali sono , poi , poi , poi :
- archi, vertici. Si contrae : nasce ; e diventano due archi paralleli . Restano archi.
- Si contrae uno dei due archi paralleli (per esempio ): nasce e l'altro parallelo diventa un cappo, eliminato. Restano archi: il ponte (), , , .
- Si contrae : nasce ; restano () ed (): archi.
- Si contrae : nasce e diventa un cappo. Resta il solo arco tra e : taglio di dimensione , il minimo.
Esecuzione che fallisce. Se il primo arco scelto è il ponte (probabilità ), le due metà si fondono e ogni taglio che si potrà ottenere ha almeno archi: il taglio minimo è perso.
3. Probabilità di successo
Teorema. Sia un taglio minimo di e . L'algoritmo restituisce proprio con probabilità
Dimostrazione. (1) Quando sopravvive. Gli archi tra le due parti di sono esattamente gli archi di . Se nessun arco di viene mai contratto, ogni contrazione fonde due vertici della stessa parte, quindi ogni supervertice sta tutto in una parte; alla fine i due supervertici coprono e le due parti sono non vuote, dunque sono proprio le due parti di e l'output è . Viceversa, se si contrae un arco di l'output non può essere . Quindi basta stimare la probabilità che ai passi si scelga un arco fuori da : sia l'evento «al passo non si sceglie un arco di ».
(2) Un passo. Si supponga che siano accaduti. Il multigrafo corrente ha vertici e è ancora un taglio di (con archi). Ogni taglio di è anche un taglio di con lo stesso numero di archi, quindi il taglio minimo di è ancora . Il grado di ogni supervertice è (gli archi uscenti da un supervertice formano un taglio), perciò Si sceglie un arco di con probabilità , quindi
(3) Prodotto. Per la regola del prodotto (Probabilità condizionataLa probabilità di A sapendo che si è verificato B è P(A ∣ B) = P(A ∩ B) / P(B), con P(B) > 0; è una nuova misura di probabilità, e da essa seguono la regola del prodotto e la regola della catena.Probabilità condizionata →) perché è un prodotto telescopico: restano a numeratore e a denominatore .
Sull'esempio dei due triangoli (, ) la dimostrazione si legge passo per passo. Il bound è ; nell'esecuzione sopra la probabilità effettiva di evitare il ponte in ciascun passo è , tutte più grandi dei fattori .
| passo | vertici | archi | fattore del bound | |
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| 4 |
Il valore esatto di successo per questo grafo, calcolato con Python enumerando tutte le sequenze di contrazioni con frazioni, è ; una simulazione con esecuzioni dà . Il bound è molto pessimistico, ma è valido per ogni grafo.
Il bound è stretto. Sul ciclo ogni contrazione dà un ciclo più corto e alla fine restano due archi paralleli: l'output ha sempre dimensione ed è sempre un taglio minimo. I tagli minimi sono le coppie di archi, in tutto, e per simmetria (gli archi sopravvissuti sono una coppia uniforme) ciascuno esce con probabilità esattamente . Con Python: dà , dà per ognuno dei tagli. Per il grafo completo (, quattro tagli minimi a vertice singolo) ognuno ha probabilità .
Corollario. Un grafo con vertici ha al più tagli minimi.
Dimostrazione. Gli eventi «l'output è » per tagli minimi distinti sono disgiunti, ciascuno ha probabilità e la somma non supera .
4. Ripetizioni
Un'esecuzione fallisce con probabilità . Si eseguono esecuzioni indipendenti e si tiene il taglio più piccolo: fallisce solo se falliscono tutte, Con il fallimento è (esattamente per , per ); con è ; in generale garantisce fallimento . Per : servono esecuzioni, servono , servono . Per il grafo dei due triangoli bastano ripetizioni, perché . Il costo totale con la matrice di adiacenza è .
import random
def karger(archi, n):
"""Una esecuzione. archi: lista di coppie (u, v) con vertici 0..n-1. Restituisce la dimensione del taglio."""
padre = list(range(n))
def trova(x):
while padre[x] != x:
padre[x] = padre[padre[x]]
x = padre[x]
return x
vertici = n
while vertici > 2:
u, v = random.choice(archi) # arco uniforme fra tutti...
a, b = trova(u), trova(v)
if a != b: # ...scartando i cappi equivale a scegliere fra i non-cappi
padre[a] = b
vertici -= 1
return sum(1 for u, v in archi if trova(u) != trova(v))
def taglio_minimo(archi, n, t):
return min(karger(archi, n) for _ in range(t))
due_triangoli = [(0, 1), (0, 2), (1, 2), (3, 4), (3, 5), (4, 5), (2, 3)]
N = 100000
print(sum(karger(due_triangoli, 6) == 1 for _ in range(N)) / N) # circa 13/35 = 0.371
print(taglio_minimo(due_triangoli, 6, 10)) # 1 con prob >= 0.995. Karger-Stein in breve
Le prime contrazioni sono sicure (il rischio è concentrato alla fine, dove è piccolo): contrarre da a vertici preserva con probabilità che per è (per : e ). L'algoritmo di Karger-Stein contrae fino a vertici due volte in modo indipendente e risolve ricorsivamente le due copie, tenendo il minimo; sotto vertici si fa tutto per forza bruta.
La probabilità di successo soddisfa . Con la probabilità a profondità () si dimostra per induzione : equivale a . La profondità è , quindi il successo è . Il tempo soddisfa , cioè (teorema dell'esperto: , caso centrale; Algoritmi ricorsiviAlgoritmi ricorsivi come induzione eseguita; albero della ricorsione e record di attivazione nello stack; esempi ReverseArray, LinearSum, Power in tempo logaritmico, Fibonacci ricorsivo (esponenziale) e con memoizzazione; analisi della complessità con l'albero della ricorsione e correttezza per induzione.Algoritmi ricorsivi →). Ripetendo volte si ottiene il taglio minimo con alta probabilità in , molto meglio dei di Karger semplice.
Domande d'esame
- Dimostra che Karger trova un dato taglio minimo con probabilità . Vedi il teorema della sezione 3: grado minimo , , fattori , prodotto telescopico.
- Dimostra che un grafo ha al più tagli minimi. Eventi disgiunti «output », ciascuno con probabilità , somma . Il ciclo raggiunge il limite.
- Quante esecuzioni per un grafo con vertici se si vuole fallire con probabilità ? e , quindi .
- Perché ogni supervertice ha grado almeno ? Gli archi uscenti da un supervertice separano quel supervertice dal resto: sono un taglio di , quindi sono almeno .
Versione ripasso
- Problema: multigrafo connesso con vertici, taglio globale minimo di dimensione . Contrazione di : fusione in un supervertice, paralleli tenuti, cappi eliminati.
- Algoritmo: finché ci sono più di vertici, contrarre un arco scelto uniformemente fra i rimasti; output: gli archi tra i due supervertici (taglio sempre valido, ). Con matrice di adiacenza (Grafi - definizioni e proprietàGrafo G=(V,E) diretto e non diretto, grafo semplice e pesato; incidenza, adiacenza, grado; cammini, cicli, sottografi, grafi connessi e componenti connesse; alberi liberi, foreste, spanning tree e spanning forest; proprietà con dimostrazioni (somma dei gradi = 2m, m <= n(n-1)/2, alberi m = n-1, connessi m >= n-1, foreste m <= n-1).Grafi - definizioni e proprietà →).
- Teorema: per un taglio minimo , . Prova: sopravvive sse nessun suo arco è contratto; con vertici ogni grado è , quindi e ; telescopico (Probabilità condizionataLa probabilità di A sapendo che si è verificato B è P(A ∣ B) = P(A ∩ B) / P(B), con P(B) > 0; è una nuova misura di probabilità, e da essa seguono la regola del prodotto e la regola della catena.Probabilità condizionata →).
- Esempio, due triangoli col ponte : scelte danno il taglio di dimensione ; se il primo arco è (prob ) il minimo è perso. Evitare il ponte: , fattori del bound (prodotto ). Successo esatto (simulazione ).
- Stretto: sul ciclo ogni taglio minimo (coppia di archi) esce con prob esattamente ; : per ciascuno dei tagli.
- Corollario: al più tagli minimi (eventi disgiunti, somma ).
- Ripetizioni: prove indipendenti, fallimento ; per . Con : : ; : ; : . Due triangoli: prove ().
- Karger-Stein: contrarre a (sopravvive con prob ), due copie ricorsive indipendenti; , successo , in totale (Algoritmi ricorsiviAlgoritmi ricorsivi come induzione eseguita; albero della ricorsione e record di attivazione nello stack; esempi ReverseArray, LinearSum, Power in tempo logaritmico, Fibonacci ricorsivo (esponenziale) e con memoizzazione; analisi della complessità con l'albero della ricorsione e correttezza per induzione.Algoritmi ricorsivi →).
- Perché ogni grado è : gli archi uscenti da un supervertice sono un taglio, quindi almeno ; di conseguenza il grafo corrente ha almeno archi.
- Perché sopravvive: nessun arco di contratto significa che ogni supervertice sta in una sola parte; due supervertici finali, parti non vuote, quindi sono le due parti di .
- Due triangoli, tabella del bound: e (archi); probabilità di evitare contro i fattori che moltiplicati danno .
- Sopravvivenza fino a vertici: ; per , : . Induzione di Karger-Stein: perché .
- Errori tipici: scegliere un vertice invece di un arco; non eliminare i cappi (l'arco scelto non è uniforme sui non-cappi); riutilizzare gli stessi bit nelle ripetizioni; dire che il bound è la probabilità vera.