Upload
francesco-spinelli
View
2
Download
0
Embed Size (px)
DESCRIPTION
ASD 2012 - 2013
Citation preview
5/26/2018 ASD12-13Appello2Recuperato
1/4
1) Teorema dell'esperto: (n) T(n/ ) log(n)T = 5 5 +n3/2
limnoo n
log (5)5
n log (n)3/2= 0
limnoo
n log (n)3/2
nlog (5)0.15= 0
Caso 1 con .1 = 0
(n) (n )T = 2
2) Spiegare cos' l'albero delle decisioni di un algoritmo. Dire perch l'albero delle
decisioni di un algoritmo generale di ordinamento ha altezza maggiore o uguale di
dove la dimensione dell'array in ingresso.og(n!)l 2 n
Vedi dimostrazione del limite inferiore del costo di un algoritmo di ordinamento nella lezione 6-7
3) Descrivere uno degli algoritmi visti a lezione per calcolare il numero di inversioni di
un array di n elementi in tempo (nlogn)O
MERGE-SORT (A, n)
return MERGE-SORT-RIC (A, 1, n)
MERGE-SORT-RIC (A, p, r)
if (p r) return 0
q = (p + r)/2
inv1 = MERGE-SORT-RIC (A, p, q)inv2 = MERGE-SORT-RIC (A, q + 1, r)
inv3 = MERGE (A, p, q, r)
return inv1 + inv2 + inv3
MERGE (A, p, q, r)
n1 = q p + 1
n2 = r q
for i = 1 to n1
L[i] = A[p + i 1]
for j = 1 to n2
R[j] = A[q + j]L[n1 + 1] =
R[n2 + 1] =
inv = 0
i = j = 1
for k = p to r
if (L[i] R[j] and i n1)
A[k] = L[i], i = i + 1
5/26/2018 ASD12-13Appello2Recuperato
2/4
else
A[k] = R[j], j = j + 1
inv = inv + n1 i + 1
return inv
4) Calcolare il massimo numero totale di nodi in un albero rosso-nero di altezza
nera e con un solo nodo rosso. Dimostrare che il massimo numero di nodi si hak
quando il nodo rosso uno dei figli della radice
Siccome lalbero contiene un nodo rosso esso non vuoto e quindi . Sek 1
dallalbero togliamo il sottoalbero con radice il nodo rosso e lo sostituiamo
con uno dei due sottoalberi radicati nei suoi figli otteniamo un albero rosso
nero con tutti i nodi neri e altezza nera k. Questalbero un albero binario
completo di altezza k ed ha quindi
k
i=0
2i = 2k+1 1
nodi. Per ottenere il numero di nodi dellalbero originario dobbiamo ag-
giungere il nodo rosso e il numero di nodi del sottoalbero tralasciato. Se il
nodo rosso si trova a profondit il sottoalbero tralasciato un albero binarioi
completo di altezza e contieneki
k
i=0
2i = 2ki+1 1
nodi. Il numero di nodi dellalbero originale, in funzione della profondit a cui si trova il nodo
rosso, quindi:
2k+1 1 + 1 + 2ki+1 1 = 2k+1 + 2ki+1 1
che massimo quando la profondit i del nodo rosso minima. Siccome la radice deve essere
nera, la profondit minima del nodo rosso 1 (il nodo rosso figlio della radice). Dunque il
massimo numero di nodi e
2k+1 + 2k 1
5) Scrivere una versione della funzione Search(x, i) che data la radice x di un albero
rosso-nero aumentato con il campo size ed un intero i cerca la chiave i-esima in ordine
di grandezza. Si suppone che dove il numero di chiavi presenti nellalbero1 in n
T. La complessit asintotica deve essere (log(n))O
SEARCH (x, i)
/* Precondizione: 1
5/26/2018 ASD12-13Appello2Recuperato
3/4
if left[x] = nil then nl=0
else nl=size[left[x]]
if i
5/26/2018 ASD12-13Appello2Recuperato
4/4
LINK(x,y)
if (x.rank>y.rank)
y.p=x
x.somma=x.somma+y.somma
elsex.p=y
y.somma = y.somma + x.somma
if (x.rank=y.rank)
y.rank = y.rank + 1
SUM-SET(x)
x = FIND-SET(x)
return x.somma