Salta al contenuto
Note per Studenti Esercizio - Contrazione di Karger a mano su un grafo con cinque vertici

Esercizio - Contrazione di Karger a mano su un grafo con cinque vertici

Testo. Il grafo GG ha vertici 1,2,3,4,51,2,3,4,5 e archi 12, 13, 23, 24, 34, 4512,\,13,\,23,\,24,\,34,\,45.

Grafico interattivo: Il grafo G: l'arco 4-5 (evidenziato) è l'unico taglio minimo

  1. Trovare la dimensione kk del taglio minimo e il limite inferiore di Karger sulla probabilità di trovarlo.
  2. Eseguire l'algoritmo con le scelte 2424, poi un arco fra il supervertice e 33, poi un arco fra 11 e il supervertice: descrivere i multigrafi e il taglio finale.
  3. Calcolare la probabilità esatta che una esecuzione trovi il taglio minimo, distinguendo il primo arco scelto.
  4. Quante esecuzioni indipendenti per fallire con probabilità ≤1%\le1\%: col valore esatto e col limite di Karger?

Teoria: Taglio minimo randomizzato - algoritmo di KargerTaglio minimo globale di un multigrafo con n vertici. Algoritmo di Karger: finché restano più di 2 vertici, scegliere un arco uniformemente tra i rimasti e contrarlo (fondere gli estremi, tenere i paralleli, togliere i cappi); gli archi tra i due supervertici finali sono un taglio. Un taglio minimo C di k archi sopravvive se nessun suo arco viene contratto; con n_i vertici il grado minimo è ≥ k, quindi |E_i| ≥ n_i k/2 e Pr[contrarre un arco di C] ≤ 2/n_i; il prodotto telescopico dà Pr[output = C] ≥ 2/(n(n-1)) = 1/C(n,2). Con t = C(n,2) ln(1/δ) ripetizioni indipendenti il fallimento è ≤ δ. Corollario: un grafo ha al più C(n,2) tagli minimi (stretto per il ciclo). Karger-Stein: contrarre fino a n/√2+1 vertici (sopravvive con prob ≥ 1/2) e ricorrere due volte, T(n) = O(n² log n), successo Ω(1/log n).Taglio minimo randomizzato - algoritmo di Karger →.

Soluzione

Punto 1. Il vertice 55 ha grado 11, quindi {45}\{45\} è un taglio di dimensione 11 e k=1k=1 (il grafo è connesso: k≥1k\ge1). È l'unico taglio minimo: ogni altro taglio ha almeno 22 archi, perché il sottografo su {1,2,3,4}\{1,2,3,4\} ha taglio minimo 22 (ai vertici 11 e 44 arrivano due archi). Con n=5n=5 il limite è 25⋅4=110\frac2{5\cdot4}=\frac1{10}.

Punto 2. Scelte: 2424, poi w3w3, poi 1V1V.

  1. Contrae 2424: nasce w={2,4}w=\{2,4\}. Gli archi diventano 12→1w12\to1w, 1313, 23→w323\to w3, 34→3w34\to3w, 45→w545\to w5: 55 archi (1w1w, 1313, due paralleli w3w3, w5w5), 44 vertici {1,w,3,5}\{1,w,3,5\}.
  2. Contrae un arco w3w3: nasce V={2,3,4}V=\{2,3,4\} e l'altro w3w3 diventa un cappo, eliminato. Archi: 1V1V (da 1w1w), 1V1V (da 1313), V5V5 (da w5w5): 33 archi, 33 vertici {1,V,5}\{1,V,5\}.
  3. Contrae uno dei due 1V1V: nasce U={1,2,3,4}U=\{1,2,3,4\}; l'altro diventa un cappo. Resta il solo arco U5U5.

Il taglio finale è {U,5}\{U,5\}, cioè l'arco 4545, di dimensione 11: il taglio minimo è trovato.

Punto 3. Il primo arco ha probabilità 1/61/6 ciascuno; se è 4545 il taglio è perso. Si calcola la probabilità ss di non scegliere mai 4545 in ciascun caso.

  • Primo arco 1212 (o 1313, per simmetria 2↔32\leftrightarrow3). Nasce ww; archi: w3w3 doppio, w4w4, 3434, 4545: 55 archi. Si evita 4545 con 4/54/5:

    • w3w3 (2/52/5): nasce {1,2,3}\{1,2,3\} con archi →4\to4 doppi e 4545: 33 archi, evita 4545 con 2/32/3;
    • w4w4 (1/51/5): nasce {1,2,4}\{1,2,4\} con archi →3\to3 tripli e →5\to5: 44 archi, evita con 3/43/4;
    • 3434 (1/51/5): nasce {3,4}\{3,4\} con archi w{3,4}w\{3,4\} tripli e {3,4}5\{3,4\}5: 44 archi, evita con 3/43/4.

    s=25⋅23+15⋅34+15⋅34=415+310=1730s=\frac25\cdot\frac23+\frac15\cdot\frac34+\frac15\cdot\frac34=\frac4{15}+\frac3{10}=\frac{17}{30}.

  • Primo arco 2323. Nasce w={2,3}w=\{2,3\}; archi: 1w1w doppio, w4w4 doppio, 4545: 55 archi. Con 1w1w (2/52/5) o w4w4 (2/52/5) si ottengono 33 archi (due paralleli e 4545) e si evita 4545 con 2/32/3: s=45⋅23=815s=\frac45\cdot\frac23=\frac8{15}.

  • Primo arco 2424 (o 3434, per simmetria). Nasce w={2,4}w=\{2,4\}; archi: 1w1w, 1313, w3w3 doppio, w5w5: 55 archi, da cui evitare w5w5 (4/54/5 in tutto):

    • 1w1w (1/51/5): {1,w}\{1,w\} con →3\to3 tripli e →5\to5: 3/43/4;
    • 1313 (1/51/5): {1,3}\{1,3\} con →w\to w tripli e w5w5: 3/43/4;
    • w3w3 (2/52/5): {w,3}\{w,3\} con →1\to1 doppi e →5\to5: 2/32/3.

    s=15⋅34+15⋅34+25⋅23=310+415=1730s=\frac15\cdot\frac34+\frac15\cdot\frac34+\frac25\cdot\frac23=\frac3{10}+\frac4{15}=\frac{17}{30}.

Probabilità totale: Pr⁡[successo]=16(1730+1730⏟12, 13+815+1730+1730⏟24, 34+0)=16⋅68+1630=84180=715=0,467.\Pr[\text{successo}]=\frac16\Big(\underbrace{\tfrac{17}{30}+\tfrac{17}{30}}_{12,\,13}+\tfrac8{15}+\underbrace{\tfrac{17}{30}+\tfrac{17}{30}}_{24,\,34}+0\Big)=\frac16\cdot\frac{68+16}{30}=\frac{84}{180}=\frac7{15}=0{,}467 . Il limite 1/101/10 è molto pessimistico.

Punto 4. Fallimento per esecuzione 1−715=8151-\frac7{15}=\frac8{15}. Serve (8/15)t≤0,01(8/15)^t\le0{,}01: t≥ln⁡0,01ln⁡(8/15)=−4,605−0,629=7,33t\ge\frac{\ln0{,}01}{\ln(8/15)}=\frac{-4{,}605}{-0{,}629}=7{,}33, quindi t=8t=8. Con il limite di Karger: t=⌈(52)ln⁡100⌉=⌈46,05⌉=47t=\lceil\binom52\ln100\rceil=\lceil46{,}05\rceil=47.

Risultati: k=1k=1 (arco 4545); limite 0,10{,}1; probabilità esatta 7/157/15; 88 esecuzioni (esatto) o 4747 (limite).

python
import random
G = [(1, 2), (1, 3), (2, 3), (2, 4), (3, 4), (4, 5)]
def karger(archi, vertici):
    padre = {v: v for v in vertici}
    def trova(x):
        while padre[x] != x: x = padre[x]
        return x
    n = len(vertici)
    while n > 2:
        u, v = random.choice(archi)
        a, b = trova(u), trova(v)
        if a != b: padre[a] = b; n -= 1
    return sum(trova(u) != trova(v) for u, v in archi)
N = 200000
print(sum(karger(G, range(1, 6)) == 1 for _ in range(N)) / N, 7 / 15)    # 0.467

Versione ripasso

Teoria collegata