# Albero ricoprente minimo

Nella teoria dei grafi, dato un grafo con archi pesati, l'albero ricoprente minimo o albero di copertura di costo minimo (in inglese minimum spanning tree, in sigla MST) è un albero ricoprente nel quale sommando i pesi degli archi si ottiene un valore minimo.

## Definizione formale

Dato un grafo $G=(N,A)$ non orientato, connesso e pesato e assumendo che $w(u,v)\in \mathbb {R} ^{+}$ sia una funzione peso per $G$.
Un MST per $G$ è un insieme di archi tale che:
    $w(MST)=\min _{MST\in S}\sum _{(u,v)\in MST}w(u,v).$
Dove $S$ è l'insieme di tutti gli alberi ricoprenti $T$ di $G$, ovvero l'insieme di tutti i suoi sottografi che rispettano le seguenti condizioni:
* $T\subseteq A$, quindi $T$ contiene solo una parte degli archi originali, al limite tutti, ma non di più.
* $(N,T)$ è connesso: i nodi sono tutti collegati tra loro.

## Modello matematico

Dato un grafo $G=(N,A)$ non orientato e connesso con costi $c_{i,j}$ associati agli archi e vettore dei flussi sugli archi
    $x_{i,j}={\begin{cases}1,&{\text{se l'albero contiene l'arco }}(i,j),\\0,&{\text{altrimenti}}.\end{cases}}$
Un albero di copertura di costo minimo (MST) è la soluzione del seguente modello matematico
${\begin{aligned}&\min \sum _{(i,j)\in A}c_{ij}x_{ij},\\&\sum _{(i,j)\in A}x_{ij}=n-1\quad {\text{(vincolo grafo connesso)}},\\&\sum _{i\in S,j\in S}x_{ij}\leqslant |S|-1,\qquad \forall S\subseteq A,|S|\geqslant 3\quad {\text{(vincolo assenza di cicli nel grafo)}},\end{aligned}}$
dove $S$ è l'insieme degli archi che compongono l'albero di copertura $T$ e ha le seguenti proprietà:
* è un sottoinsieme di $A$ (insieme degli archi del grafo);
* la cardinalità di tale insieme deve essere almeno uguale a 3 (dato che con meno di 3 elementi in un insieme non si può creare un ciclo).
Il vincolo sull'assenza di cicli nel grafo può essere anche espresso utilizzando il concetto di taglio in un grafo. Il secondo vincolo del modello quindi diventerà:
    $\sum _{i\in S,j\notin S}x_{ij}+\sum _{i\notin S,j\in S}x_{ij}\geqslant 1,\qquad \forall S\subseteq N\quad {\text{(vincolo nodi connessi)}}.$

### Condizioni di ottimalità

L'albero di copertura di costo minimo $T$che si ottiene applicando un algoritmo risolutivo è ottimo se rispetta le seguenti condizioni:
* sui cicli: $T$ è un albero di copertura di costo minimo $\quad \Leftrightarrow \quad \forall (u,v)\notin T\quad c_{u,v}\geq c_{i,j},\ \forall (i,j)$ in un cammino da $u$ a $v$ in $T$;
* sui tagli: $T$ è un albero di copertura di costo minimo $\quad \Leftrightarrow \quad \forall (u,v)\in T\quad c_{u,v}\leq c_{i,j},\ \forall (i,j)$ in un taglio formato eliminando l'arco $(u,v)$ da $T$.

## Algoritmi per il calcolo di un MST
### Algoritmo generico

L'algoritmo generico per la costruzione di un albero ricoprente minimo è di tipo greedy. Dato un grafo $G=(V,E)$ non orientato, connesso e con una funzione peso $w\colon E\rightarrow \mathbb {R} ^{+}$, l'algoritmo agisce su un insieme $A\subseteq T$ (con $T$ MST di $G$) al quale ad ogni passo viene aggiunto un arco $(u,w)$ che permette ad $A$ di restare un sottoinsieme del MST finale, un tale arco verrà chiamato safe-edge.
* $A\leftarrow \varnothing$
* while $A\neq T$ do
** $(u,v)\leftarrow$safe-edge$(A)$
** $A\leftarrow A\cup (u,v)$
* end while
* return A

### Trovare l'arco corretto

Per trovare l'arco corretto è necessario ricorrere ad alcune definizioni.
Per prima cosa $(S,V-S)$ con $S\subseteq V$ verrà chiamato taglio, e avremo che:
* un arco $(u,v)$ attraversa un taglio $(S,V-S)$ se e solo se $u\in S\land v\in (V-S)$.
* un albero $A\subseteq E$ rispetta un taglio $(S,V-S)$ se e solo se $\not \exists (u,v)\in A$ che attraversa il taglio.
Un arco $(u,v)$ viene definito leggero rispetto ad un taglio $(S,V-S)$, se è di peso minimo tra tutti gli archi che attraversano quel taglio.
Dato un insieme $A$ di archi contenuto in qualche albero di connessione minima, sia $(S,V-S)$ un taglio che rispetta $A$ e sia $a=(u,v)$ un arco leggero, allora l’arco $a$ è sicuro (safe-edge).

### Algoritmi usati nella pratica

Dato un grafo esistono diversi algoritmi per individuare un suo MST, tra questi:
* Algoritmo di Prim
* Algoritmo di Kruskal
* Algoritmo di Borůvka

## Foresta ricoprente minima

Nel caso in cui il grafo non sia connesso, cioè sia il risultato dell'unione di più grafi connessi, si può ancora definire una foresta ricoprente minima come l'unione degli alberi ricoprenti individuati sui singoli grafi connessi. In grafi connessi, foresta ed albero ricoprente coincidono.

## Applicazioni

Gli spanning tree minimi hanno applicazioni dirette nella progettazione di reti, tra cui reti di computer, reti di telecomunicazioni, reti di trasporto, reti di approvvigionamento idrico e rete elettrica.
Altre applicazioni pratiche basate sugli Alberi Ricoprenti Minimi:
* Tassonomia.
* Clustering: clustering dei punti nel piano,
* Costruzione degli alberi per il broadcasting nelle reti di computer.
* Feature extraction curvilinea in computer vision.
* Riconoscimento della scrittura per espressioni matematiche.
* Regionalizzazione di aree socio-geografiche, ovvero raggruppare delle aree in regioni omogenee e contigue.
* Gli Alberi ricoprenti minimi possono essere utilizzati per descrivere i mercati finanziari. Una matrice di correlazione può essere creata calcolando un coefficiente di correlazione tra due stocks qualunque. Questa matrice può essere rappresentata topologicamente come una rete complessa ed un albero minimo ricoprente può essere costruito per visualizzarne le relazioni.