mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-24 19:24:19 +00:00
76 lines
2.1 KiB
Markdown
76 lines
2.1 KiB
Markdown
|
[[algoritmo di approssimazione]] per il [[problema del commesso viaggiatore]].
|
||
|
|
||
|
Per questo problema, il [[fattore di approsimazione]] $\alpha$ può essere costante solo se [[P=NP]].
|
||
|
|
||
|
> L'algoritmo di approssimazione a fattore costante è riducibile alla [[ricerca di ciclo hamiltoniano]].
|
||
|
|
||
|
## Sfruttando la [[proprietà triangolare per il costo degli archi]]
|
||
|
|
||
|
### Algoritmo
|
||
|
|
||
|
#### $Tree$
|
||
|
|
||
|
Si può trovare il [[albero di copertura minimo]] di $Graph$ in tempo [[polinomiale]].
|
||
|
|
||
|
#### $2 \cdot Tree$
|
||
|
|
||
|
Si [[raddoppiamento di arco|raddoppiano]] gli archi di $Tree$.
|
||
|
|
||
|
#### $Euler$
|
||
|
|
||
|
Si trova il [[ciclo euleriano]] per $2 \cdot Tree$.
|
||
|
|
||
|
#### $Hamilton$
|
||
|
|
||
|
Si trova il [[ciclo hamiltoniano]] per $Tree$, usando *shortcut*:
|
||
|
|
||
|
- Si selezionano i nodi di $Euler$ mantenendoli nello stesso ordine, ma scartando quelli che vi appaiono due volte, e poi connettendo l'ultimo al primo.
|
||
|
|
||
|
$Hamilton$ è la soluzione approssimata, con [[fattore di approsimazione]] $2$.
|
||
|
|
||
|
### Dimostrazione
|
||
|
|
||
|
#### $cost(Hamilton) \leq cost(Euler)$
|
||
|
|
||
|
Per la [[proprietà triangolare per il costo degli archi]].
|
||
|
|
||
|
#### $cost(Euler) = 2 \cdot cost(Tree)$
|
||
|
|
||
|
Per via del [[raddoppiamento di arco|raddoppiamento di archi]].
|
||
|
|
||
|
#### $2 \cdot cost(Tree) \leq 2 \cdot cost(Optimal)$
|
||
|
|
||
|
Togliendo un arco qualsiasi, $Optimal$ diventa un [[albero di copertura]].
|
||
|
|
||
|
$Tree$ è un altro [[albero di copertura]], ma [[albero di copertura minimo|minimo]].
|
||
|
|
||
|
### [[Tightness]]
|
||
|
|
||
|
#TODO was busy fixing the rest of the notes
|
||
|
|
||
|
## Algoritmo di Christofides
|
||
|
|
||
|
#### $Tree$
|
||
|
|
||
|
Si può trovare il [[albero di copertura minimo]] di $Graph$ in tempo [[polinomiale]].
|
||
|
|
||
|
#### $Perfect$
|
||
|
|
||
|
Si trova il [[minimum perfect matching]] dei nodi di [[grado di un nodo|grado]] dispari di $Tree$.
|
||
|
|
||
|
#### $Merged$
|
||
|
|
||
|
Si uniscono gli archi di $Perfect$ a $Tree$.
|
||
|
|
||
|
#### $Euler$
|
||
|
|
||
|
Si trova il [[ciclo euleriano]] per $Merged$.
|
||
|
|
||
|
#### $Hamilton$
|
||
|
|
||
|
Si trova il [[ciclo hamiltoniano]] per $Tree$, usando *shortcut*:
|
||
|
|
||
|
- Si selezionano i nodi di $Euler$ mantenendoli nello stesso ordine, ma scartando quelli che vi appaiono due volte, e poi connettendo l'ultimo al primo.
|
||
|
|
||
|
$Hamilton$ è la soluzione approssimata, con [[fattore di approsimazione]] $2$.
|