Laboratorio di Algoritmi e Strutture Dati ESONERO PARZIALE 8/11/2001
(Compito B)
PARTE A: Test a risposta multipla (barrare tutte le risposte corrette) B.A.1) Si consideri il seguente programma per l’ordinamento di un array:
void swap(int &a, int &b) { int temp;
temp = a;
a = b;
b = temp;
}
void selection_sort(int *A, int n) { int max=-∞, maxind;
if (n==0) exit();
for (int i=0; i<n; i++) if (A[i] > max) {
maxind=i;
max=A[i];
}
swap(A[n], A[i]);
selection_sort(A, n-1);
}
Qual è la complessità della funzione
selection_sortnel caso peggiore?
Θ (n) c
Θ (n
2) c
Θ (nlogn) c
Θ (n
2logn) c
altro c
B.A.2) Consideriamo una tabella hash in cui i conflitti sono risolti mediante concatenazione. Il valore atteso del numero di elementi in ogni posizione della tabella è:
E[n
h(k)] = α c
E[n
h(k)] = α solo se vale l’ipotesi di Hashing Semplice Uniforme c
E[n
h(k)] = O(m) c
E[n
h(k)] = O(m) solo se n = O(m) c
E[n
h(k)] = O(m) solo se n = O(m) e vale l’ipotesi di Hashing Semplice Uniforme c
B.A.3) Si consideri il seguente input per l’algoritmo heap_sort: <2, 4, 3, 1, 5, 6, 9>
Dopo aver costruito l’heap, quali delle seguenti sequenze parziali sono ottenute dall’algoritmo? (la prima sequenza rappresenta l’heap, la seconda rappresenta l’array parziale ordinato)
<6, 5, 3, 1, 4, 2>; <9> c
<6, 5, 3, 1, 2, 4>; <9> c
<5, 4, 3, 2, 1>; <6, 9> c
<5, 4, 3, 1, 2>; <6, 9> c
B.A.4) Si consideri il seguente input per l’algoritmo insertion_sort: <5, 8, 11, 2, 3, 4, 6>
Quali delle seguenti sequenze intermedie sono ottenute dall’algoritmo?
<2, 5, 8, 11, 4, 3, 6> c
<2, 5, 8, 11, 3, 4, 6> c
<2, 3, 5, 6, 11, 4, 8> c
<2, 3, 5, 8, 11, 4, 6> c
B.A.5) Che succede se nella costruzione di un max heap si effettua sull’array un ciclo for da 0 a n-1 anziché da
n/2-1 a 0?
vengono esaminate le foglie inutilmente c
l’algoritmo non è corretto c
aumenta la complessità dell’algoritmo c
niente c
PARTE B: Algoritmi
B.B.1) Si supponga definito il tipo di dato
struct nodo { int info;
struct nodo* left;
struct nodo* right;
};