4.9 KiB
algoritmo di approssimazione di problema del commesso viaggiatore, che migliora la approssimazione a 2 di problema del commesso viaggiatore con costo degli archi triangolare.
Restrizioni aggiuntive
Funzionamento
[!Summary]+ Summary ma non troppo Si effettuano i seguenti passi:
- si crea un minimum spanning tree del grafo;
- da esso, si crea un sottografo induzione di sottografo dai nodo di un grafo che nel minimum spanning tree hanno grado di un nodo dispari;
- si determina l'abbinamento perfetto di funzione costo problema di minimizzazione del sottografo;
- si unione minimum spanning tree e abbinamento perfetto problema di minimizzazione per creare un grafo temporaneo su cui effettuare i calcoli;
- si usa l'algoritmo di Fleury per circuito euleriano per trovare un circuito euleriano sul grafo temporaneo;
- grazie al costo degli archi triangolare si rimuovono tutte le visite ripetute ai nodo di un grafo, ottenendo un circuito hamiltoniano.
algoritmo corretto
[!Success] ==Sì==
fattore di approssimazione
Esiste un circuito hamiltoniano soluzione ottima di costo:
\def \varOptimal {{\color{Gold} Optimal}}
\large \varOptimal
Si induzione di sottografo un sottografo da tutti i nodo di un grafo con grado di un nodo dispari nel minimum spanning tree.
Essendo il grafo originale grafo completo, anche il sottografo lo sarà, pertanto, dovrà sicuramente esistere in esso un circuito hamiltoniano problema di minimizzazione di peso:
\def \varSubHamilton {{\color{DarkKhaki} SubHamilton}}
\large \varSubHamilton
Avendo tolto dei nodo di un grafo dal grafo iniziale, per la costo degli archi triangolare possiamo dire che:
\varSubHamilton \leq \varOptimal
Dividiamo gli arco di un grafo del sotto-circuito hamiltoniano problema di minimizzazione in due insieme, visitandoli e alternandoli uno ad uno nel primo e nel secondo insieme, ottenendo così due abbinamento perfetto (non minimi) di funzione costo:
\def \varMatchingA {{\color{Lime} Matching_A}}
\def \varMatchingB {{\color{LawnGreen} Matching_B}}
\large \varMatchingA \qquad \varMatchingB
Li mettiamo a confronto con l'abbinamento perfetto di funzione costo problema di minimizzazione realizzato dall'algoritmo:
\def \varMatchingOpt {{\color{PaleGreen} Matching}}
\large \varMatchingOpt
Essendo l'abbinamento problema di minimizzazione ed il grafo grafo completo, abbiamo che:
\varMatchingOpt \leq \varMatchingA
\varMatchingOpt \leq \varMatchingB
E quindi:
2 \cdot \varMatchingOpt \leq \varMatchingA + \varMatchingB
Dato che i due abbinamento perfetto contengono tutti gli arco di un grafo del sotto-circuito hamiltoniano problema di minimizzazione:
2 \cdot \varMatchingOpt \leq \varSubHamilton
E quindi:
2 \cdot \varMatchingOpt \leq \varOptimal
Cioè:
\varMatchingOpt \leq \frac{1}{2} \cdot \varOptimal
Definiamo la somma dei pesi del minimum spanning tree utilizzato inizialmente come:
\def \varTree {{\color{SpringGreen} Tree}}
\large \varTree
Dato che possiamo anche ottenerlo rimuovendo un singolo canale di comunicazione qualsiasi dal circuito hamiltoniano soluzione ottima:
\varTree \leq \varOptimal
Il circuito euleriano restituito dall'algoritmo di Fleury per circuito euleriano ha un peso totale di:
\def \varFleury {{\color{Purple} Fleury}}
\large \varFleury
Dato che esso attraversa tutti gli arco di un grafo del minimum spanning tree e dell'abbinamento perfetto, possiamo dire che:
\varFleury = \varTree + \varMatchingOpt
Possiamo usare però la costo degli archi triangolare per rimuovere tutti i nodo di un grafo che compaiono due volte, ottenendo così un circuito hamiltoniano, che sarà sicuramente più breve del circuito euleriano:
\def \varApprox {{\color{Magenta} Approx}}
\large \varApprox
Ottenendo che:
\varApprox \leq \varFleury
E quindi che:
\varApprox \leq \varTree + \varMatchingOpt
Continuando a sostituire:
\varApprox \leq \varOptimal + \frac{1}{2} \cdot \varOptimal
Ovvero:
\varApprox \leq \frac{3}{2} \cdot \varOptimal
Il fattore di approssimazione quindi è:
\Large \frac{3}{2}