1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-24 19:24:19 +00:00
appunti-steffo/9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/3 - Approssimazione di commesso viaggiatore/approssimazione a 2 di problema del commesso viaggiatore con costo degli archi triangolare.md

2.6 KiB

algoritmo di approssimazione di problema del commesso viaggiatore.

Restrizioni aggiuntive

Funzionamento

[!Summary]+ Summary ma non troppo Si effettuano i seguenti passi:

  1. si crea un minimum spanning tree del grafo, e ne si seleziona un nodo di un grafo qualsiasi che ne diventi la radice;
  2. 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;
  3. 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