Docenti:
Marina Madonia &
Giuseppe Scollo
Università di Catania
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Informatica, I livello, AA 2008-09
principali criteri di qualità degli algoritmi
l'esercizio 2 della lezione precedente suggerisce un promettente metodo di sviluppo di algoritmi per la soluzione di problemi di una certa complessità:
a ben vedere, la realizzazione di ciascuna delle operazioni da considerare nella fase del raffinamento costituisce a sua volta un problema al quale si cerca un soluzione algoritmica... si può dunque reiterare il metodo a ciascuno dei problemi della seconda fase, abbassando gradualmente il livello di astrazione in successivi passi di raffinamento, finché non rimane alcuna operazione che non sia effettivamente eseguibile
≠
efficienza di codifica
un algoritmo per il problema proposto può servire, fra l'altro, a risolverne un po' diverso:
esempio | |
in | out |
1-3 | 1-3 |
2-4 | 2-4 |
3-0 | 3-0 |
1-0 | |
4-2 | |
0-2 | 0-2 |
2-1 |
altre varianti del problema proposto:
esempio | |
in | out |
1-0 | (1-3-0) |
4-2 | (2-4) |
2-1 | (1-3-0-2) |
≠
Cq
allora
union(Cp, Cq),
output p-q
un algoritmo semplice (non troppo: non richiede memorizzazione di tutte le coppie in input)
si abbiano N nodi: quale struttura dati concettuale di supporto all'algoritmo, introduciamo una sequenza di variabili idi (i=1,...,N) che soddisfi l'invariante:
se cn = p-q è la n-sima coppia in input, allora idp
=
idq sse Cp = Cq nel grafo costruito dalle coppie precedenti {cm | m<n}
≤
i
≤
N
≤
i
≤
N:
se idi = t
allora idi ← idq
cosa è esattamente una sequenza?
a ben vedere, una sequenza è una funzione, definita su un dominio (totalmente ordinato) di indici
le sequenze sono strutture dati di frequente impiego negli algoritmi; lo sono anche gli alberi:
cosa è esattamente un albero?
sebbene il grafo di un albero sia generalmente non orientato, la designazione di un vertice radice induce naturalmente un ordinamento parziale dei vertici, grazie all'assenza di cicli, dunque un orientamento degli archi
terminologia: padre, figli, foglie, sottoalbero, ...
=
n
input: 3-4, 4-1, 5-2, 0-2
Cp = Cq nel grafo costruito dalle coppie precedenti p-q sse idωp = idωq
input: 3-4, 4-1, 5-2, 3-5
efficienza dell'algoritmo quick-union : non sempre buona, può dover eseguire più di MN/2 istruzioni (per N nodi e M coppie in input), se M>N
≠
idωq
da connettere per union, manteniamo la
radice dell'albero più grande
=
1,...,N
input: 3-4, 4-1, 5-2, 3-5
efficienza di quick-union pesata : molto migliore della precedente, per la riduzione della lunghezza dei cammini, proporzionale non più a N bensì a lg N, anche nel caso peggiore
che "lezione di metodo" trarre dallo studio condotto sul problema della connettività?
punti salienti dello schema di studio degli algoritmi union-find: