1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-29 13:24:17 +00:00
appunti-steffo/9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/2 - Approssimazione di vertex cover/approssimazione a 2 di minimal vertex cover con relax-and-round.md

74 lines
2.2 KiB
Markdown

[[algoritmo di approssimazione]] di [[minimal vertex cover problem]] che fa uso di [[relax-and-round]].
## Funzionamento
> [!Summary]
> Si converte il problema da [[campo degli interi|intero]] a [[continuo]], lo si risolve con un algoritmo di [[programmazione lineare]], e poi si arrotonda la soluzione in direzione opposta a quella dell'ottimizzazione che si sta effettuando.
### Definizione
Si chiede di assegnare una variabile booleana $Optimal_{Node}$ a ciascun [[nodo di un grafo|nodo]]:
- $0$ se il [[nodo di un grafo|nodo]] non è parte della [[soluzione ottima]]
- $1$ se lo è
Si stabilisce un vincolo per descrivere un [[vertex cover]]:
$$
\def \varNodeA {{\color{LightCoral} Node_A}}
\def \varNodeB {{\color{Coral} Node_B}}
\forall\ (\varNodeA, \varNodeB) \in Edges :
\begin{cases}
\\
Optimal_{\varNodeA} + Optimal_{\varNodeB} \geq 1
\\\
\end{cases}
$$
> [!Tip]- Significato del vincolo
> "Per ogni [[arco di un grafo|arco]], scegli almeno uno dei due [[nodo di un grafo|nodi]] ai suoi estremi.
Infine, si definisce la [[funzione obiettivo]] come:
$$
\min \sum_{Node}^{Nodes} Optimal_{Node}
$$
### [[relax-and-round|Rilassamento]]
Invece di richiedere di assegnare variabili [[numero booleano|booleane]], richiediamo al risolutore di [[programmazione lineare]] di assegnare variabili [[numero reale|reali]]:
$$
0 \leq Relaxed_{Node} \leq 1
$$
### [[relax-and-round|Arrotondamento]]
Si selezionano tutti i [[nodo di un grafo|nodi]] tali che:
$$
\frac{1}{2} \leq Relaxed_{Node}
$$
## [[algoritmo corretto|Correttezza]]
> [!Success]
> Si forma un [[vertex cover]] valido.
## [[fattore di approssimazione|Fattore di approssimazione]]
Possiamo notare che, da come abbiamo effettuato l'arrotondamento:
$$
Relaxed_{Node} \leq \frac{1}{2} \cdot Optimal_{Node}
$$
Portando dall'altra parte:
$$
2 \cdot Relaxed_{Node} \leq Optimal_{Node}
$$
Allora, questa disuguaglianza sarà applicabile anche alla [[funzione costo]]:
$$
2 \cdot \sum_{Node}^{Nodes} Relaxed_{Node} \leq \sum_{Node}^{Nodes} Optimal_{Node}
$$
Questo significa che il [[funzione costo|costo]] della versione rilassata è al massimo il doppio di quella [[soluzione ottima|ottimale]], e che quindi il [[fattore di approssimazione]] è:
$$
\Large 2
$$