Esercizio - Insiemi indipendenti con alterazione e lemma locale di Lovász per k-SAT
Teoria: Metodo probabilistico - valore atteso, alterazioni e derandomizzazioneMetodo probabilistico: se un oggetto casuale ha una proprietà con probabilità positiva (o una variabile ha media mu, quindi qualche esito la raggiunge) allora l'oggetto esiste; taglio di almeno |E|/2, MAX-SAT con 7/8, limite inferiore di Ramsey R(k,k) > 2^(k/2), alterazioni (insiemi indipendenti, Ramsey), derandomizzazione con le aspettative condizionate, lemma locale di Lovász solo enunciato.Metodo probabilistico - valore atteso, alterazioni e derandomizzazione → (alterazione, lemma locale di Lovász), 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.
- Un grafo ha vertici e archi. Dimostrare con l'alterazione che ha un insieme indipendente di almeno vertici. Per , calcolare il guadagno per .
- Verificare con una simulazione su un grafo casuale con , : dimensione media dell'insieme indipendente ottenuto, e valore medio di .
- Variante: ordinare i vertici con una permutazione casuale e tenere quelli che precedono tutti i vicini. Dimostrare e confrontare con il punto 1 sullo stesso grafo.
- Esempio a mano: il ciclo .
- Lemma locale di Lovász. Una formula -CNF ha clausole con variabili distinte e ogni variabile compare in al più clausole. Per trovare il massimo per cui il lemma garantisce che la formula sia soddisfacibile (condizione ) e confrontare con l'union bound.
Soluzione
1. Dimostrazione. Ogni vertice entra in con probabilità indipendentemente. Sia il numero di archi con entrambi gli estremi in . Allora e, per la linearità, (un arco è in con probabilità ). Si toglie da un estremo per ogni arco rimasto in : l'insieme che resta è indipendente e ha almeno vertici. è una parabola in con massimo in (che è perché ), dove vale . Per il principio del valore atteso esiste un esito con .
Numeri. , (, ottimo ):
Bound: vertici (verificato ).
2. Simulazione. Grafo casuale con archi distinti su vertici (seme , grado massimo ), , prove. vale in media e vale in media , quindi in media (come previsto). L'insieme indipendente ottenuto togliendo un estremo solo degli archi che sono ancora interamente in ha invece dimensione media (minimo , massimo ): togliere un vertice elimina tutti i suoi archi, quindi si toglie meno di vertici. Il teorema garantisce quindi e la procedura reale ottiene .
3. Permutazione casuale. Sia una permutazione uniforme dei vertici e . (i) è indipendente: se non possono entrambi precedere l'altro. (ii) Tra e i suoi vicini ( vertici) il primo è con probabilità per simmetria. Per la linearità , e per la convessità di (Jensen) . Sullo stesso grafo: e ; permutazioni danno in media (da a ). Quindi la variante è molto più forte della precedente ( contro ).
4. Il ciclo . , : con , , , , quindi esiste un insieme indipendente di almeno vertici. Per la variante: ogni vertice ha grado , e quindi esiste un insieme indipendente di vertici. Il valore vero è (vertici ): nessuno dei due limiti è esatto.
5. Lovász. Sia l'evento "la clausola è falsa" in un'assegnazione uniforme: . dipende solo dalle variabili di ed è indipendente da tutte le clausole che non condividono variabili con ; ognuna delle variabili compare in al più altre clausole, quindi . La condizione diventa , cioè :
| massimo | |||
| valore della condizione in | |||
| con |
Con questi la formula è soddisfacibile qualunque sia il numero di clausole (con variabili, fino a clausole). L'union bound dà invece la soddisfacibilità solo per clausole: , , per .
Codice di verifica
import random
from math import e
def grafo(n, m, seme):
r, E = random.Random(seme), set()
while len(E) < m:
a, b = r.sample(range(n), 2)
E.add((min(a, b), max(a, b)))
return sorted(E)
n, m = 1000, 2000
G = grafo(n, m, 42)
d = 2 * m / n
grado = [0] * n
adj = {v: [] for v in range(n)}
for a, b in G:
grado[a] += 1; grado[b] += 1; adj[a].append(b); adj[b].append(a)
print([n * p - m * p * p for p in (0.1, 0.2, 0.25, 0.3, 0.4)], sum(1 / (x + 1) for x in grado), n / (d + 1), max(grado))
r = random.Random(5)
dim, s0, y0 = [], 0, 0
for _ in range(2000):
S = {v for v in range(n) if r.random() < 1 / d}
s0 += len(S); y0 += sum(a in S and b in S for a, b in G)
for a, b in G:
if a in S and b in S:
S.discard(a) # toglie un estremo solo se l'arco è ancora in S
assert not any(a in S and b in S for a, b in G)
dim.append(len(S))
print(s0 / 2000, y0 / 2000, min(dim), sum(dim) / 2000, max(dim))
r, tot = random.Random(7), []
for _ in range(300):
pos = list(range(n)); r.shuffle(pos)
tot.append(sum(all(pos[v] < pos[u] for u in adj[v]) for v in range(n)))
print(sum(tot) / 300, min(tot), max(tot))
for k in (5, 10, 12):
rmax = 1
while e * 2 ** -k * (k * rmax + 1) <= 1: # prova r = rmax + 1
rmax += 1
print(k, rmax, e * 2 ** -k * (k * (rmax - 1) + 1), e * 2 ** -k * (k * rmax + 1), 2 ** k)Risultato: [80.0, 120.0, 125.0, 120.0, 80.0] 242.97... 200.0 12, 250.2 125.2 130 157.6 187, 243.5 206 268, e le righe 5 3 0.934 1.359 32, 10 38 0.985 1.011 1024, 12 126 0.996 1.004 4096.
Versione ripasso
- Alterazione. con probabilità per vertice: , ( archi in ); togliere un estremo per arco: vertici indipendenti. massimo in : . Per , : per (Metodo probabilistico - valore atteso, alterazioni e derandomizzazioneMetodo probabilistico: se un oggetto casuale ha una proprietà con probabilità positiva (o una variabile ha media mu, quindi qualche esito la raggiunge) allora l'oggetto esiste; taglio di almeno |E|/2, MAX-SAT con 7/8, limite inferiore di Ramsey R(k,k) > 2^(k/2), alterazioni (insiemi indipendenti, Ramsey), derandomizzazione con le aspettative condizionate, lemma locale di Lovász solo enunciato.Metodo probabilistico - valore atteso, alterazioni e derandomizzazione →).
- Simulazione (grafo con seme ): , , ; insieme reale (togliendo solo archi ancora in ): minimo , media , massimo .
- Permutazione casuale. indipendente; ; (Jensen). Stesso grafo: (simulato ) contro e .
- . : ; permutazione: ; vero .
- Lovász. = clausola falsa, , ; : per (condizione ; con : ). Soddisfacibile con qualunque numero di clausole; union bound solo per .
- Errori tipici. Togliere troppi vertici (uno per arco già eliminato) e dimenticare che il limite resta valido comunque; scrivere invece di ; confondere dell'alterazione con la probabilità di un arco.