doc

annuncio pubblicitario
Esame del corso di ALGORITMI E STRUTTURE DATI - Appello del 17/7/2002
Tempo a disposizione: 120 minuti
1. Si consideri il seguente array:
7
4
1
15
3
6
10
2
Si illustri l’esecuzione dell’algoritmo Merge Sort su tale array.
2. Considerare la seguente versione del MergeSort, in cui n si assume per semplicità potenza di 2 e
maggiore o uguale di 4:
MergeSort(int A[1,..,n]) {
if(n == 1)
return;
MergeSort(A[1,…,n/4]);
MergeSort(A[(n/4)+1,…,(1/2)*n];
MergeSort(A[(1/2)*n+1,…,(3/4)*n];
MergeSort(A[(3/4)*n+1,…,n]);
merge(A[1,…,n/4]), A[(n/4)+1,…,(1/2)*n],
A[(1/2)*n+1,…,(3/4)*n], A[(3/4)*n+1,…,n]);
/*merge ha costo O(n) */
return;
}
Mostrare che l’algoritmo ha complessità O(n logn).
3. Dire se la seguente matrice di adiacenza rappresenti o meno un grafo semplice (non diretto).
Motivare la risposta.
0

1
0

1
0

1 1 0 0

0 0 1 0
1 0 1 0

0 1 0 1
0 0 1 0 
4. Si consideri una classe BinSearchTree che implementi il tipo albero binario di ricerca con
chiavi intere. La classe è costruita a partire dalla classe BinNode, che implementa il generico nodo
dell’albero binario. Si supponga che le due classi abbiano già, tra gli altri, i seguenti campi e
metodi:
- int BinNode.key  valore della chiave associata al nodo in considerazione.
- BinNode BinNode.left  figlio sinistro del nodo in considerazione.
- BinNode BinNode.right  figlio destro del nodo in considerazione.
- BinNode BinTree.root  restituisce la radice dell’albero binario di ricerca.
Scrivere un metodo void ordineInverso() della classe BinSearchTree che stampi le chiavi di tutti i
nodi in ordine decrescente.
5. Si definiscano le proprietà di un albero B di ordine m. Dire quale sia l’ordine di grandezza della
profondità massima di un albero B di ordine m (non occorre dimostrare il risultato). Spiegare infine,
in base a quanto esposto, per quale motivo gli alberi di tipo B siano usati per implementare
dizionari su memoria secondaria.
Es. 2: sia C(n) il costo per input di dimensione n nel caso
peggiore. Allora, nel caso peggiore, avremo:
C(n)<= 4C(n/4) (costo delle 4 invocazioni di MergeSort
nel caso peggiore) + cn+a (costo di merge nel caso peggiore),
dove a e c sono costanti opportune. Tale equazione di ricorrenza
si può risolvere per sostituzione.
Es. 3: la matrice di un grafo semplice deve essere simmetrica.
Es. 4: Basta fare una visita simmetrica invertita (sia p il nodo
generico, si mostra solo la porzione fondamentale del metodo):
visita(p.right);
System.out.println(p.key);
visita(p.left);
Scarica