Algoritmi e Strutture Dati
Capitolo 11: Strutture di dati e Progettazione Algoritmi
Alberto Montresor
Università di Trento
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a
copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative
Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
© Alberto Montresor
1
Introduzione
Dato un problema
✦
Non ci sono “ricette generali” per risolverlo in modo efficiente
✦
Tuttavia, è possibile evidenziare quattro fasi
✦
Classificazione del problema
✦
Caratterizzazione della soluzione
✦
Tecnica di progetto
✦
Utilizzo di strutture dati
✦
Note
✦
Non sono fasi strettamente sequenziali
✦
© Alberto Montresor
2
Classificazione di un problema
Fa parte di una classe più ampia di problemi?
✦
Problemi decisionali:
Il dato di ingresso soddisfa una certa proprietà?
✦
Soluzione: risposta sì/no
✦
Es: Stabilire se un grafo è connesso
✦
✦
Problemi di ricerca:
Spazio di ricerca: insieme di “soluzioni” possibili
✦
Soluzione ammissibile: soluzione che rispetta certi vincoli
✦
Es: posizione di una sottostringa in una stringa
✦
© Alberto Montresor
3
Introduzione
Problemi di ottimizzazione:
✦
Ogni soluzione è associata ad una funzione di costo
✦
Vogliamo trovare la soluzione di costo minimo
✦
Es: cammino più breve fra due nodi
✦
Problemi di approssimazione:
✦
A volte, trovare la soluzione ottima è computazionalmente impossibile
✦
Ci si accontenta di una soluzione approssimata:
✦
costo basso, ma non sappiamo se ottimo
✦
Es: problema del commesso viaggiatore
✦
© Alberto Montresor
4
Caratterizzazione della soluzione
Definire la soluzione dal punto di vista matematico
✦
Spesso la formulazione è banale...
✦
... ma può suggerire una prima idea di soluzione
✦
Es: Selection Sort:
✦
Data una sequenza di n elementi, una permutazione ordinata è data dal minimo seguita da una
permutazione ordinata dei restanti n-1 elementi
Le caratteristiche matematiche della soluzione possono suggerire una possibile
tecnica
✦
Esempio: sottostruttura ottima → programmazione dinamica
✦
© Alberto Montresor
5
Problema cammini minimi
Input
✦
Grafo orientato G=(V,E)
✦
Un nodo di partenza r
✦
Funzione di peso w: E → R
✦
Definizione
✦
Dato un cammino c = v1,v2, ..., vk con k > 1, il costo del cammino è dato da
✦
Output
✦
Trovare un cammino da r ad u, per ogni nodo u ∈ V , il cui costo sia minimo,
ovvero più piccolo o uguale del costo di qualunque altro cammino da r a u.
✦
© Alberto Montresor
6
Prospettiva
Cammini minimi da sorgente unica
✦
Input: nodo radice r
✦
Output: i cammini minimi che vanno da r a tutti gli altri nodi v
✦
Cammino minimo tra una coppia di vertici
✦
Input: una coppia di vertici r, d
✦
Output: un cammino minimo fra r e d
✦
Si risolve il primo problema e si estrae il cammino richiesto. Non si conoscono
algoritmi che abbiano tempo di esecuzione migliore.
✦
Cammini mimimi tra tutte le coppie di vertici
✦
Input: il grafo.
✦
Output: i cammini minimi fra tutte le coppie di vertici.
✦
Programmazione dinamica
✦
© Alberto Montresor
7
Problema cammini minimi
Come descrivere l’output:
✦
Si noti che due cammini minimi possono avere un tratto in comune….
✦
r
s
u
v
Non possono convergere in un nodo comune s dopo aver percorso un tratto iniziale
distinto
u
r
s
v
✦
Quindi, una soluzione ammissibile altro non è che un albero di copertura,
radicato in r, che include un cammino da r ad ogni altro nodo.
✦
© Alberto Montresor
8
Esempio
Nella figura
✦
✦
✦
un grafo con un ciclo negativo
✦
un grafo senza cicli negativi
✦
una soluzione ammissibile per G2
✦
una soluzione ottima per G2
Esempio di pesi negativi
Proprietario TIR
✦
Viaggiare carico → profitto
✦
Peso negativo
✦
Viaggiare scarico → perdita
✦
Peso positivo
✦
© Alberto Montresor
9
Caratterizzazione matematica soluzione
Definizione
✦
Sia T una soluzione ammissibile. Ogni nodo u è caratterizzato da un valore du,
che indica la distanza di u da r in T, uguale al costo del cammino fra r ed u in T
✦
Quali caratteristiche devono avere le distanze affinché T sia una soluzione ottima?
✦
Teorema di Bellman
✦
Una soluzione ammissibile T è ottima se e solo se valgono le seguenti condizioni:
✦
dv = du + w(u,v) per ogni arco (u,v) ∈ T
✦
dv ≤ du + w(u,v) per ogni arco (u,v) ∈ E
✦
Dimostrazione
✦
© Alberto Montresor
10
Programma prototipo
Note
✦
Se al termine dell’esecuzione qualche nodo mantiene una distanza infinita,
esso non è raggiungibile da r
✦
Come implementare la condizione ∃ ?
✦
© Alberto Montresor
11
Programma prototipo - maggiori dettagli
© Alberto Montresor
12
Programma prototipo - maggiori dettagli
© Alberto Montresor
13
Algoritmo di Dijkstra (1959)
Struttura dati
✦
Coda con priorità, realizzata tramite vettore ordinato
✦
© Alberto Montresor
14
Algoritmo di Dijkstra (1959)
© Alberto Montresor
15
Algoritmo di Dijkstra
Ipotesi: tutti i pesi sono positivi
✦
Ogni nodo viene estratto una e una sola volta
✦
Al momento dell’estrazione la sua distanza è minima
✦
Costo totale: O(n2)
✦
Costo Ripetizioni
Riga (1): O(n)
1
Riga (2):
O(n)
O(n)
Riga (3):
O(1)
O(n)
Riga (4): O(1)
O(m)
✦
✦
✦
✦
© Alberto Montresor
16
Algoritmo di Johnson (1977)
Struttura dati
✦
Coda con priorità, realizzata tramite Heap binario
✦
© Alberto Montresor
17
Algoritmo di Johnson
Ipotesi: tutti i pesi sono positivi
✦
Ogni nodo viene estratto una e una sola volta
✦
Al momento dell’estrazione la sua distanza è minima
✦
Costo totale: O(m log n)
✦
Costo
Riga (1): O(n)
Ripetizioni
1
✦
Riga (2):
O(log n)
O(n)
Riga (3):
O(log n)
O(n)
✦
✦
Riga (4): O(log n)
✦
© Alberto Montresor
O(m)
18
Algoritmo di Fredman-Tarjan (1987)
Struttura dati
✦
Coda con priorità, realizzata tramite Heap di Fibonacci
✦
© Alberto Montresor
19
Algoritmo di Fredman-Tarjan (1987)
Ipotesi: tutti i pesi sono positivi
✦
Ogni nodo viene estratto una e una sola volta
✦
Al momento dell’estrazione la sua distanza è minima
✦
Costo totale: O(m + n log n)
✦
Costo
Riga (1): O(n)
✦
Ripetizioni
1
Riga (2):
O(log n)
O(n)
Riga (3):
O(log n)
O(n)
✦
✦
Riga (4): O(1)
✦
© Alberto Montresor
O(m)
20
Algoritmo di Bellman - Ford - Moore (1958)
Struttura dati
✦
Coda
✦
www.xkcd.com
© Alberto Montresor
21
Algoritmo di Bellman - Ford - Moore (1958)
Funziona anche con pesi negativi
✦
Ogni nodo viene estratto al massimo n-1 volte
✦
Passata - definizione ricorsiva
✦
per k = 0, la zeresima passata consiste nell’estrazione del nodo r dalla coda S;
✦
per k > 0, la k-esima passata consiste nell’estrazione di tutti i nodi presenti in S al
termine della passata (k − 1)-esima.
✦
Passata k - cammini di lunghezza k
✦
Costo totale: O(mn)
✦
Costo
Riga (1): O(1)
Ripetizioni
1
✦
Riga (2):
O(1)
O(n2)
Riga (3):
O(1)
O(mn)
✦
✦
© Alberto Montresor
22
Algoritmo di Pape - D’Esopo (1974)
Struttura dati
✦
DeQueue
✦
© Alberto Montresor
23
Algoritmo di Pape - D’Esopo (1974)
Tempo di calcolo
✦
In generale, superpolinomiale
✦
In pratica, veloce per grafi che rappresentano reti di circolazione stradale
✦
© Alberto Montresor
24
Scarica

1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 11