1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-22 10:44:17 +00:00
appunti-steffo/9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/3 - Approssimazione di commesso viaggiatore/problema del commesso viaggiatore.md

3.1 KiB

aliases
traveling salesman problem
TSP
minimizzazione di circuito hamiltoniano

problema di minimizzazione.

Appartiene alla classe di problemi NP-difficili.

Definizione

Dato un grafo completo pesato, qual è il circuito hamiltoniano di costo minimo?

Verifica

Dato un grafo completo pesato, e un circuito hamiltoniano, esso è quello di costo minimo?

costo computazionale classe di problemi NP-difficili

Per dimostrare che questo problema è classe di problemi NP-difficili, si può riduzione di Karp un qualsiasi classe di problemi NP-completi ad esso.

In questo caso, usiamo la esistenza di circuito hamiltoniano.

Partendo dal grafo semplice della esistenza di circuito hamiltoniano, che definiamo così: \def \varGraphA {{\color{DarkSalmon} Graph_{Hamilton}}} \def \varEdgesA {{\color{LightSalmon} Edges_{Hamilton}}} \def \varNodes {{\color{SpringGreen} Nodes_{Shared}}} \varGraphA = (\varNodes, \varEdgesA)

Vogliamo associare ogni istanza di esso a un'istanza di problema del commesso viaggiatore, che però richiede che il grafo sia grafo completo e pesato: \def \varGraphB {{\color{Orchid} Graph_{Salesman}}} \def \varEdgesB {{\color{Thistle} Edges_{Salesman}}} \varGraphB = (\varNodes, \varEdgesB)

Allora, sfruttiamo i pesi a nostro vantaggio per creare un grafo in cui gli arco di un grafo di \varGraphA siano sempre preferiti: \def \varEdge {{\color{Lavender} edge}} \forall\ \varEdge \in \varEdgesB : \mathrm{cost}(\varEdge) = \begin{cases} \textrm{if}\ \varEdge \in \varEdgesA & 0 \\ \textrm{if}\ \varEdge \not\in \varEdgesA & 1 \end{cases}

Una volta determinata la soluzione al problema del commesso viaggiatore, giungeremo a conoscenza del funzione costo problema di minimizzazione del percorso hamiltoniano che attraversa tutti i nodi: \def \varCost {{\color{MediumPurple} Cost_{Salesman}}} travelingSalesmanProblem(\varGraphB) = \varCost

In base al costo minimo \varCost risultante, possiamo determinare la risposta al problema di esistenza di circuito hamiltoniano.

Infatti, se una soluzione ad esso esiste, il problema del commesso viaggiatore darà \varCost = 0, in quanto tutti gli archi di \varGraphA sono preferiti per via del loro peso minore; viceversa, se una soluzione ad esso non esiste, l'output sarà \varCost > 0, che significa che è necessario aggiungere il dato numero di arco di un grafo ulteriori per formare un ciclo hamiltoniano: \begin{cases} \textrm{if}\ \varCost = 0 & \exists\ hamiltonianCycle(\varGraphA) \\ \textrm{if}\ \varCost \neq 0 & \not\exists\ hamiltonianCycle(\varGraphA) \end{cases}

Pertanto, il problema appartiene alla classe di problemi NP-difficili.

algoritmo di approssimazione