Matematica discreta - Spanning Trees

Uno spanning tree di un grafo non orientato connesso $ G $ è un albero che include in minima parte tutti i vertici di $ G $. Un grafico può avere molti spanning tree.

Esempio

Spanning Tree minimo

Uno spanning tree con peso assegnato inferiore o uguale al peso di ogni possibile spanning tree di un grafo $ G $ pesato, connesso e non orientato, è chiamato albero di copertura minimo (MST). Il peso di uno spanning tree è la somma di tutti i pesi assegnati a ciascun bordo dello spanning tree.

Esempio

Algoritmo di Kruskal

L'algoritmo di Kruskal è un algoritmo avido che trova uno spanning tree minimo per un grafo ponderato connesso. Trova un albero di quel grafo che include ogni vertice e il peso totale di tutti i bordi dell'albero è inferiore o uguale a ogni possibile albero di copertura.

Algoritmo

Step 1 - Disporre tutti i bordi del grafico $ G (V, E) $ in ordine crescente in base al loro peso.

Step 2 - Scegli il bordo ponderato più piccolo dal grafico e controlla se forma un ciclo con lo spanning tree formato finora.

Step 3 - Se non c'è ciclo, includi questo bordo nello spanning tree altrimenti scartalo.

Step 4 - Ripetere i passaggi 2 e 3 fino a quando $ (V-1) $ numero di spigoli rimane nello spanning tree.

Problem

Supponiamo di voler trovare l'albero di copertura minimo per il seguente grafo G usando l'algoritmo di Kruskal.

Solution

Dal grafico sopra costruiamo la seguente tabella:

Bordo n. Coppia di vertici Peso del bordo
E1 (a, b) 20
E2 (corrente alternata) 9
E3 (anno Domini) 13
E4 (avanti Cristo) 1
E5 (b, e) 4
E6 (b, f) 5
E7 (c, d) 2
E8 (d, e) 3
E9 (d, f) 14

Ora riorganizzeremo la tabella in ordine crescente rispetto al peso del bordo -

Bordo n. Coppia di vertici Peso del bordo
E4 (avanti Cristo) 1
E7 (c, d) 2
E8 (d, e) 3
E5 (b, e) 4
E6 (b, f) 5
E2 (corrente alternata) 9
E3 (anno Domini) 13
E9 (d, f) 14
E1 (a, b) 20

Poiché nell'ultima figura abbiamo ottenuto tutti e 5 gli archi, interrompiamo l'algoritmo e questo è lo spanning tree minimo e il suo peso totale è $ (1 + 2 + 3 + 5 + 9) = 20 $.

Algoritmo di Prim

L'algoritmo di Prim, scoperto nel 1930 dai matematici Vojtech Jarnik e Robert C. Prim, è un algoritmo avido che trova uno spanning tree minimo per un grafo ponderato connesso. Trova un albero di quel grafo che include ogni vertice e il peso totale di tutti i bordi dell'albero è inferiore o uguale a ogni possibile albero di copertura. L'algoritmo di Prim è più veloce su grafici densi.

Algoritmo

  • Inizializza l'albero di copertura minimo con un singolo vertice, scelto a caso dal grafico.

  • Ripetere i passaggi 3 e 4 fino a quando tutti i vertici sono inclusi nell'albero.

  • Selezionare un bordo che colleghi l'albero con un vertice non ancora nell'albero, in modo che il peso del bordo sia minimo e l'inclusione del bordo non formi un ciclo.

  • Aggiungi il bordo selezionato e il vertice che si collega all'albero.

Problem

Supponiamo di voler trovare il minimo spanning tree per il seguente grafo G usando l'algoritmo di Prim.

Solution

Qui iniziamo con il vertice "a" e procediamo.

Questo è lo spanning tree minimo e il suo peso totale è $ (1 + 2 + 3 + 5 + 9) = 20 $.