doc

annuncio pubblicitario
Esercizi – parte 1
MODELLO RAM E DIMENSIONE DELL’INPUT
1. Si consideri il seguente algoritmo per il calcolo del
massimo in un array di n elementi:
int arrayMax(int A[], int n) {
int i;
int currentMax=A[0];
for (i=0; i < n; i++)
if (A[i] > currentMax)
currentMax=A[i];
return currentMax;
}
Supponiamo di considerare una piattaforma particolare e
di aver stabilito (ad esempio mediante misurazioni
sperimentali) che su tale piattaforma i tempi di
esecuzione delle operazioni che ci interessano sono i
seguenti:
• Assegnazione di una variabile intera: 20 ns.
• Test: 10 ns.
• Incremento di una variabile intera (ad esempio i nel
ciclo
for):
30
ns.
•
Attivazione
della
funzione
(allocazione della memoria per le variabili locali,
creazione del record di attivazione ecc.): 50 ns.
• Esecuzione dell’istruzione return:30ns.
Si consideri l’input {7, 1, 4} e si confrontino i costi
dell’algoritmo su tale input quando i) si considerano i
tempi di calcolo delle operazioni visti sopra e ii) si
considerano i tempi di calcolo secondo il modello RAM.
2. Si supponga che l’input a un problema sia costituito
da n numeri interi rappresentati da 2 byte ciascuno. Qual
e’ la dimensione dell’input secondo i) il modello RAM e
ii) espresso in bit?
3. L’input a un problema e’ rappresentato da un numero
intero N. Qual e’ la dimensione dell’input?
ANALISI DEL CASO PEGGIORE
4. Si
supponga che un algoritmo per il calcolo del
prodotto di due matrici nxn a elementi interi richieda 3n3
operazioni nel caso peggiore. Si supponga per semplicita’
che tutte le operazioni richiedano 10ns per l’esecuzione
su una certa piattaforma Hw/Sw. Qual e’ il tempo di
esecuzione
nel
caso
peggiore
sulla
piattaforma
considerata quando
a) n=100 e b) n=1000? Qual e’ il
rapporto tra i tempi di esecuzione nei due casi?
5. Si consideri l’algoritmo dell’esercizio 1:
int arrayMax(int A[], int n) {
int i;
int currentMax=A[0];
for (i=0; i < n; i++)
if (A[i] > currentMax)
currentMax=A[i];
return currentMax;
}
Se ne valuti la complessita’ nel caso peggiore.
COMPLESSITA’ ASINTOTICA
6.
Si
dimostri
che
la
complessita’
dell’algoritmo al punto 5 e’ O(n).
asintotica
7. Mostrare che N lnN = O(N3/2) (es. 2.23 sul testo).
8. Si supponga di sapere che il tempo di calcolo
dell’algoritmo A e’ O(N logN) e quello di B e’ (N3).
Cosa implicano queste asserzioni circa le prestazioni
relative dei due algoritmi?
RICORRENZE
9. Ricavare la formula
Dimostrare che CN=O(N2).
2.1
sul
testo
(pag.
49).
10. Dimostrare che, se CN = CN/2 + 1 allora, CN = O(logN),
dove con logN indichiamo il logaritmo in base 2 di N. Si
usi il metodo di sostituzione. Si assuma N  2.
11. Dimostrare il seguente corollario del risultato
precedente: se CN = CN/2 + a, con a una costante positiva,
allora, CN = O(logN).
12. Dimostrare che, se CN = CN/2 + N allora, CN = O(N). Si
usi il metodo di sostituzione. Si assuma N  2.
ANALISI DI ALGORITMI
13. Si valuti la complessita’ asintotica del seguente
metodo per la ricerca sequenziale di un intero in un
array di interi positivi:
int seqsearch(int A[], int n, int val) {
int i ;
for (i=0; i < n; i++)
if (A[i] == val)
return i;
return -1; /* Restituisce –1 se val non trovato in A
*/
}
14. Si valuti la complessita’ asintotica del seguente
metodo Java per la ricerca binaria di un valore in un
array di interi positivi. Si supponga che A contenga
almeno 2 elementi.
int binsearch(int A[], int n, int val) {
/* Restituisce –1 se val non presente/*
/* Altrimenti restituisce il primo indice i tale che A[i]
== val */
return binsearch(A, 0, n-1, val);
/* Invoca metodo con stesso nome e diversa segnatura
N/
}
int binsearch(int A[], int l, int r, int val) {
int m = 0;
while (r >=l) {
m = (l+r)/2;
if (val == A[m})
return m;
if (val < A[m])
r = m-1;
else
l = m+1;
}
return -1;
}
APPLICAZIONI
15. Giovanni ha a disposizione due programmi A e B per
l’ordinamento di array interi. Il primo ha costo 2n2 nel
caso peggiore, mentre il secondo ha costo 15nlogn nel
caso peggiore, dove n e’ il numero di elementi presenti
nell’array. Per quali valori di n potrebbe essere
conveniente usare l’algoritmo A? Motivare la risposta. Si
supponga che 2 sia la base del logaritmo.
Scarica