Sei sulla pagina 1di 23

Esercizi

Liliana Lo Presti
Svolti in classe
3: return 0
4: thirdToLast 0
5: secondToLast 1
6: last 1
7: for i 3 to n do
8: current = last + secondToLast + thirdToLast
Esercizio 1
9:
10:
thirdToLast
secondToLast
secondToLast
last
11: last current
return last
• Dato il seguente frammento di codice, calcolare il costo di esecuzione
12:

con il criterio del costo unitario e con quello logaritmico


• Costo unitario: ogni operazione pesa 1
• Costo logaritmico: ogni operazione su x pesa max(1, log x)

Algorithm 11 Fragment 1
1: function f1
2: x 3
3: for i 1 to n do
4: x=x·x
5: return x

3
Soluzione
• Costo unitario: O(n)
• Costo logaritmico: O(2n)

[sketch della dimostrazione]


%
• Ad ogni iterazione ! = 3$ con costo log ! = 2* log 3
• + , = ∑0*./ 2* log 3 + log 2
• ∑0*./ log 2 ≤ , log , (si dimostra sviluppando la sommatoria e usando log 2 ≤ log ,)
7897:;<
• In generale, ∑6*.5 ! * = =>, ! ≠ 1
/97
Esercizio
Soluzione
• Costo unitario: O(n)
• Costo logaritmico: O(n2)

[sketch della dimostrazione]


• Ad ogni iterazione ! = 3$ con costo log ! = ( log 3
• ) * = ∑.$,- ( log 3 + log (
• ∑.$,- log ( ≤ * log * (si dimostra sviluppando la sommatoria e usando log ( ≤ log *)
.(.3-)
• In generale, ∑.$,- ( = 4
9: thirdToLast secondToLast
10: secondToLast last
11: last current
12: return last

Esercizio 2
Algorithm 11 Fragment 1
1: function f1
• 2:Datoxil seguente
3 frammento di codice, calcolare il costo di esecuzione
con ilfor
3: i
criterio1 to
deln costo
do unitario e con quello logaritmico
4: x=x·x
5:
• Costo unitario: ogni operazione pesa 1
return x
• Costo logaritmico: ogni operazione su x pesa max(1, log x)

Algorithm 12 Fragment 2
1: function f2
2: x 1
3: for i 1 to n do
4: x=x·x
5: return x

3
Soluzione
• Costo unitario: O(n)
• Costo logaritmico: O(n) se consideriamo solo la moltiplicazione, O(n
log n) se consideriamo anche la somma
Definizioni
• !(# $ ) è l’insieme delle funzioni &($) tali per cui
∃( > 0, $, ≥ 0 ∶ & $ ≤ ( 0 # $ ∀$ ≥ $,

• Ω(# $ ) è l’insieme delle funzioni &($) tali per cui


∃( > 0, $, ≥ 0 ∶ & $ ≥ ( 0 # $ ∀$ ≥ $,

• Θ(# $ ) è l’insieme delle funzioni &($) tali per cui


∃(4 > 0, (5 > 0, $, ≥ 0 ∶ (4 0 #($) ≤ & $ ≤ (5 0 # $ ∀$ ≥ $,
Esercizio 7
• Siano !(#) e %(#) due funzioni a valori positive.
• Dimostrare o confutare con un controesempio la seguente affermazione

!(#)
! # =Θ
3
Soluzione
• Dobbiamo trovare due costanti !" e !# tali che

*(,) *(,)
!" ) ≤ * , ≤ !# )
3 3

• Basta considerare
• 0 < !" ≤ 3

• !# ≥ 3
Esercizio 8
• Siano !(#) e %(#) due funzioni a valori positive.
• Dimostrare o confutare con un controesempio la seguente affermazione

#
! # =Θ !
3
Soluzione
• In generale, non è sempre vero che

" "
'2 ( ! ≤ ! " ≤ '4 ( !
3 3

• Controesempio
)
% %
! " =2 vorremmo che 2 ≤'(2 *
,)
che è vero se ' ≥ 2 * che non è costante!
%
Quindi in generale !(") ≠ 0 !
1
Ulteriori esercizi
Algorithm 11 Fragment 1
1: function f1
2: x 3
3: for i 1 to n do
4: x=x·x
Esercizio 3
5: return x

Algorithm 12 Fragment 2
• Dato il seguente
1: function f2 frammento di codice, calcolare il costo di esecuzione
con
2: il xcriterio
1 del costo unitario e con quello logaritmico
3: for i 1 to n do
• Costo unitario: ogni operazione pesa 1
4: x=x·x
5:
• Costo logaritmico:
return x ogni operazione su x pesa max(1, log x)

Algorithm 13 Fragment 3
1: function f3
2: x 1
3: for i 1 to n do
4: x=x·i
5: return x

3
Esercizio 5
• Siano !(#) e %(#) due funzioni a valori positive.
• Dimostrare che

! # =' % # ⇒ log !(#) = '(log %(#))

Sotto l’ipotesi che ! # > 1 e log %(#) > 1


Esercizio 6
• Siano !(#) e %(#) due funzioni a valori positive.
• Dimostrare o confutare con un controesempio la seguente affermazione

! # =' % # ⇒ 2 *(+) = '(2 , +


)
Esercizio 9
• Siano !(#) e %(#) due funzioni a valori positive.
• Dimostrare o confutare con un controesempio la seguente affermazione

max ! # , %(#) = Θ ! # + %(#)


Esercizio 10
• Date le funzioni !(#) e %(#), stabilire se

! # =' % # , ! # =Ω % # , ! # =Θ % #

! # =1

% # = 2-
Esercizio 11
• Date le funzioni !(#) e %(#), stabilire se

! # =' % # , ! # =Ω % # , ! # =Θ % #

! # = 9,-./ 0

% # =# #
Esercizio 14
• Si fornisca lo pseudo-codice di un algoritmo ricorsivo per il calcolo
della seguente sequenza di numeri

0 &' ( = 0
!" = $ 1 &' ( = 1 * 2
!",- + !",/ + !",0 &' ( ≥ 3
Esercizio 15
Determinare un upper-bound ed un lower-bound per il costo di
esecuzione dell’algoritmo dell’esercizio 14
Esercizio 16
• Si fornisca lo pseudo-codice di un algoritmo iterativo per il calcolo
della seguente sequenza di numeri e si stimi il tempo e la memoria
necessari alla sua esecuzuine

0 &' ( = 0
!" = $ 1 &' ( = 1 * 2
!",- + !",/ + !",0 &' ( ≥ 3