Alberi di copertura
Dato un grafo connesso , sicuramente ammette un albero di copertura (un sottografo che comprenende tutti vertici e che è un albero).
Un modo per contare tutti gli alberi di copertura di un grafo connesso è tramite il teorema di Kirchoff.
La Formula di Caley conta il numero di alberi di copertura etichettati di . Già sapere quanti sono a meno di isomorfismo è più complicato.
Vediamo come costruire un grafo di copertura a partire da un grafo connesso è estremamente facile. Addirittura si può generalizzare al caso di archi pesati, è il problema del Mininum spanning tree o MST. E’ un problema polinomiale, e due approcci greedy lo risolvono.
Algoritmo di Kruskal
Algoritmo greedy del 1956.
Input Un grafo connesso ed una funzione di costo . Output Un albero di copertura di costo minimo.
ho componenti connesse, vertici, archi. While Si aggiunga l’arco di costo minimo tale che diminusica le componenti connesse di
L’algoritmo termina in esattamente passi, la taglia di un albero.
Teorema Il sottografo ottenuto è un albero ricoprente di costo minimo di .
Dim
- è un albero, infatti ad ogni passo ho una foresta, alla fine ho una foresta con , quindi è connesso. (Non creo mai cicli perchè scelgo archi in modo tale da diminuire le componenti connesse).
- ?
Consideriamo un altro generico albero di copertura , ordiniamo i suoi archi in base al costo in maniera crescente. Sappiamo che l’algoritmo prende archi con costi crescenti.
Se allora banalmente è vero che . Supponiamo non sia vero, quindi esiste un primo indice tale che . Siccome i pesi sono ordinati in maniera crescente, questo vale anche per i successivi. Se il mio algoritmo non ha scelto che sono di costo minore di significa che includerli non diminuiva le componenti connesse:
E’ chiaro che aggiungere archi non può far diminuire le componenti connesse:
Siccome sono entrambe foreste (sono dei sottografi di alberi) vale la caratterizzazione tramite ordine e taglia:
ed arrivo all’assurdo: