1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-10-16 09:47:26 +00:00

Final update for Algoritmi distribuiti

This commit is contained in:
Steffo 2023-12-19 02:19:27 +01:00
parent be9dbc1f84
commit 1c4eb7fc50
Signed by: steffo
GPG key ID: 2A24051445686895
295 changed files with 2641 additions and 1942 deletions

2
.obsidian/app.json vendored
View file

@ -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,

View file

@ -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"
}
]
}

View file

@ -0,0 +1,10 @@
---
aliases:
- arco
- archi
- edge
- edges
---
Entità di informazione [[duale]] in un [[grafo]].
Connette due [[entità|nodi]].

View 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]].

View file

@ -0,0 +1,8 @@
---
aliases:
- circuito
- circuit
---
[[percorso di un grafo]] che inizia e finisce allo stesso [[nodo di un grafo|nodo]].

View 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]].

View file

@ -0,0 +1,8 @@
---
aliases:
- percorso
- trail
- path
---
[[cammino di un grafo]] senza [[arco di un grafo|archi]] ripetuti.

View file

@ -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]==

View file

@ -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]==

View file

@ -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}}

View file

@ -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]].

View file

@ -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**!

View file

@ -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]].

View file

@ -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:

View file

@ -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.

View file

@ -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.

View file

@ -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]]

View file

@ -0,0 +1,5 @@
[[insieme]] di tutte le [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione|soluzioni]] di un [[problema computazionale]]:
$$
\Huge S
$$

View file

@ -0,0 +1 @@
[[problema computazionale]] che cerca una qualsiasi [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione]].

View file

@ -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

View file

@ -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}
$$

View file

@ -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.

View file

@ -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"}
]
}

View file

@ -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]].

View file

@ -1 +0,0 @@
[[Percorso di un grafo]] che inizia e finisce allo stesso [[nodo di un grafo|nodo]].

View file

@ -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]]

View file

@ -1,5 +0,0 @@
[[insieme]] di tutte le [[soluzione|soluzioni]] di un [[problema computazionale]]:
$$
\Huge S
$$

View file

@ -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}
$$

View file

@ -1 +0,0 @@
[[problema computazionale]] che cerca una qualsiasi [[soluzione]].

View file

@ -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}
$$

View file

@ -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.

View file

@ -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

View file

@ -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*.

View file

@ -0,0 +1 @@
Misura di quanto una soluzione [[relax-and-round|rilassata]] dista dalla [[soluzione ottima]].

View file

@ -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]].

View file

@ -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.

View file

@ -0,0 +1,6 @@
Una [[9 - Algoritmi distribuiti/1 - Problemi algoritmici/soluzione|soluzione ammissibile]] peggiore della [[soluzione ottima]].
$$
\Huge
Result_{Approximated}
$$

View file

@ -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"}
]
}

View file

@ -0,0 +1,8 @@
---
aliases:
- "maximal matching"
---
Particolare [[abbinamento]].
È tale che non vi possono essere aggiunti altri [[arco di un grafo|archi]].

View file

@ -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.

View file

@ -0,0 +1,6 @@
---
aliases:
- "matching"
---
[[Insieme]] di [[arco di un grafo|archi]] senza [[nodo di un grafo|nodi]] in comune.

View file

@ -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
$$

View file

@ -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è:
$$

View file

@ -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]]

View file

@ -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]].

View file

@ -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"}
]
}

View file

@ -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

View file

@ -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]]

View file

@ -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.

View file

@ -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 |

View file

@ -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