mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-21 10:24:18 +00:00
Final update for Algoritmi distribuiti
This commit is contained in:
parent
be9dbc1f84
commit
1c4eb7fc50
295 changed files with 2641 additions and 1942 deletions
2
.obsidian/app.json
vendored
2
.obsidian/app.json
vendored
|
@ -3,7 +3,7 @@
|
|||
"useMarkdownLinks": false,
|
||||
"defaultViewMode": "source",
|
||||
"showFrontmatter": true,
|
||||
"attachmentFolderPath": "0 - Generale",
|
||||
"attachmentFolderPath": "9 - Algoritmi distribuiti/0 - Materiale di studio/Appunti esterni",
|
||||
"newFileLocation": "current",
|
||||
"strictLineBreaks": true,
|
||||
"showLineNumber": true,
|
||||
|
|
124
.obsidian/plugins/obsidian-file-color/data.json
vendored
124
.obsidian/plugins/obsidian-file-color/data.json
vendored
|
@ -238,35 +238,11 @@
|
|||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/1 - Problemi/★ problemi.canvas",
|
||||
"path": "9 - Algoritmi distribuiti/1 - Problemi algoritmici/★ problemi algoritmici.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/relax and round.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/vertex cover problem.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/relax and round per vertex cover problem.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/minimum perfect matching.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/★ algoritmi di approssimazione.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/1 - Concetti/★ concetti di computazione distribuita.canvas",
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/1 - Concetti di computazione distribuita/★ concetti di computazione distribuita.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
|
@ -286,19 +262,19 @@
|
|||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/2 - Broadcast/★ broadcast.canvas",
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/2 - Algoritmi di broadcast/★ algoritmi di broadcast.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/3 - Spanning tree/★ spanning tree.canvas",
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/3 - Algoritmi di spanning tree construction/★ algoritmi di spanning tree construction.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/5 - Leader election/★ leader election.canvas",
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/5 - Algoritmi di leader election/★ algoritmi di leader election.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/6 - Routing/★ routing.canvas",
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/6 - Algoritmi di routing/★ algoritmi di routing.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
|
@ -362,77 +338,21 @@
|
|||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Guasti",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Guasti/consenso con fallimenti bizantini.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Guasti/consenso con fallimenti su grafo completo.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/4 - Computazione/★ computazione.canvas",
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/4 - Algoritmi di computazione distribuita/★ algoritmi di computazione distribuita.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/4 - Strutture dati distribuite",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/6 - Routing/centralized routing.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Guasti/★ guasti.canvas",
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Algoritmi affidabili/★ algoritmi affidabili.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Guasti/algoritmo senza nome di consenso sincrono deterministico.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Guasti/protocollo di Ben-Or Las Vegas.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Guasti/protocollo di Ben-Or Monte Carlo.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Guasti/consenso sincrono deterministico bizantino.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Guasti/TellZero Byz.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/3 - Computazione distribuita/7 - Guasti/algoritmo senza nome Las Vegas di consenso asincrono non-deterministico bizantino.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "0 - Template/◍ algoritmo di approssimazione.md",
|
||||
"color": "me4XBNQC4rwzQFLlvIAn0"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/approssimazione del problema del commesso viaggiatore.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/proprietà triangolare per il costo degli archi.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "0 - Template/◍ problema algoritmico.md",
|
||||
"color": "me4XBNQC4rwzQFLlvIAn0"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/algoritmo senza nome approssimato greedy di vertex cover.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "file-index-ignore.json",
|
||||
"color": "me4XBNQC4rwzQFLlvIAn0"
|
||||
|
@ -440,6 +360,34 @@
|
|||
{
|
||||
"path": "file-index.json",
|
||||
"color": "me4XBNQC4rwzQFLlvIAn0"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/4 - Strutture dati distribuite/★ strutture dati distribuite.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/4 - Strutture dati distribuite/Chord finger table.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/1 - Concetti di approssimazione/★ concetti di approssimazione.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/2 - Approssimazione di vertex cover/★ approssimazione di vertex cover.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/3 - Approssimazione di commesso viaggiatore/★ approssimazione di commesso viaggiatore.canvas",
|
||||
"color": "7j7Pqog0VHMVVAfazMNlb"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/3 - Approssimazione di commesso viaggiatore/Media",
|
||||
"color": "me4XBNQC4rwzQFLlvIAn0"
|
||||
},
|
||||
{
|
||||
"path": "9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/3 - Approssimazione di commesso viaggiatore/approssimazione di problema del commesso viaggiatore con branch-and-bound.md",
|
||||
"color": "fc3lLaITDn62PYbzBhqxl"
|
||||
}
|
||||
]
|
||||
}
|
10
0 - Generale/arco di un grafo.md
Normal file
10
0 - Generale/arco di un grafo.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
aliases:
|
||||
- arco
|
||||
- archi
|
||||
- edge
|
||||
- edges
|
||||
---
|
||||
Entità di informazione [[duale]] in un [[grafo]].
|
||||
|
||||
Connette due [[entità|nodi]].
|
8
0 - Generale/cammino di un grafo.md
Normal file
8
0 - Generale/cammino di un grafo.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
aliases:
|
||||
- cammino
|
||||
- walk
|
||||
---
|
||||
|
||||
|
||||
[[Lista]] di [[arco di un grafo|archi]] di un [[grafo]] che connettono una [[lista]] di [[nodo di un grafo|nodi]].
|
8
0 - Generale/circuito di un grafo.md
Normal file
8
0 - Generale/circuito di un grafo.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
aliases:
|
||||
- circuito
|
||||
- circuit
|
||||
---
|
||||
|
||||
|
||||
[[percorso di un grafo]] che inizia e finisce allo stesso [[nodo di un grafo|nodo]].
|
13
0 - Generale/nodo di un grafo.md
Normal file
13
0 - Generale/nodo di un grafo.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
aliases:
|
||||
- nodo
|
||||
- nodi
|
||||
- vertice
|
||||
- vertici
|
||||
- vertice di un grafo
|
||||
- vertex
|
||||
- vertexes
|
||||
---
|
||||
Entità di informazione [[scalare]] in un [[grafo]].
|
||||
|
||||
Può essere connesso ad altri nodi attraverso [[arco di un grafo|archi]].
|
8
0 - Generale/percorso di un grafo.md
Normal file
8
0 - Generale/percorso di un grafo.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
aliases:
|
||||
- percorso
|
||||
- trail
|
||||
- path
|
||||
---
|
||||
|
||||
[[cammino di un grafo]] senza [[arco di un grafo|archi]] ripetuti.
|
|
@ -21,17 +21,17 @@
|
|||
|
||||
==[Come è stato determinato?]==
|
||||
|
||||
## [[Costo computazionale]]
|
||||
## [[costo computazionale]]
|
||||
|
||||
| Costo | [[notazione O-grande]] |
|
||||
|-|-|
|
||||
| [[spazio]] | ==[O()]== |
|
||||
| [[tempo]] | ==[O()]== |
|
||||
| [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/spazio]] | ==[O()]== |
|
||||
| [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo]] | ==[O()]== |
|
||||
|
||||
### [[9 - Algoritmi distribuiti/1 - Problemi/spazio|Spazio]]
|
||||
### [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/spazio|Spazio]]
|
||||
|
||||
==[Dimostrazione del costo di spazio]==
|
||||
|
||||
### [[9 - Algoritmi distribuiti/1 - Problemi/tempo|Tempo]]
|
||||
### [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo|Tempo]]
|
||||
|
||||
==[Dimostrazione del costo di tempo]==
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
- **==[Categoria]==**
|
||||
- ==[Restrizione]==
|
||||
|
||||
## [[Comportamento]]
|
||||
## [[comportamento]]
|
||||
|
||||
> [!Summary]
|
||||
> ==[Riassunto]==
|
||||
|
@ -31,12 +31,12 @@
|
|||
| Costo | [[notazione O-grande]] |
|
||||
|-|-|
|
||||
| [[comunicazione]] | ==[O()]== |
|
||||
| [[tempo]] | ==[O()]== |
|
||||
| [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo]] | ==[O()]== |
|
||||
|
||||
### [[Comunicazione]]
|
||||
### [[comunicazione]]
|
||||
|
||||
==[Dimostrazione del costo di comunicazione]==
|
||||
|
||||
### [[Tempo]]
|
||||
### [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo]]
|
||||
|
||||
==[Dimostrazione del costo di tempo]==
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[[Misura]] in un [[grafo]].
|
||||
|
||||
Corrisponde alla [[lunghezza]] di ciascun [[percorso]] tra due [[nodo di un grafo|nodi]].
|
||||
Corrisponde alla [[lunghezza]] di ciascun [[percorso di un grafo]] tra due [[nodo di un grafo|nodi]].
|
||||
$$
|
||||
\def \source {{\color{cyan} src}}
|
||||
\def \destination {{\color{magenta} dst}}
|
||||
|
|
|
@ -1 +1 @@
|
|||
Particolare [[percorso]] in un [[grafo]] che attraversa ogni [[arco di un grafo|arco]] una volta sola.
|
||||
Particolare [[percorso di un grafo]] che attraversa ogni [[arco di un grafo|arco]].
|
|
@ -4,6 +4,6 @@ aliases:
|
|||
---
|
||||
|
||||
|
||||
[[Algoritmo]] che per ogni [[istanza]] restituisce sempre la [[soluzione]] corrispondente.
|
||||
[[algoritmo]] che per ogni [[istanza]] restituisce sempre la [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione]] corrispondente.
|
||||
|
||||
> Un algoritmo non è *corretto* non solo se c'è qualche istanza per cui restituisce la soluzione sbagliata, ma anche se c'è qualche istanza **per cui non termina mai**!
|
|
@ -0,0 +1,6 @@
|
|||
Sequenza di caratteri [[polinomiale]].
|
||||
|
||||
Dimostra che una data [[istanza]] è un'[[istanza positiva]].
|
||||
|
||||
> Nel problema di [[esistenza di circuito hamiltoniano]], un [[certificato per un'istanza]] positiva è una sequenza di nodi attraversati che risulta in un [[ciclo hamiltoniano]].
|
||||
|
|
@ -4,7 +4,6 @@ aliases:
|
|||
- NP-complete
|
||||
- problema NP-complete
|
||||
---
|
||||
|
||||
[[Insieme]] di [[problema decisionale|problemi decisionali]] equivalenti tra loro.
|
||||
|
||||
Tutti i problemi della [[classe di problemi NP]] possono essere [[riduzione di Karp|ridotti]] ad essi:
|
|
@ -18,3 +18,4 @@ $$
|
|||
\end{cases}
|
||||
$$
|
||||
|
||||
Alternativamente, si può dimostrare che un singolo problema [[classe di problemi NP-completi|NP-complete]] sia riducibile ad esso.
|
|
@ -7,7 +7,7 @@ aliases:
|
|||
[[Misura]] che quantifica le [[risorsa|risorse]] necessarie a risolvere l'[[istanza]] peggiore di un [[problema computazionale]] in funzione della [[dimensione dell'input|dimensione del suo input]].
|
||||
|
||||
Può essere relativo a:
|
||||
- [[tempo]]
|
||||
- [[spazio]]
|
||||
- [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo]]
|
||||
- [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/spazio]]
|
||||
|
||||
> È spesso interessante studiarne i limiti, in particolare il limite inferiore.
|
|
@ -0,0 +1,5 @@
|
|||
[[Misura]] relativa ai [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/parametro|parametri]] che ne astrae la dimensione.
|
||||
|
||||
Calcolata in base a vari criteri:
|
||||
- [[criterio di costo logaritmico]]
|
||||
- [[criterio di costo uniforme]]
|
|
@ -0,0 +1,5 @@
|
|||
[[insieme]] di tutte le [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione|soluzioni]] di un [[problema computazionale]]:
|
||||
|
||||
$$
|
||||
\Huge S
|
||||
$$
|
|
@ -0,0 +1 @@
|
|||
[[problema computazionale]] che cerca una qualsiasi [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione]].
|
|
@ -30,6 +30,8 @@ $$
|
|||
\end{cases}
|
||||
$$
|
||||
|
||||
---
|
||||
|
||||
Se un problema non è [[polinomiale]], e può essere ridotto ad un altro, anche l'altro non è [[polinomiale]]:
|
||||
$$
|
||||
\large
|
||||
|
@ -46,6 +48,8 @@ $$
|
|||
\end{cases}
|
||||
$$
|
||||
|
||||
---
|
||||
|
||||
Infine, se due problemi possono ridursi a vicenda uno all'altro, essi sono [[problemi equivalenti|equivalenti]]:
|
||||
$$
|
||||
\large
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
aliases:
|
||||
- ottimale
|
||||
---
|
||||
|
||||
|
||||
[[9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione]] ad un [[problema di ottimizzazione]] in cui si cerca di trovare massimi e minimi di una [[funzione obiettivo]].
|
||||
|
||||
$$
|
||||
\Huge Result_{Optimal}
|
||||
$$
|
|
@ -0,0 +1,3 @@
|
|||
[[problema decisionale]].
|
||||
|
||||
Data una [[istanza]] di un [[problema computazionale]], e un [[certificato per un'istanza|certificato per la stessa]], determina se l'[[istanza]] è [[istanza positiva|positiva]] oppure no.
|
|
@ -1,49 +1,48 @@
|
|||
{
|
||||
"nodes":[
|
||||
{"id":"2fa2100ba46491e0","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema computazionale.md","x":400,"y":160,"width":400,"height":400,"color":"#ffffff"},
|
||||
{"id":"4d9df57404c587fb","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/algoritmo.md","x":960,"y":160,"width":400,"height":400},
|
||||
{"id":"b8b560342486fa07","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/algoritmo corretto.md","x":1520,"y":160,"width":400,"height":400},
|
||||
{"id":"84de9c7afe086bb2","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/istanza.md","x":1520,"y":-400,"width":400,"height":400},
|
||||
{"id":"99356f7338916f2a","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/parametro.md","x":960,"y":-400,"width":400,"height":400},
|
||||
{"id":"2b663ab68be70503","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/costo computazionale.md","x":1520,"y":-960,"width":400,"height":400},
|
||||
{"id":"6ea2fa5401a8dc2d","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/notazione asintotica.md","x":2080,"y":-960,"width":400,"height":400},
|
||||
{"id":"96087a1e560c5db9","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/notazione Ω-grande.md","x":2640,"y":-400,"width":400,"height":400},
|
||||
{"id":"4861d4d932bb49d1","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/notazione O-grande.md","x":2640,"y":-1520,"width":400,"height":400},
|
||||
{"id":"3ea93785ad795bc5","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/notazione Θ-grande.md","x":2640,"y":-960,"width":400,"height":400},
|
||||
{"id":"ced16fa489b483e4","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/notazione o-piccola.md","x":3200,"y":-1520,"width":400,"height":400},
|
||||
{"id":"30ece85688f3e1d6","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/notazione ω-piccola.md","x":3200,"y":-400,"width":400,"height":400},
|
||||
{"id":"fb78acc4fe436b2a","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/tempo.md","x":1520,"y":-1520,"width":400,"height":400},
|
||||
{"id":"662f16c70139f74d","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/spazio.md","x":960,"y":-1520,"width":400,"height":400},
|
||||
{"id":"e4114af324fea985","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema di ricerca.md","x":400,"y":720,"width":400,"height":400},
|
||||
{"id":"303dd65005ef65d1","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/dimensione dell'input.md","x":960,"y":-960,"width":400,"height":400},
|
||||
{"id":"41a5d32ee5783a9b","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/criterio di costo logaritmico.md","x":400,"y":-960,"width":400,"height":400},
|
||||
{"id":"22ab6112962c09a2","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/criterio di costo uniforme.md","x":400,"y":-1520,"width":400,"height":400},
|
||||
{"id":"0a7e255246795bd0","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/struttura dati.md","x":400,"y":-400,"width":400,"height":400},
|
||||
{"id":"505027c3f0cce7d1","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema trattabile.md","x":-160,"y":160,"width":400,"height":400},
|
||||
{"id":"72036b7f5bcb1cea","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema presumibilmente intrattabile.md","x":-160,"y":-400,"width":400,"height":400},
|
||||
{"id":"0ec6f096ff0db6c1","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema intrattabile.md","x":-160,"y":-960,"width":400,"height":400},
|
||||
{"id":"aaf848090d80e69c","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema irrisolvibile.md","x":-160,"y":-1520,"width":400,"height":400},
|
||||
{"id":"3fbf2a25d17d78cf","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema decisionale.md","x":960,"y":720,"width":400,"height":400},
|
||||
{"id":"38ba1863399c80c0","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema di ottimizzazione.md","x":-160,"y":720,"width":400,"height":400},
|
||||
{"id":"c41da8ad8618d49a","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema di minimizzazione.md","x":-720,"y":1280,"width":400,"height":400},
|
||||
{"id":"2d23bf1f559c76b3","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema di massimizzazione.md","x":-720,"y":720,"width":400,"height":400},
|
||||
{"id":"c183db924540bb16","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/classe di problemi P.md","x":1520,"y":1280,"width":400,"height":400},
|
||||
{"id":"1c97631823924bf3","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/certificato per un'istanza.md","x":2640,"y":160,"width":400,"height":400},
|
||||
{"id":"68315b5cd001b79f","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/istanza positiva.md","x":2080,"y":160,"width":400,"height":400},
|
||||
{"id":"69df0c39c81b3a96","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/istanza negativa.md","x":2080,"y":-400,"width":400,"height":400},
|
||||
{"id":"e16ab66f799f3ae2","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/classe di problemi NP.md","x":2640,"y":1280,"width":400,"height":400},
|
||||
{"id":"667eab670c20f925","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/verifica.md","x":2640,"y":720,"width":400,"height":400},
|
||||
{"id":"052bb54fc3e2bdd0","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/funzione costo.md","x":-1280,"y":1280,"width":400,"height":400},
|
||||
{"id":"ceb788423da6743f","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/funzione guadagno.md","x":-1280,"y":720,"width":400,"height":400},
|
||||
{"id":"1239fce8da90b379","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/ricerca di ciclo hamiltoniano.md","x":3200,"y":1280,"width":400,"height":400},
|
||||
{"id":"e5cca91ee7f4ab57","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/circuito di un grafo.md","x":3760,"y":1280,"width":400,"height":400},
|
||||
{"id":"42f22b07a767377f","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/riduzione di Karp.md","x":2080,"y":1280,"width":400,"height":400},
|
||||
{"id":"67e36944e3ac98a1","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/classe di problemi NP-completi.md","x":2080,"y":1840,"width":400,"height":400},
|
||||
{"id":"f02c184b8d016c3d","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/satisfability.md","x":2080,"y":2400,"width":400,"height":400},
|
||||
{"id":"2499685926aff387","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/tesi di Church-Turing.md","x":1520,"y":1840,"width":400,"height":400},
|
||||
{"id":"04da4a4d26b5e1fb","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/classe di problemi NP-difficili.md","x":2640,"y":1840,"width":400,"height":400},
|
||||
{"id":"752b123ee666a16f","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/problema del commesso viaggiatore.md","x":3200,"y":1840,"width":400,"height":400},
|
||||
{"id":"55f7a2f155a33bf9","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi/ottimizzazione → decisionale.md","x":400,"y":1280,"width":400,"height":400}
|
||||
{"id":"2fa2100ba46491e0","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/problema computazionale.md","x":400,"y":160,"width":400,"height":400,"color":"#ffffff"},
|
||||
{"id":"4d9df57404c587fb","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/algoritmo.md","x":960,"y":160,"width":400,"height":400},
|
||||
{"id":"b8b560342486fa07","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/algoritmo corretto.md","x":1520,"y":160,"width":400,"height":400},
|
||||
{"id":"84de9c7afe086bb2","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/istanza.md","x":1520,"y":-400,"width":400,"height":400},
|
||||
{"id":"99356f7338916f2a","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/parametro.md","x":960,"y":-400,"width":400,"height":400},
|
||||
{"id":"2b663ab68be70503","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/costo computazionale.md","x":1520,"y":-960,"width":400,"height":400},
|
||||
{"id":"6ea2fa5401a8dc2d","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/notazione asintotica.md","x":2080,"y":-960,"width":400,"height":400},
|
||||
{"id":"96087a1e560c5db9","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/notazione Ω-grande.md","x":2640,"y":-400,"width":400,"height":400},
|
||||
{"id":"4861d4d932bb49d1","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/notazione O-grande.md","x":2640,"y":-1520,"width":400,"height":400},
|
||||
{"id":"3ea93785ad795bc5","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/notazione Θ-grande.md","x":2640,"y":-960,"width":400,"height":400},
|
||||
{"id":"ced16fa489b483e4","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/notazione o-piccola.md","x":3200,"y":-1520,"width":400,"height":400},
|
||||
{"id":"30ece85688f3e1d6","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/notazione ω-piccola.md","x":3200,"y":-400,"width":400,"height":400},
|
||||
{"id":"fb78acc4fe436b2a","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo.md","x":1520,"y":-1520,"width":400,"height":400},
|
||||
{"id":"662f16c70139f74d","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/spazio.md","x":960,"y":-1520,"width":400,"height":400},
|
||||
{"id":"e4114af324fea985","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/problema di ricerca.md","x":400,"y":720,"width":400,"height":400},
|
||||
{"id":"303dd65005ef65d1","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/dimensione dell'input.md","x":960,"y":-960,"width":400,"height":400},
|
||||
{"id":"41a5d32ee5783a9b","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/criterio di costo logaritmico.md","x":400,"y":-960,"width":400,"height":400},
|
||||
{"id":"22ab6112962c09a2","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/criterio di costo uniforme.md","x":400,"y":-1520,"width":400,"height":400},
|
||||
{"id":"0a7e255246795bd0","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/struttura dati.md","x":400,"y":-400,"width":400,"height":400},
|
||||
{"id":"505027c3f0cce7d1","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/problema trattabile.md","x":-160,"y":160,"width":400,"height":400},
|
||||
{"id":"72036b7f5bcb1cea","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/problema presumibilmente intrattabile.md","x":-160,"y":-400,"width":400,"height":400},
|
||||
{"id":"0ec6f096ff0db6c1","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/problema intrattabile.md","x":-160,"y":-960,"width":400,"height":400},
|
||||
{"id":"aaf848090d80e69c","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/problema irrisolvibile.md","x":-160,"y":-1520,"width":400,"height":400},
|
||||
{"id":"3fbf2a25d17d78cf","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/problema decisionale.md","x":960,"y":720,"width":400,"height":400},
|
||||
{"id":"38ba1863399c80c0","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/problema di ottimizzazione.md","x":-160,"y":720,"width":400,"height":400},
|
||||
{"id":"c41da8ad8618d49a","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/problema di minimizzazione.md","x":-720,"y":1280,"width":400,"height":400},
|
||||
{"id":"2d23bf1f559c76b3","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/problema di massimizzazione.md","x":-720,"y":720,"width":400,"height":400},
|
||||
{"id":"c183db924540bb16","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/classe di problemi P.md","x":1520,"y":1280,"width":400,"height":400},
|
||||
{"id":"1c97631823924bf3","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/certificato per un'istanza.md","x":2640,"y":160,"width":400,"height":400},
|
||||
{"id":"68315b5cd001b79f","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/istanza positiva.md","x":2080,"y":160,"width":400,"height":400},
|
||||
{"id":"69df0c39c81b3a96","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/istanza negativa.md","x":2080,"y":-400,"width":400,"height":400},
|
||||
{"id":"e16ab66f799f3ae2","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/classe di problemi NP.md","x":2640,"y":1280,"width":400,"height":400},
|
||||
{"id":"667eab670c20f925","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/verifica.md","x":2640,"y":720,"width":400,"height":400},
|
||||
{"id":"052bb54fc3e2bdd0","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/funzione costo.md","x":-1280,"y":1280,"width":400,"height":400},
|
||||
{"id":"ceb788423da6743f","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/funzione guadagno.md","x":-1280,"y":720,"width":400,"height":400},
|
||||
{"id":"1239fce8da90b379","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/3 - Approssimazione di commesso viaggiatore/esistenza di circuito hamiltoniano.md","x":3200,"y":1280,"width":400,"height":400},
|
||||
{"id":"42f22b07a767377f","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/riduzione di Karp.md","x":2080,"y":1280,"width":400,"height":400},
|
||||
{"id":"67e36944e3ac98a1","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/classe di problemi NP-completi.md","x":2080,"y":1840,"width":400,"height":400},
|
||||
{"id":"f02c184b8d016c3d","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/satisfability.md","x":2080,"y":2400,"width":400,"height":400},
|
||||
{"id":"2499685926aff387","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/tesi di Church-Turing.md","x":1520,"y":1840,"width":400,"height":400},
|
||||
{"id":"04da4a4d26b5e1fb","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/classe di problemi NP-difficili.md","x":2640,"y":1840,"width":400,"height":400},
|
||||
{"id":"752b123ee666a16f","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/3 - Approssimazione di commesso viaggiatore/problema del commesso viaggiatore.md","x":3200,"y":1840,"width":400,"height":400},
|
||||
{"id":"55f7a2f155a33bf9","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/ottimizzazione → decisionale.md","x":400,"y":1280,"width":400,"height":400}
|
||||
],
|
||||
"edges":[
|
||||
{"id":"2ecf2377ed8b1bd7","fromNode":"2fa2100ba46491e0","fromSide":"right","toNode":"4d9df57404c587fb","toSide":"left"},
|
||||
|
@ -83,7 +82,6 @@
|
|||
{"id":"4ec32e21d3ba4428","fromNode":"3fbf2a25d17d78cf","fromSide":"right","toNode":"667eab670c20f925","toSide":"left"},
|
||||
{"id":"da58dff95c8a1205","fromNode":"667eab670c20f925","fromSide":"bottom","toNode":"e16ab66f799f3ae2","toSide":"top"},
|
||||
{"id":"a60dc6e6e34d8b3b","fromNode":"e16ab66f799f3ae2","fromSide":"right","toNode":"1239fce8da90b379","toSide":"left"},
|
||||
{"id":"78dfcdd3464ce41b","fromNode":"1239fce8da90b379","fromSide":"right","toNode":"e5cca91ee7f4ab57","toSide":"left"},
|
||||
{"id":"883e41806073c173","fromNode":"67e36944e3ac98a1","fromSide":"bottom","toNode":"f02c184b8d016c3d","toSide":"top"},
|
||||
{"id":"0bee7f08eaa49e34","fromNode":"e16ab66f799f3ae2","fromSide":"left","toNode":"42f22b07a767377f","toSide":"right"},
|
||||
{"id":"4f5e0f4a5c6258e4","fromNode":"42f22b07a767377f","fromSide":"bottom","toNode":"67e36944e3ac98a1","toSide":"top"},
|
||||
|
@ -92,6 +90,8 @@
|
|||
{"id":"f96b982c72439d11","fromNode":"e16ab66f799f3ae2","fromSide":"bottom","toNode":"04da4a4d26b5e1fb","toSide":"top"},
|
||||
{"id":"99bf4a794d69b88a","fromNode":"04da4a4d26b5e1fb","fromSide":"right","toNode":"752b123ee666a16f","toSide":"left"},
|
||||
{"id":"7f36b71875467a4f","fromNode":"38ba1863399c80c0","fromSide":"bottom","toNode":"55f7a2f155a33bf9","toSide":"left"},
|
||||
{"id":"558af60eebc73b7d","fromNode":"55f7a2f155a33bf9","fromSide":"right","toNode":"3fbf2a25d17d78cf","toSide":"bottom"}
|
||||
{"id":"558af60eebc73b7d","fromNode":"55f7a2f155a33bf9","fromSide":"right","toNode":"3fbf2a25d17d78cf","toSide":"bottom"},
|
||||
{"id":"3536458fc40fe4e3","fromNode":"1c97631823924bf3","fromSide":"bottom","toNode":"667eab670c20f925","toSide":"top"},
|
||||
{"id":"f8909ba1c5f0c023","fromNode":"1c97631823924bf3","fromSide":"right","toNode":"1239fce8da90b379","toSide":"top"}
|
||||
]
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
Sequenza di caratteri [[polinomiale]].
|
||||
|
||||
Dimostra che una data [[istanza]] è un'[[istanza positiva]].
|
||||
|
||||
> Nel problema di [[ricerca di ciclo hamiltoniano]], un [[certificato per un'istanza]] positiva è una sequenza di nodi attraversati che risulta in un [[ciclo hamiltoniano]].
|
||||
|
|
@ -1 +0,0 @@
|
|||
[[Percorso di un grafo]] che inizia e finisce allo stesso [[nodo di un grafo|nodo]].
|
|
@ -1,5 +0,0 @@
|
|||
[[Misura]] relativa ai [[parametro|parametri]] che ne astrae la dimensione.
|
||||
|
||||
Calcolata in base a vari criteri:
|
||||
- [[criterio di costo logaritmico]]
|
||||
- [[criterio di costo uniforme]]
|
|
@ -1,5 +0,0 @@
|
|||
[[insieme]] di tutte le [[soluzione|soluzioni]] di un [[problema computazionale]]:
|
||||
|
||||
$$
|
||||
\Huge S
|
||||
$$
|
|
@ -1,61 +0,0 @@
|
|||
---
|
||||
aliases:
|
||||
- traveling salesman problem
|
||||
- TSP
|
||||
---
|
||||
[[problema di ottimizzazione]] appartenente alla [[classe di problemi NP-difficili]].
|
||||
## Enunciato
|
||||
|
||||
Dato un [[grafo completo]] pesato, qual è il [[ciclo hamiltoniano]] di costo minimo?
|
||||
|
||||
### Verifica
|
||||
|
||||
Dato un [[grafo completo]] pesato, e un [[ciclo hamiltoniano]], esso è quello di costo minimo?
|
||||
|
||||
## Dimostrazione della [[classe di problemi NP-difficili]]
|
||||
|
||||
Si può fare uso della [[ricerca di ciclo hamiltoniano]] per dimostrare la classe di appartenenza di questo problema.
|
||||
$$
|
||||
\def \varGraphA {{\color{DarkSalmon} Graph_{Hamilton}}}
|
||||
\def \varEdgesA {{\color{LightSalmon} Edges_{Hamilton}}}
|
||||
\def \varGraphB {{\color{Orchid} Graph_{Salesman}}}
|
||||
\def \varEdgesB {{\color{Thistle} Edges_{Salesman}}}
|
||||
\def \varCost {{\color{MediumPurple} Cost_{Salesman}}}
|
||||
\def \varNodes {{\color{SpringGreen} Nodes_{Shared}}}
|
||||
|
||||
\tiny\color{Gray} [Definizione\ variabili\ \TeX\ qui]
|
||||
$$
|
||||
|
||||
Partiamo dal [[grafo]] semplice della [[ricerca di ciclo hamiltoniano]], che definiamo così:
|
||||
$$
|
||||
\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|completo]] e pesato:
|
||||
$$
|
||||
\varGraphB = (\varNodes, \varEdgesB)
|
||||
$$
|
||||
|
||||
Allora, sfruttiamo i pesi a nostro vantaggio per creare un grafo in cui gli archi di $\varGraphA$ siano sempre preferiti nella scelta del percorso:
|
||||
$$
|
||||
\forall\ edge \in \varEdgesB : cost(edge) = \begin{cases}
|
||||
\textrm{if}\ edge \in \varEdgesA & 0
|
||||
\\\\
|
||||
\textrm{else} & 1
|
||||
\end{cases}
|
||||
$$
|
||||
Una volta determinata la soluzione del problema del commesso viaggiatore, giungeremo a conoscenza del costo minimo del percorso che attraversa tutti i nodi:
|
||||
$$
|
||||
travelingSalesmanProblem(\varGraphB) = \varCost
|
||||
$$
|
||||
|
||||
In base al costo minimo $\varCost$ risultante, possiamo determinare la risposta al problema di [[ricerca di ciclo 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 archi ulteriori per formare un [[ciclo hamiltoniano]]:
|
||||
$$
|
||||
\begin{cases}
|
||||
\textrm{if}\ \varCost = 0 & \exists\ hamiltonianCycle(\varGraphA)
|
||||
\\\\
|
||||
\textrm{else} & \not\exists\ hamiltonianCycle(\varGraphA)
|
||||
\end{cases}
|
||||
$$
|
|
@ -1 +0,0 @@
|
|||
[[problema computazionale]] che cerca una qualsiasi [[soluzione]].
|
|
@ -1,5 +0,0 @@
|
|||
[[soluzione]] ad un [[problema di ottimizzazione]] in cui si cerca di trovare massimi e minimi di una [[funzione obiettivo]].
|
||||
|
||||
$$
|
||||
\Huge Result_{Optimal}
|
||||
$$
|
|
@ -1,3 +0,0 @@
|
|||
[[problema decisionale]].
|
||||
|
||||
Data una [[istanza]] di un [[problema computazionale]], e un blob di dati, determina se l'istanza è [[istanza positiva|positiva]] oppure no.
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
aliases:
|
||||
- branch
|
||||
- bound
|
||||
- pruning
|
||||
- branch-and-bound-and-pruning
|
||||
- branch-bound-pruning
|
||||
---
|
||||
|
||||
Tecnica [[algoritmo|algoritmica]] di [[algoritmo di approssimazione|approssimazione]] per [[problema di ottimizzazione|problemi di ottimizzazione]].
|
||||
|
||||
Consiste in iterativamente:
|
||||
1. **Branch**: dividere lo spazio delle soluzioni in sottospazi più piccoli
|
||||
2. **Bound**: determinare il [[limite]] [[limite inferiore|inferiore]] o [[limite superiore|superiore]] di ciascun sottospazio
|
||||
3. **Pruning**: selezionare il sottospazio migliore per l'iterazione successiva, ed eliminare gli altri
|
|
@ -0,0 +1,3 @@
|
|||
[[albero]] che rappresenta i sottospazi delle soluzioni creati dal [[branch-and-bound]].
|
||||
|
||||
Le foglie che hanno subito [[branch-and-bound|pruning]] sono dette *morte*, le altre *vive*.
|
|
@ -0,0 +1 @@
|
|||
Misura di quanto una soluzione [[relax-and-round|rilassata]] dista dalla [[soluzione ottima]].
|
|
@ -0,0 +1,3 @@
|
|||
Tecnica [[algoritmo|algoritmica]] di [[algoritmo di approssimazione|approssimazione]] per [[problema di ottimizzazione]] [[linearità|lineare]] [[campo degli interi|intera]].
|
||||
|
||||
Consiste nello spostare temporaneamente il problema nel [[campo dei reali]], risolverlo in quel modo, e poi arrotondare per tornare nel [[campo degli interi]].
|
|
@ -1,5 +1,5 @@
|
|||
[[algoritmo di approssimazione]] che prende in input non solo un'[[istanza]] ma anche il [[fattore di approssimazione]] desiderato.
|
||||
|
||||
## [[Costo computazionale]]
|
||||
## [[costo computazionale]]
|
||||
|
||||
Per determinare il [[costo computazionale]] di uno schema di approssimazione, si considerano tutti i [[fattore di approssimazione|fattori di approssimanzione]] che esso può accettare.
|
|
@ -0,0 +1,6 @@
|
|||
Una [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione|soluzione ammissibile]] peggiore della [[soluzione ottima]].
|
||||
|
||||
$$
|
||||
\Huge
|
||||
Result_{Approximated}
|
||||
$$
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"nodes":[
|
||||
{"id":"f27083423b5ce0b0","type":"group","x":340,"y":-1060,"width":1000,"height":1000,"label":"Tecniche algoritmiche"},
|
||||
{"id":"9451981bfdd2a981","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/1 - Concetti di approssimazione/relax-and-round.md","x":360,"y":-1040,"width":400,"height":400},
|
||||
{"id":"fbf5dbbfad6f9348","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/classe di problemi NP-difficili.md","x":-200,"y":-1600,"width":400,"height":400},
|
||||
{"id":"68c6aaac015c3c1b","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/1 - Concetti di approssimazione/algoritmo di approssimazione.md","x":-200,"y":-480,"width":400,"height":400},
|
||||
{"id":"25e770ef03bf6f6a","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/1 - Concetti di approssimazione/soluzione approssimata.md","x":-760,"y":-480,"width":400,"height":400},
|
||||
{"id":"3b3a3fee0c686002","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione ottima.md","x":-760,"y":-1040,"width":400,"height":400},
|
||||
{"id":"d3a66736ae1b4178","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/1 - Concetti di approssimazione/branch-and-bound.md","x":360,"y":-480,"width":400,"height":400},
|
||||
{"id":"a2aa2311769dcada","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/1 - Concetti di approssimazione/execution tree.md","x":920,"y":-480,"width":400,"height":400},
|
||||
{"id":"993de4b86699c86f","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/1 - Concetti di approssimazione/fattore di approssimazione.md","x":-760,"y":80,"width":400,"height":400},
|
||||
{"id":"75c5c12b132e10d6","type":"file","file":"9 - Algoritmi distribuiti/1 - Problemi algoritmici/istanza.md","x":360,"y":80,"width":400,"height":400},
|
||||
{"id":"c4962bc76f879e6a","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/1 - Concetti di approssimazione/schema di approssimazione.md","x":-200,"y":640,"width":400,"height":400},
|
||||
{"id":"3a20406700085b56","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/1 - Concetti di approssimazione/schema di approssimazione interamente polinomiale.md","x":-200,"y":1200,"width":400,"height":400},
|
||||
{"id":"0ee41dbc522181e0","x":920,"y":-1040,"width":400,"height":400,"type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/1 - Concetti di approssimazione/integrality gap.md"}
|
||||
],
|
||||
"edges":[
|
||||
{"id":"014d3b710b06d441","fromNode":"fbf5dbbfad6f9348","fromSide":"bottom","toNode":"68c6aaac015c3c1b","toSide":"top"},
|
||||
{"id":"63fcf31ba1d446d8","fromNode":"68c6aaac015c3c1b","fromSide":"left","toNode":"25e770ef03bf6f6a","toSide":"right"},
|
||||
{"id":"931731cb3eb43519","fromNode":"68c6aaac015c3c1b","fromSide":"bottom","toNode":"c4962bc76f879e6a","toSide":"top"},
|
||||
{"id":"8a4546eb31bab92a","fromNode":"25e770ef03bf6f6a","fromSide":"bottom","toNode":"993de4b86699c86f","toSide":"top"},
|
||||
{"id":"3fb773cdf50d71a5","fromNode":"3b3a3fee0c686002","fromSide":"bottom","toNode":"25e770ef03bf6f6a","toSide":"top"},
|
||||
{"id":"cd23738869da4cba","fromNode":"993de4b86699c86f","fromSide":"right","toNode":"c4962bc76f879e6a","toSide":"top"},
|
||||
{"id":"2fc7166da3c3eccd","fromNode":"c4962bc76f879e6a","fromSide":"bottom","toNode":"3a20406700085b56","toSide":"top"},
|
||||
{"id":"33715763c097e85d","fromNode":"75c5c12b132e10d6","fromSide":"left","toNode":"c4962bc76f879e6a","toSide":"top"},
|
||||
{"id":"a5e5e63333c4ce58","fromNode":"d3a66736ae1b4178","fromSide":"right","toNode":"a2aa2311769dcada","toSide":"left"},
|
||||
{"id":"ae35ca332370768a","fromNode":"68c6aaac015c3c1b","fromSide":"right","toNode":"d3a66736ae1b4178","toSide":"left"},
|
||||
{"id":"af1dac33e491fbc2","fromNode":"68c6aaac015c3c1b","fromSide":"right","toNode":"9451981bfdd2a981","toSide":"left"},
|
||||
{"id":"93eb9d5bfbf5c5bc","fromNode":"9451981bfdd2a981","fromSide":"right","toNode":"0ee41dbc522181e0","toSide":"left"}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
aliases:
|
||||
- "maximal matching"
|
||||
---
|
||||
|
||||
Particolare [[abbinamento]].
|
||||
|
||||
È tale che non vi possono essere aggiunti altri [[arco di un grafo|archi]].
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
aliases:
|
||||
- "perfect matching"
|
||||
---
|
||||
|
||||
Particolare [[abbinamento]].
|
||||
|
||||
L'[[unione]] di tutti i loro [[nodo di un grafo|nodi]] adiacenti coincide con i [[nodo di un grafo|nodi]] presenti nel [[grafo]] stesso.
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
aliases:
|
||||
- "matching"
|
||||
---
|
||||
|
||||
[[Insieme]] di [[arco di un grafo|archi]] senza [[nodo di un grafo|nodi]] in comune.
|
|
@ -0,0 +1,74 @@
|
|||
[[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
|
||||
$$
|
|
@ -1,4 +1,4 @@
|
|||
[[algoritmo di approssimazione]] di [[vertex cover]].
|
||||
[[algoritmo di approssimazione]] di [[minimal vertex cover problem]].
|
||||
|
||||
## Funzionamento
|
||||
|
||||
|
@ -8,6 +8,8 @@
|
|||
> 2. aggiungi i due [[nodo di un grafo|nodi]] che lo collegano al [[vertex cover]]
|
||||
> 3. rimuovi dal [[grafo]] tutti gli [[arco di un grafo|archi]] adiacenti ai [[nodo di un grafo|nodi]] aggiunti
|
||||
|
||||
Gli [[arco di un grafo|archi]] selezionati formano un [[abbinamento massimale]].
|
||||
|
||||
## [[algoritmo corretto|Correttezza]]
|
||||
|
||||
> [!Success]
|
||||
|
@ -17,21 +19,23 @@
|
|||
|
||||
## [[fattore di approssimazione|Fattore di approssimazione]]
|
||||
|
||||
Il [[vertex cover]] [[soluzione ottima|ottimale]] ==something something metà dei nodi==
|
||||
Il [[vertex cover]] [[soluzione ottima|ottimale]] deve toccare tutti gli [[arco di un grafo|archi]], inclusi quelli selezionati dall'algoritmo.
|
||||
|
||||
Il [[fattore di approssimazione]] è:
|
||||
Perchè ciò avvenga, almeno uno dei due [[nodo di un grafo|nodi]] che essi connettono devono essere selezionati dall'[[soluzione ottima]].
|
||||
|
||||
Pertanto, il [[fattore di approssimazione]] è:
|
||||
$$
|
||||
\Huge 2
|
||||
$$
|
||||
|
||||
## [[Costo computazionale]]
|
||||
## [[costo computazionale]]
|
||||
|
||||
| Costo | [[notazione O-grande]] |
|
||||
|-|-|
|
||||
| [[spazio]] | ... |
|
||||
| [[tempo]] | $O(Edges)$ |
|
||||
| [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/spazio]] | ... |
|
||||
| [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo]] | $O(Edges)$ |
|
||||
|
||||
### [[9 - Algoritmi distribuiti/1 - Problemi/tempo|Tempo]]
|
||||
### [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/tempo|Tempo]]
|
||||
|
||||
Nel caso peggiore, il numero di iterazioni effettuate è pari alla metà del numero degli [[arco di un grafo|archi]], cioè:
|
||||
$$
|
|
@ -8,4 +8,4 @@ Dato un [[grafo]], si vuole determinare il [[vertex cover]] composto dal numero
|
|||
|
||||
### Di approssimazione
|
||||
|
||||
- [[algoritmo senza nome approssimato greedy di vertex cover]]
|
||||
- [[approssimazione a 2 di minimal vertex cover standard]]
|
|
@ -0,0 +1,6 @@
|
|||
Particolare [[insieme]] di [[nodo di un grafo|nodi]].
|
||||
|
||||
L'[[unione]] di tutti i loro [[arco di un grafo|archi]] adiacenti coincide con gli [[arco di un grafo|archi]] presenti nel [[grafo]] stesso.
|
||||
|
||||
> [!Tip]
|
||||
> Un insieme di [[nodo di un grafo|nodi]] che toccano tutti gli [[arco di un grafo|archi]].
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"nodes":[
|
||||
{"id":"6221db7b45511f2d","type":"group","x":780,"y":-340,"width":1000,"height":1000,"label":"Creando un abbinamento massimale"},
|
||||
{"id":"74f5796de3293a66","x":780,"y":780,"width":1000,"height":1000,"type":"group","label":"Tramite relax-and-round"},
|
||||
{"id":"73a99c0a14178a2b","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/2 - Approssimazione di vertex cover/minimal vertex cover problem.md","x":-320,"y":-320,"width":960,"height":960},
|
||||
{"id":"48fd7f9755552296","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/2 - Approssimazione di vertex cover/vertex cover.md","x":-40,"y":-880,"width":400,"height":400},
|
||||
{"id":"7ba621fac863e8d2","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/2 - Approssimazione di vertex cover/approssimazione a 2 di minimal vertex cover standard.md","x":800,"y":-320,"width":960,"height":960},
|
||||
{"id":"970bd24b72f8c5f2","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/2 - Approssimazione di vertex cover/abbinamento.md","x":1080,"y":-1440,"width":400,"height":400},
|
||||
{"id":"72fb1bbb10967056","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/2 - Approssimazione di vertex cover/abbinamento perfetto.md","x":1640,"y":-880,"width":400,"height":400},
|
||||
{"id":"fa8df1320b3ed088","type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/2 - Approssimazione di vertex cover/abbinamento massimale.md","x":1080,"y":-880,"width":400,"height":400},
|
||||
{"id":"f96879f056fe7aa8","x":800,"y":800,"width":960,"height":960,"type":"file","file":"9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/2 - Approssimazione di vertex cover/approssimazione a 2 di minimal vertex cover con relax-and-round.md"}
|
||||
],
|
||||
"edges":[
|
||||
{"id":"4c850dafac1de915","fromNode":"48fd7f9755552296","fromSide":"bottom","toNode":"73a99c0a14178a2b","toSide":"top"},
|
||||
{"id":"93de889933822bfc","fromNode":"970bd24b72f8c5f2","fromSide":"bottom","toNode":"fa8df1320b3ed088","toSide":"top"},
|
||||
{"id":"c9e31190f4515460","fromNode":"970bd24b72f8c5f2","fromSide":"bottom","toNode":"72fb1bbb10967056","toSide":"top"},
|
||||
{"id":"f67fbfb93a1d887e","fromNode":"fa8df1320b3ed088","fromSide":"bottom","toNode":"6221db7b45511f2d","toSide":"top"},
|
||||
{"id":"dac608e861af27c2","fromNode":"73a99c0a14178a2b","fromSide":"right","toNode":"6221db7b45511f2d","toSide":"left"},
|
||||
{"id":"e92e7e13b95d340b","fromNode":"73a99c0a14178a2b","fromSide":"right","toNode":"74f5796de3293a66","toSide":"left"}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
[[sottografo]].
|
||||
|
||||
Determinato dall'[[unione]] di:
|
||||
- un [[minimum spanning tree]]
|
||||
- un [[nodo di un grafo|nodo]] esterno ad esso
|
||||
- due [[arco di un grafo|archi]] che connettono il [[entità|nodo]] esterno al [[minimum spanning tree]]
|
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 133 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 133 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 133 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 133 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 133 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 133 KiB |
|
@ -0,0 +1,140 @@
|
|||
[[algoritmo di approssimazione]] di [[problema del commesso viaggiatore|minimizzazione di circuito hamiltoniano]], che migliora la [[approssimazione a 2 di problema del commesso viaggiatore con costo degli archi triangolare]].
|
||||
|
||||
## Restrizioni aggiuntive
|
||||
|
||||
- [[costo degli archi triangolare]]
|
||||
|
||||
## Funzionamento
|
||||
|
||||
> [!Summary]+ Summary ma non troppo
|
||||
> Si effettuano i seguenti passi:
|
||||
> 1. si crea un [[minimum spanning tree]] del [[grafo]];
|
||||
> 2. da esso, si crea un [[sottografo]] [[induzione di sottografo|indotto]] dai [[nodo di un grafo|nodi]] che nel [[minimum spanning tree]] hanno [[grado di un nodo|grado]] dispari;
|
||||
> 3. si determina l'[[abbinamento perfetto]] di [[funzione costo|costo]] [[problema di minimizzazione|minimo]] del sottografo;
|
||||
> 4. si [[unione|uniscono]] [[minimum spanning tree]] e [[abbinamento perfetto]] [[problema di minimizzazione|minimo]] per creare un [[grafo]] temporaneo su cui effettuare i calcoli;
|
||||
> 5. si usa l'[[algoritmo di Fleury per circuito euleriano]] per trovare un [[circuito euleriano]] sul [[grafo]] temporaneo;
|
||||
> 6. grazie al [[costo degli archi triangolare]] si rimuovono tutte le visite ripetute ai [[nodo di un grafo|nodi]], ottenendo un [[circuito hamiltoniano]].
|
||||
|
||||
## [[algoritmo corretto|Correttezza]]
|
||||
|
||||
> [!Success] ==Sì==
|
||||
|
||||
## [[fattore di approssimazione|Fattore di approssimazione]]
|
||||
|
||||
Esiste un [[circuito hamiltoniano]] [[soluzione ottima|ottimale]] di costo:
|
||||
$$
|
||||
\def \varOptimal {{\color{Gold} Optimal}}
|
||||
\large \varOptimal
|
||||
$$
|
||||
|
||||
---
|
||||
|
||||
Si [[induzione di sottografo|induce]] un [[sottografo]] da tutti i [[nodo di un grafo|nodi]] con [[grado di un nodo|grado]] dispari nel [[minimum spanning tree]].
|
||||
|
||||
Essendo il [[grafo]] originale [[grafo completo|completo]], anche il [[sottografo]] lo sarà, pertanto, dovrà sicuramente esistere in esso un [[circuito hamiltoniano]] [[problema di minimizzazione|minimo]] di peso:
|
||||
$$
|
||||
\def \varSubHamilton {{\color{DarkKhaki} SubHamilton}}
|
||||
\large \varSubHamilton
|
||||
$$
|
||||
Avendo tolto dei [[nodo di un grafo|nodi]] dal [[grafo]] iniziale, per la [[costo degli archi triangolare|proprietà triangolare per il costo degli archi]] possiamo dire che:
|
||||
$$
|
||||
\varSubHamilton \leq \varOptimal
|
||||
$$
|
||||
|
||||
---
|
||||
|
||||
Dividiamo gli [[arco di un grafo|archi]] del sotto-[[circuito hamiltoniano]] [[problema di minimizzazione|minimo]] in due [[insieme|insiemi]], visitandoli e alternandoli uno ad uno nel primo e nel secondo insieme, ottenendo così due [[abbinamento perfetto|abbinamenti perfetti]] (non minimi) di [[funzione costo|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|costo]] [[problema di minimizzazione|minimo]] realizzato dall'algoritmo:
|
||||
$$
|
||||
\def \varMatchingOpt {{\color{PaleGreen} Matching}}
|
||||
\large \varMatchingOpt
|
||||
$$
|
||||
|
||||
Essendo l'[[abbinamento]] [[problema di minimizzazione|minimo]] ed il [[grafo]] [[grafo completo|completo]], abbiamo che:
|
||||
$$
|
||||
\varMatchingOpt \leq \varMatchingA
|
||||
$$
|
||||
$$
|
||||
\varMatchingOpt \leq \varMatchingB
|
||||
$$
|
||||
E quindi:
|
||||
$$
|
||||
2 \cdot \varMatchingOpt \leq \varMatchingA + \varMatchingB
|
||||
$$
|
||||
Dato che i due [[abbinamento perfetto|abbinamenti perfetti]] contengono tutti gli [[arco di un grafo|archi]] del sotto-[[circuito hamiltoniano]] [[problema di minimizzazione|minimo]]:
|
||||
$$
|
||||
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|arco]] qualsiasi dal [[circuito hamiltoniano]] [[soluzione ottima|ottimale]]:
|
||||
$$
|
||||
\varTree \leq \varOptimal
|
||||
$$
|
||||
|
||||
---
|
||||
|
||||
Il [[circuito euleriano]] restituito dall'[[algoritmo di Fleury per circuito euleriano|algoritmo di Fleury]] ha un peso totale di:
|
||||
$$
|
||||
\def \varFleury {{\color{Purple} Fleury}}
|
||||
\large \varFleury
|
||||
$$
|
||||
Dato che esso attraversa tutti gli [[arco di un grafo|archi]] del [[minimum spanning tree]] e dell'[[abbinamento perfetto]], possiamo dire che:
|
||||
$$
|
||||
\varFleury = \varTree + \varMatchingOpt
|
||||
$$
|
||||
|
||||
---
|
||||
|
||||
Possiamo usare però la [[costo degli archi triangolare|proprietà triangolare per il costo degli archi]] per rimuovere tutti i [[nodo di un grafo|nodi]] 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}
|
||||
$$
|
||||
|
||||
|
||||
## Altre fonti
|
||||
|
||||
> [!Quote]- Di Snowy
|
||||
> ![[Pasted image 20231209021058.png]]
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
aliases:
|
||||
- algoritmo di Fleury
|
||||
---
|
||||
|
||||
[[algoritmo]] di [[ricerca di circuito euleriano]].
|
||||
|
||||
> [!Summary]
|
||||
> Parte da un [[nodo di un grafo|nodo]], e continua a selezionare [[arco di un grafo|archi]] non già attraversati fino a quando non sono stati attraversati tutti.
|
|
@ -0,0 +1,92 @@
|
|||
[[algoritmo di approssimazione]] di [[problema del commesso viaggiatore|minimizzazione di circuito hamiltoniano]].
|
||||
|
||||
## Restrizioni aggiuntive
|
||||
|
||||
- [[costo degli archi triangolare]]
|
||||
|
||||
## 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|nodo]] 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|nodi]] a una lista, determinando così un [[percorso hamiltoniano]];
|
||||
> 3. infine, si connettono primo e ultimo [[nodo di un grafo|nodo]], ottenendo così un [[circuito hamiltoniano]].
|
||||
|
||||
## [[algoritmo corretto|Correttezza]]
|
||||
|
||||
> [!Success]
|
||||
> L'[[algoritmo]] produce sempre una [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione|soluzione ammissibile]] in tempo finito.
|
||||
|
||||
## [[fattore di approssimazione|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|nodi]] 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|archi]] due volte:
|
||||
$$
|
||||
\varFullWalk
|
||||
=
|
||||
2 \cdot \varTree
|
||||
$$
|
||||
|
||||
---
|
||||
|
||||
Possiamo usare però la [[costo degli archi triangolare|proprietà triangolare per il costo degli archi]] per rimuovere tutti i [[nodo di un grafo|nodi]] 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|ottimale]]:
|
||||
$$
|
||||
\def \varOptimal {{\color{Gold} Optimal}}
|
||||
\large \varOptimal
|
||||
$$
|
||||
Da esso, possiamo ottenere uno [[spanning tree]] rimuovendo un [[canale di comunicazione|arco]] 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 |
|
|
@ -0,0 +1,61 @@
|
|||
[[algoritmo di approssimazione]] di [[problema del commesso viaggiatore]].
|
||||
|
||||
## Funzionamento
|
||||
|
||||
> [!Summary]
|
||||
> Il [[grafo]] viene diviso in più [[sottografo|sottografi]], di cui si cercano i rispettivi [[circuito hamiltoniano|circuiti hamiltoniani]] [[problema di minimizzazione|minimi]].
|
||||
|
||||
### [[branch-and-bound|Branch]]
|
||||
|
||||
Si seleziona un [[nodo di un grafo|nodo]]:
|
||||
- se questa è la prima iterazione, se ne seleziona uno qualsiasi;
|
||||
- altrimenti, uno che ha grado $\geq 3$ nell'[[1-tree]];
|
||||
- se non ce ne sono, abbiamo trovato il [[circuito hamiltoniano]] [[minimo locale]].
|
||||
|
||||
Per ciascuna selezione possibile di due [[arco di un grafo|archi]] incidenti su di esso, si crea un nuovo [[branch-and-bound|branch]] che esclude tutti gli altri.
|
||||
|
||||
> [!Example]-
|
||||
>
|
||||
> #### 1-tree con nodi selezionabili evidenziati
|
||||
>
|
||||
> ![[Branch 1.svg]]
|
||||
>
|
||||
> #### Tre dei sei branch risultanti
|
||||
>
|
||||
> ![[Branch 1A.svg]]
|
||||
>
|
||||
> ![[Branch 1B.svg]]
|
||||
>
|
||||
> ![[Branch 1C.svg]]
|
||||
|
||||
|
||||
### [[branch-and-bound|Bound]]
|
||||
|
||||
Per ciascun [[branch-and-bound|branch]]:
|
||||
1. si crea un [[sottografo]] escludendo il [[nodo di un grafo|nodo]] in questione tutti gli [[arco di un grafo|archi]] incidenti su esso
|
||||
2. si determina il [[minimum spanning tree]] del grafo
|
||||
3. si selezionano i due [[arco di un grafo|archi]] pertinenti al [[branch-and-bound|branch]] in questione
|
||||
4. si [[unione|uniscono]] [[minimum spanning tree]] e due [[arco di un grafo|archi]], formando un **[[1-tree]]**
|
||||
5. si usa come valore di bounding il [[funzione costo|costo]] dell'[[1-tree]]
|
||||
|
||||
> [!Example]-
|
||||
>
|
||||
> #### Grafo pesato iniziale
|
||||
> ![[Grafo pesato iniziale.svg]]
|
||||
>
|
||||
> #### Selezionato il nodo 1
|
||||
> ![[Bound 1.svg]]
|
||||
|
||||
> [!Success] Correttezza
|
||||
>
|
||||
> Il [[funzione costo|costo]] di un [[circuito hamiltoniano]] può essere visto come la somma di:
|
||||
> - il [[funzione costo|costo]] di un [[percorso di un grafo|percorso]] che collega i [[nodo di un grafo|nodi]] del [[sottografo]] del [[branch-and-bound|branch]] (uno [[spanning tree]])
|
||||
> - il [[funzione costo|costo]] dei due [[arco di un grafo|archi]] che collegano il [[nodo di un grafo|nodo]] escluso e il [[sottografo]]
|
||||
>
|
||||
> Nell'effettuare il [[branch-and-bound|bounding]], non siamo sicuri che il [[minimum spanning tree]] determinato sia anche un [[circuito hamiltoniano]], ma sappiamo che qualsiasi altra selezione di archi avrà sicuramente un costo maggiore.
|
||||
|
||||
### [[branch-and-bound|Pruning]]
|
||||
|
||||
Vengono eliminati i [[branch-and-bound|branch]]:
|
||||
- con un [[entità|nodo]] di [[grado di un nodo|grado]] $\leq 1$
|
||||
- senza un [[grafo connesso]]
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue