[[algoritmo di approssimazione]] di [[problema del commesso viaggiatore]].

## Funzionamento

> [!Summary]
> Il [[grafo]] viene diviso in più [[sottografo|sottografi]], di cui si cercano i rispettivi [[circuito hamiltoniano|circuiti hamiltoniani]] [[problema di minimizzazione|minimi]].

### [[branch-and-bound|Branch]]

Si seleziona un [[nodo di un grafo|nodo]]:
- se questa è la prima iterazione, se ne seleziona uno qualsiasi;
- altrimenti, uno che ha grado $\geq 3$ nell'[[1-tree]];
- se non ce ne sono, abbiamo trovato il [[circuito hamiltoniano]] [[minimo locale]].

Per ciascuna selezione possibile di due [[arco di un grafo|archi]] incidenti su di esso, si crea un nuovo [[branch-and-bound|branch]] che esclude tutti gli altri.

> [!Example]-
> 
> #### 1-tree con nodi selezionabili evidenziati
> 
> ![[Branch 1.svg]]
> 
> #### Tre dei sei branch risultanti
> 
> ![[Branch 1A.svg]]
> 
> ![[Branch 1B.svg]]
> 
> ![[Branch 1C.svg]]


### [[branch-and-bound|Bound]]

Per ciascun [[branch-and-bound|branch]]:
1. si crea un [[sottografo]] escludendo il [[nodo di un grafo|nodo]] in questione tutti gli [[arco di un grafo|archi]] incidenti su esso
2. si determina il [[minimum spanning tree]] del grafo
3. si selezionano i due [[arco di un grafo|archi]] pertinenti al [[branch-and-bound|branch]] in questione
4. si [[unione|uniscono]] [[minimum spanning tree]] e due [[arco di un grafo|archi]], formando un **[[1-tree]]**
5. si usa come valore di bounding il [[funzione costo|costo]] dell'[[1-tree]]

> [!Example]-
> 
> #### Grafo pesato iniziale
> ![[Grafo pesato iniziale.svg]]
> 
> #### Selezionato il nodo 1
> ![[Bound 1.svg]]

> [!Success] Correttezza
> 
> Il [[funzione costo|costo]] di un [[circuito hamiltoniano]] può essere visto come la somma di:
> - il [[funzione costo|costo]] di un [[percorso di un grafo|percorso]] che collega i [[nodo di un grafo|nodi]] del [[sottografo]] del [[branch-and-bound|branch]] (uno [[spanning tree]])
> - il [[funzione costo|costo]] dei due [[arco di un grafo|archi]] che collegano il [[nodo di un grafo|nodo]] escluso e il [[sottografo]]
> 
> Nell'effettuare il [[branch-and-bound|bounding]], non siamo sicuri che il [[minimum spanning tree]] determinato sia anche un [[circuito hamiltoniano]], ma sappiamo che qualsiasi altra selezione di archi avrà sicuramente un costo maggiore.

### [[branch-and-bound|Pruning]]

Vengono eliminati i [[branch-and-bound|branch]]:
- con un [[entità|nodo]] di [[grado di un nodo|grado]] $\leq 1$
- senza un [[grafo connesso]]