Next: About this document ...
Esercizi di Preparazione
alla Prima Provetta
ASD1 2002-2003
Exercise 1
Allo scopo di tabulare
la sequenza dei numeri di Fibonacci,
come definiti dalla seguente ricorrenza
Si consideri la seguente procedura iterativa.
#include<iostream.h>
int main() {
int input_n; cout << "Dammi n: "; cin >> input_n; cout << endl;
long long int F[input_n +1]; F[0] = 0; F[1] = 1;
for(int n=0; n<=1; n++)
cout << "F[" << n << "] = " << F[n] << endl;
for(int n=2; n<=input_n; n++) {
F[n] = F[n-1]+F[n-2];
cout << "F[" << n << "] = " << F[n] << endl;
}
}
Si stabilisca l'ordine di crescita
del tempo di calcolo della procedura proposta.
Si stabilisca l'ordine di crescita
della memoria impiegata dalla procedura proposta.
Exercise 2
Il professor Tortoise,
propone di utilizzare la seguente procedura
ricorsiva allo scopo di tabulare i numeri di Fibonacci.
#include<iostream.h>
long long int F(int n) {
if(n==0) return 0;
if(n==1) return 1;
return F(n-1) + F(n-2);
}
int main() {
int input_n; cout << "Dammi n: "; cin >> input_n; cout << endl;
cout << "F[" << input_n << "] = " << F(input_n) << endl;
}
Si stabilisca l'ordine asintotico di crescita
per il tempo di calcolo della procedura
proposta dal professor Tortoise.
Si stabilisca l'ordine di crescita
della memoria impiegata dalla procedura di Tortoise.
Exercise 3
La seguente procedura esemplifica come
sia facile far sì che una procedura computi il
numero di passi da essa stessa compiuto.
Sapresti scrivere una ricorrenza che esprima
il numero di passi della procedura?
Credi di riuscire a risolvere tale ricorrenza,
almeno asintoticamente?
#include<iostream.h>
long long int MyTime(int n) {
int my_time = 1;
while( (n/=2) > 0) my_time += MyTime(n) +1;
return my_time;
}
int main() {
int input_n; cout << "Dammi n: "; cin >> input_n; cout << endl;
cout << "MyTime[" << input_n << "] = " << MyTime(input_n) << endl;
}
Exercise 4
Si determini l'andamento asintotico
di un tempo di calcolo

soggetto
alla seguente ricorrenza
Exercise 5
Dare un'algoritmo che ordini una sequenza
di

numeri interi compresi tra

e

con complessità asintotica

.
Quale è la complessità asintotica del tuo algoritmo?
In che senso puoi concludere che il tuo algoritmo è ottimo?
Exercise 6
Dare un'algoritmo lineare
che determini se in una sequenza di interi non negativi
sia presente almeno una coppia di interi la cui somma valga 17.
Qualora la sequenza in input fosse strettamente crescente,
potresti migliorare la complessità asintotica?
Exercise 7
Per

elementi distinti

con pesi positivi

tali che

,
il mediano pesato è l'elemento

che soddisfa le seguenti diseguaglianze:
e
Fornire un algoritmo che trovi il mediano pesato
in tempo

.
Aiuto:
Se non sai da che parte partire,
prova a porti prima degli obbiettivi più modesti,
che ti consentano di familiarizzare con il problema,
ad esempio:
- sapresti dimostrare l'esistenza del mediano pesato?
- sapresti fornire un algoritmo
per la ricerca del mediano pesato?
Exercise 8
Il
Problema dell'Ufficio Postale
è un problema di facility location
definito come segue.
Siano dati

punti

con pesi associati

.
Si desidera trovare un punto

(non necessariamente preso tra quelli
in input) che minimizzi la somma

,
dove

è la distanza tra due punti

e

.
- Spiegare che il mediano pesato
è un'ottima soluzione per il Problema dell'Ufficio Postale
in una dimensione, in cui i punti sono numeri reali della retta reale
e
.
- Trovare la soluzione per il Problema dell'Ufficio Postale
in due dimensioni,
dove i punti appartengano al piano
ed ove si faccia riferimento
alla distanza di Manhattan
.
- Sarebbe possibile generalizzare ad un numero arbitrario
di dimensioni?
Next: About this document ...
Romeo Rizzi
2002-10-18