Professional Documents
Culture Documents
3 2
3 3
cammino: sequenza di vertici v1 ,v2 ,. . .vk tale per cui ogni coppia
di vertici consecutivi vi e vi+1 è adiacente (in grafo orientato:
catena)
Vittorio Maniezzo – Università di Bologna 4
Terminologia (2)
a b a b
c c
d e d e
abedce bedc
a b
c bec
d e
a b
c
cdec
d e
c c
d e d e
Vittorio Maniezzo – Università di Bologna 5
Terminologia 4
sottografo: sottinsieme di vertici e archi di un grafo dato
componente connessa: sottografo connesso massimale.
Ad es., il grafo sotto ha 3 componenti conesse
1
2
Grafi pesati:
Gli archi possono avere un peso (costo, guadagno) associate.
Il peso può essere determinato da una funzione : × →
Se non è specificato un peso su un arco, lo si assume infinito
5
3 2
2
9 3 8
4 6
10
3 3
2 6
1
3 7 Foresta
4
5 8
Vittorio Maniezzo – Università di Bologna 9
Alberi, definizioni
Se c'è un nodo radice viene implicitamente definita una relazione
di ordinamento fra nodi basata sulla distanza dalla radice in cui:
• Ogni nodo non radice ha un unico predecessore / padre
• Un nodo può avere più successori / discendenti / figli
• Un nodo senza successori è una foglia
• Un nodo con successori è un nodo interno
• La profondità di un nodo è la lunghezza di un cammino dalla
radice al nodo
• L'altezza di un nodo è la massima lunghezza di un cammino dal
nodo a una foglia
• L'altezza di un albero è l'altezza della radice
• Un livello / strato di un albero consiste di tutti i nodi con la stessa
profondità
• Il numero di livelli di un albero è pari alla sua altezza +1
Vittorio Maniezzo – Università di Bologna 10
Arborescenza
r Radice
y q
r è la radice
x è il padre di y
y è un figlio di x
Foglie
xeq sono avi di w
w eq sono discendenti di x
q è fratello di y
Vittorio Maniezzo – Università di Bologna 11
Problema: Ordinamento
Input: una sequenza di n numeri <a1,a2,…,an>
≤ > ≤ >
albero dei
≤ a1:a2 > confronti
a2:a3 a1:a3
≤ > ≤ >
MA
QUINDI
2h ≥ n!
h ≥ log(n!)
= log(1 · 2 · . . . · n/2 · . . . · n)
≥ log(1 · 1 · . . . · 1 · n/2 . . . · n/2 )
= log(( n/2 ) n/2 )
= n/2 log( n/2 )
ordinati
Insertion-sort(A)
1. for j=2 to size(A)
2. do key = A[j]
3. // insert A[j] in A[1,...,j-1]
4. i = j-1
5. while i>0 and A[i]>key
6. do A[i+1] = A[i]
7. i=i-1
8. A[i+1] = key
A = {5,2,4,6,1,3}
j=2 5 2 4 6 1 3
j=3 2 5 4 6 1 3
j=4 2 4 5 6 1 3
j=5 2 4 5 6 1 3
j=6 1 2 4 5 6 3
j=7 1 2 3 4 5 6
Ordinamento
Numeri
n numeri Insertion Sort
ordinati
A[1,...,n] = vettore
i,j,key = variabili
Vittorio Maniezzo – Università di Bologna 24
Astraendo …
Problema
Strutture
Dati
Vittorio Maniezzo – Università di Bologna 25
Insertion Sort
Insertion-sort(A)
1. for j=2 to size(A)
2. do key = A[j]
3. // insert A[j] in A[1,...,j-1]
4. i = j-1
5. while i>0 and A[i]>key
6. do A[i+1] = A[i]
7. i=i-1
8. A[i+1] = key
Insertion-sort(A)
1. for j=2 to size(A)
2. do key = read(j)
3. {insert A[j] in A[1,...,j-1]}
4. i = j-1
5. while i>0 and read(i)>key
6. do modify(i+1,read(i))
7. i=i-1
8. modify(i+1,key)
OPERAZIONI: read(i)
size(S)
modify(i,x)
DATI
+ “Che cosa”
OPERAZIONI
DATI
…….…
OP1 OP2 OPn
Insieme S di numeri
ADS = +
Read, Size, Modify
S=“A[1,…,n]” (vettore)
DS = Read(i)=“A[i]”
Modify(i,x)=“A[i]=x”
DS = come lo implementiamo ?
Insertion-sort(A)
3. i = j-1 C3 n-1
n
4. while i>0 and A[i]>key C4 ∑tj
j=2
n
5. do A[i+1] = A[i] C5 ∑(tj-1)
j=2
n
6. i=i-1 C6 ∑(tj-1)
j=2
tj
A[j]
tj numero di volte in cui viene eseguita l’istruzione while
Dipende dai dati in input
• caso ottimo: tj = 1
• caso pessimo: tj = j
• caso medio: tj = j/2