Esercizio - Passeggiata aleatoria su un grafo con triangolo e coda - stazionaria, raggiungimento e copertura
Teoria: Passeggiate aleatorie - rovina del giocatore, 2-SAT e grafiPasseggiata sulla retta con barriere (rovina del giocatore): da i con N come traguardo, P(vittoria)=i/N e durata attesa i(N-i) se il gioco è equo; con p diverso da 1/2, P=(1-r^i)/(1-r^N), r=q/p. Il 2-SAT si risolve con una passeggiata randomizzata (flip di una variabile di una clausola violata): E[T] ≤ n^2 passi, quindi 2n^2 passi bastano con errore ≤ 1/2 (3-SAT: deriva contraria, esponenziale). Sul grafo la passeggiata ha π_v=d(v)/2m, tempo di ritorno 2m/d(v), tempo di copertura < 4m(n-1), da cui la connettività s-t in spazio logaritmico; PageRank è la stazionaria di una passeggiata con teletrasporto.Passeggiate aleatorie - rovina del giocatore, 2-SAT e grafi →; grafi in 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à →.
Testo. Il grafo ha vertici e archi (un triangolo con una coda di due archi attaccata al vertice ). Una passeggiata aleatoria sta in un vertice e passa a un vicino scelto uniformemente.
- Calcolare la distribuzione stazionaria e i tempi medi di ritorno. La passeggiata converge a da qualunque vertice?
- Calcolare i tempi medi di raggiungimento di da e i tempi per raggiungere .
- Verificare l'identità del tempo di pendolarismo ( resistenza efficace con archi da ).
- Calcolare il tempo di copertura da ciascun vertice e confrontarlo con il limite della teoria.
- Per un grafo con vertici, quanti passi e quanti bit usa l'algoritmo di connettività s-t?
Soluzione
1. I gradi sono e (). Quindi : Il grafo contiene il triangolo (ciclo di lunghezza , dispari), quindi non è bipartito e la passeggiata è aperiodica: converge a da qualunque vertice. Se invece si togliesse l'arco il grafo diventerebbe un albero, che è bipartito (periodo ): non convergerebbe, mentre resterebbe valida come media nel tempo.
2. Sia con . Condizionando al primo passo: Sottraendo le ultime due si ottiene , cioè (simmetria); allora , . Nella seconda: , quindi , . Nella prima: , , . Dunque Verso (con ): , , , . Da si ha ; poi , . Quindi Il percorso verso la foglia è molto più lungo di quello inverso ( contro ): arrivare in fondo a un vicolo cieco costa molto, uscirne è facile. Controllo con il lemma : l'unico vicino di è e ✓.
3. . La resistenza efficace tra e : tra e ci sono due percorsi in parallelo, l'arco diretto () e il percorso (), che danno ; poi si sommano in serie gli archi e : . Quindi ✓.
4. Il tempo di copertura da un vertice si calcola con una catena sugli stati (insieme dei vertici visitati, vertice corrente): stati al massimo; la soluzione del sistema lineare (frazioni esatte) è:
| partenza | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| tempo di copertura |
Quindi , molto sotto il limite (e sotto di quello raffinato). Una simulazione di prove da dà .
5. Con il numero di passi è . Serve il vertice corrente ( bit) e un contatore fino a ( bit): bit in tutto, contro almeno bit (un bit per vertice) di una visita in ampiezza o in profondità (Visite di grafi - BFS e DFSVisite in ampiezza (BFS) e in profondità (DFS) come design pattern; etichette discovery, cross e back edge; BFS tree e distanze; complessità Theta(n+m) con liste di adiacenza; applicazioni (connettività, componenti, spanning tree, cammini minimi non pesati, cicli, vertici a distanza al più d); esempio svolto su un grafo di 7 vertici.Visite di grafi - BFS e DFS →). La probabilità di non raggiungere se è connesso è (e si può abbassare con ripetizioni).
Codice di verifica
import random
import numpy as np
adj = {1: [2, 3], 2: [1, 3], 3: [1, 2, 4], 4: [3, 5], 5: [4]}
V = sorted(adj); n = len(V); m = sum(map(len, adj.values())) // 2
print("pi:", [len(adj[v]) / (2 * m) for v in V])
def raggiungimento(t):
idx = [v for v in V if v != t]
A = np.eye(len(idx))
for i, v in enumerate(idx):
for w in adj[v]:
if w != t: A[i, idx.index(w)] -= 1 / len(adj[v])
return dict(zip(idx, np.linalg.solve(A, np.ones(len(idx)))))
print("verso 5:", raggiungimento(5)); print("verso 1:", raggiungimento(1))
print("pendolarismo 1-5:", raggiungimento(5)[1] + raggiungimento(1)[5], " 80/3 =", 80 / 3)
# tempo di copertura esatto: stati (insieme visitato come bitmask, vertice corrente)
stati = [(vis, p) for vis in range(1, 2**n) for p in V if vis >> (p - 1) & 1]
ix = {s: i for i, s in enumerate(stati)}
A = np.eye(len(stati)); b = np.ones(len(stati))
for (vis, p), i in ix.items():
if vis == 2**n - 1:
b[i] = 0; continue
for w in adj[p]:
A[i, ix[(vis | 1 << (w - 1), w)]] -= 1 / len(adj[p])
sol = np.linalg.solve(A, b)
print("copertura da v:", [round(sol[ix[(1 << (v - 1), v)]], 4) for v in V])
rng = random.Random(1); tot = 0
for _ in range(40000):
x, vis, t = 1, {1}, 0
while len(vis) < n:
x = rng.choice(adj[x]); vis.add(x); t += 1
tot += t
print("simulazione da 1:", tot / 40000)Output (estratto): copertura da v: [19.0833, 19.0833, 18.9333, 15.6333, 10.3333], pendolarismo 1-5: 26.666..., simulazione intorno a .
Versione ripasso
Teoria: Passeggiate aleatorie - rovina del giocatore, 2-SAT e grafiPasseggiata sulla retta con barriere (rovina del giocatore): da i con N come traguardo, P(vittoria)=i/N e durata attesa i(N-i) se il gioco è equo; con p diverso da 1/2, P=(1-r^i)/(1-r^N), r=q/p. Il 2-SAT si risolve con una passeggiata randomizzata (flip di una variabile di una clausola violata): E[T] ≤ n^2 passi, quindi 2n^2 passi bastano con errore ≤ 1/2 (3-SAT: deriva contraria, esponenziale). Sul grafo la passeggiata ha π_v=d(v)/2m, tempo di ritorno 2m/d(v), tempo di copertura < 4m(n-1), da cui la connettività s-t in spazio logaritmico; PageRank è la stazionaria di una passeggiata con teletrasporto.Passeggiate aleatorie - rovina del giocatore, 2-SAT e 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à →.
- Grafo: archi , , gradi con . , ritorni . Il triangolo è un ciclo dispari non bipartito aperiodica, converge a da ogni vertice.
- Verso 5 (primo passo, ): , , . Sottraendo le equazioni di e : , poi , , : , , .
- Verso 1: da e : , , , . Lemma: .
- Pendolarismo: , con (arco in parallelo con , poi due archi in serie).
- Copertura esatta (stati insieme visitato, posizione): da e , da , da , da ; , contro i limiti e .
- s-t connettività con : passi; vertice corrente bit più contatore bit bit, contro bit di una visita BFS/DFS.
- Errori tipici: usare ; confondere con (non sono uguali); dimenticare la simmetria .