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