2.6 KiB
algoritmo di approssimazione di problema del commesso viaggiatore.
Restrizioni aggiuntive
Funzionamento
[!Summary]+ Summary ma non troppo Si effettuano i seguenti passi:
- si crea un minimum spanning tree del grafo, e ne si seleziona un nodo di un grafo qualsiasi che ne diventi la radice;
- poi, si effettua una depth-first search sul grafo, aggiungendo in pre-visita i nodo di un grafo a una lista, determinando così un percorso hamiltoniano;
- infine, si connettono primo e ultimo nodo di un grafo, ottenendo così un circuito hamiltoniano.
algoritmo corretto
[!Success] L'algoritmo produce sempre una 9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione in tempo finito.
fattore di approssimazione
Definiamo la somma dei pesi del minimum spanning tree utilizzato come:
\def \varTree {{\color{SpringGreen} Tree}}
\large \varTree
Effettuando una depth-first search sul minimum spanning tree e aggiungendo ad una lista tutti i nodo di un grafo attraversati in pre-visita e post-visita, otteniamo un circuito hamiltoniano:
\def \varFullWalk {{\color{Purple} FullWalk}}
\large \varFullWalk
Esso attraversa tutti gli arco di un grafo due volte:
\varFullWalk
2 \cdot \varTree
Possiamo usare però la costo degli archi triangolare per rimuovere tutti i nodo di un grafo che compaiono due volte, ottenendo un circuito hamiltoniano più breve:
\def \varApprox {{\color{Magenta} Approx}}
\large \varApprox
Ottenendo che:
\varApprox \leq \varFullWalk
E quindi che:
\varApprox \leq 2 \cdot \varTree
Consideriamo il costo del circuito hamiltoniano soluzione ottima:
\def \varOptimal {{\color{Gold} Optimal}}
\large \varOptimal
Da esso, possiamo ottenere uno spanning tree rimuovendo un canale di comunicazione qualsiasi:
\varTree \leq \varOptimal
Pertanto, abbiamo che:
\frac{1}{2} \cdot \varFullWalk \leq \varOptimal
Portando dall'altra parte:
\varFullWalk \leq 2 \cdot \varOptimal
Quindi:
\varApprox \leq 2 \cdot \varOptimal
Ottenendo così un fattore di approssimazione di:
\Large 2
costo computazionale
Costo | notazione O-grande |
---|---|
9 - Algoritmi distribuiti/1 - Problemi algoritmici/spazio | O(Nodes) |
9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo | polinomiale |