stima di somme: esercizio università degli studi di milano...
TRANSCRIPT
Stima di somme: esercizio
● Valutare l'ordine di grandezza della somma
● Quando |x|<1, sviluppando in serie si ha ln(1+x) = x – x2/2 +…,
da cui x → ∞ implica ln(1+3/x) dello stesso ordine di 3/x
● Quindi la funzione k ln(1+3/k) = (1)
● Applicando la Proposizione 1 vista nella lezione precedente, abbiamo
Università degli Studi di Milano
Marco Frasca
∑k= 0
n
k⋅ln (1+3k)
∑k= 0
n
k⋅ln (1+3k)= ∑
k= 0
n
(1) =Propos . 1
(∑k= 0
n
1)= (n)
Somma di potenze di interi
● Supponiamo di voler calcolare la somma , con i in N.
● Per i=1 otteniamo la serie aritmetica,
● Per i>1, si può adottare il seguente metodo per ricavare il valore
esatto della somma . Facciamo l'esempio con i=2.
● Sia . Allora vale 1)
Università degli Studi di Milano
Marco Frasca
∑k = 0
n
k i
∑k = 0
n
k =n (n +1)
2
∑k = 0
n
k i
g (n)= ∑k = 0
n
k 3 g (n + 1)= ∑k = 0
n
k 3+(n + 1)
3
Somma di potenze di interi
● Inoltre vale 2)
● Eguagliando la 1) e la 2) si ottiene
● Da cui
● Infine
Università degli Studi di Milano
Marco Frasca
g (n + 1)= ∑k = 0
n
(k + 1)3 = ∑k = 0
n
(k 3+ 3 k2 + 3 k + 1)
∑k = 0
n
k 3 +(n + 1)3 = ∑k = 0
n
k 3+ 3 ∑k = 0
n
k2 + 3 ∑k = 0
n
k + n + 1
3 ∑k = 0
n
k2 =(n + 1)3 − 3n (n + 1)
2− n − 1
∑k = 0
n
k 2 =n (n + 1) (2 n + 1)
6
Stima mediante integrali
● Proposizione 3. Sia f: R+ R+ una funzione monotona
non decrescente. Allora per ogni a ∈ N e per ogni intero n ≥ a, vale
Dimostrazione. Supponiamo n > a (per n = a la proprietà è banale). f è integrabile in ogni intervallo chiuso e limitato di R+, e per ogni k ∈ N si ha:
(*)
Università degli Studi di Milano
Marco Frasca
f (a) + ∫a
n
f (x )d (x ) ⩽ ∑k=a
n
f (k ) ⩽ ∫a
n
f (x )d (x ) + f (n)
f (k ) ⩽ ∫k
k +1
f (x) d (x ) ⩽ f (k +1)
Stima mediante integrali
● La proprietà (*) deriva dal fatto che f(k) e f(k+1) indicano risp. l'area del rettangolo inscritto e circoscritto ad f nell'intervallo unitario [k, k+1] (vedi pag. 48 Cormen)
● Sommando per k = a, a+1, …, n-1, dalla prima disuguaglianza in (*) si ha
(**)
● Mentre la seconda disuguaglianza in (*) implica
(***)
Università degli Studi di Milano
Marco Frasca
∑k =a
n−1
f (k ) ⩽ ∑k =a
n−1
∫k
k +1
f ( x) d (x ) = ∫a
n
f (x) d (x )
∫a
n
f (x ) d (x) = ∑k=a
n−1
∫k
k +1
f (x) d (x ) ⩽ ∑k =a
n−1
f (k +1)
Stima mediante integrali
● Sommando f(a) alla (***) e f(n) alla (**), segue l'enunciato
● Corollario 1: nelle ipotesi della Proposizione 3, se
allora
● Il simbolo ~ indica che due funzioni f e g sono reciprocamente
asintotiche, cioè
● Il corollario segue dalla Proposizione 3 e ricordando che f(n) = o(g(n)) se
Università degli Studi di Milano
Marco Frasca
f (n) = o (∫a
n
f (x ) d (x)) ∑k =a
n
f (k ) ∼ ∫k =a
n
f (x) d ( x)
limn→∞
f (n)
g (n)= 0
limn→∞
f (n)
g (n)= 1
Stima mediante integrali
● Esempio: verificare per ogni reale p > 0 si ha
● La funzione f(n) = n
p è monotona non decrescente e inoltre
● Quindi, per il Corollario 1, segue che
Università degli Studi di Milano
Marco Frasca
∑k =0
n
k p∼ ∫
0
n
x p d (x) =np+1
p+1
f (n) = o (∫0
n
f (x ) d (x))
∑k=0
n
k p ∼np+ 1
p+1
Stima mediante integrali
● In maniera analoga si prova la Proposizione 3 per le funzioni monotone non crescenti:
● Proposizione 4. Sia f: R+ R+ una funzione monotona
non crescente. Allora per ogni a ∈ N e per ogni intero n ≥ a, vale
Università degli Studi di Milano
Marco Frasca
∫a
n
f ( x)d (x) + f (n) ⩽ ∑k =a
n
f (k ) ⩽ f (a) + ∫a
n
f (x) d (x )
Stima mediante integrali
● Esempio. Sia , e la funzione f(k) = 1/k è
nelle ipotesi della Proposizione 4:
● Cioè
e quindi
Università degli Studi di Milano
Marco Frasca
∫a
n
f ( x)d (x) + f (n) ⩽ ∑k =a
n
f (k ) ⩽ f (a) + ∫a
n
f (x) d (x )
H n = ∑k=1
n1n
ln (n) +1n
⩽ H n ⩽ ln (n) + 1
∑k =1
n1n
∼ ln (n)
Stima mediante integrali
● In generale, il metodo appena presentato non riesce a determinare la somma esatta di funzioni a crescita esponenziale, ma solo l'ordine di grandezza
● Esempio. Consideriamo la somma
Integrando per parti
Ma essendo
Riusciamo solo a determinare l'ordine di grandezza della somma
Università degli Studi di Milano
Marco Frasca
∑k =0
nk 2k
∫0
n
x 2x d (x) =2n (n ln(2)−1)+1
ln2(2)= (n2n
)
f (n) ≠ o(∫a
n
f (x) d (x))
∑k =0
nk 2k
= (n 2n)
Strutture dati elementari
● Gli algoritmi per essere efficientemente eseguiti spesso richiedono di organizzare i dati in memoria in maniera appropriata, in modo da rendere efficiente la loro manipolazione
● Gli algoritmi pertanto si servono delle 'strutture dati' più naturali ed appropriate per le operazioni da svolgere
● Una struttura dati è una nozione astratta che individua uno o più insiemi di elementi e una o più operazioni definite su tali elementi
Università degli Studi di Milano
Marco Frasca
Strutture dati elementari
● Pertanto, è possibile definire una struttura dati prescindendo sia dalla architettura sottostante, che dal modo con cui la struttura dati viene implementata
● Una implementazione invece di una struttura dati individua il modo con cui gli elementi dell'insieme vengono memorizzati ed il modo con cui le operazioni costituenti la struttura dati vengono eseguite
● Ogni struttura dati ammette in generale più implementazioni, a ciascuna delle quali corrisponde un costo in termini di spazio ed in termini di tempo (per eseguire i programmi associati alle operazioni)
Università degli Studi di Milano
Marco Frasca
Strutture dati elementari
● Quando si progetta un algoritmo occorre considerare le strutture dati utilizzate svincolate dalla loro implementazione
● Questo permette di descrivere e comprendere meglio un algoritmo e la relativa analisi dei costi
● Per esempio si possono valutare gli algoritmi in termini di chiamate alle varie operazioni sulla struttura dati, senza specificare, almeno in un primo livello di analisi, i costi di ciascuna operazione
Università degli Studi di Milano
Marco Frasca
Vettori
● Sia un insieme U di elementi
● Gli elementi di U possono essere interi, numeri reali, stringhe su un dato alfabeto etc.
● Un vettore di dimensione n (intero positivo) su U è una n-pla v=(v
1, v
2, ..., v
n) tale che v
i ∈ U per ogni
i ∈ {1, 2, …, n}.
● vi si dice componente i-ma del vettore v.
● L'insieme di tutti i vettori di dimensione n su U è
Università degli Studi di Milano
Marco Frasca
U n= U×U⋯×U⏟
n volte
Vettori
● Le operazioni sui vettori sono:
1) Proiezione o accesso diretto alle componenti
2) Sostituzione o scrittura di una componente
1) Per ogni intero i , 1 ≤ i ≤ n , la proiezione i-ma è la funzione U, tale che per ogni vettore v ∈ Un
2) La sostituzione della componente i-esima è invece definita dalla funzione σ
i : (Un x U) Un che associa ad ogni
vettore v ∈ Un e valore b ∈ U il vettore w ∈ Un tale che
Università degli Studi di Milano
Marco Frasca
πi :Un
πi(v ) = v i
w j=b se j=iv j altrimenti
Vettori
● Il vantaggio di operare con I vettori è sicuramente l'accesso diretto alle componenti tramite un 'indice'
● Entrambe le operazioni 1 e 2 infatti permettono o di leggere (1) o di sovrascrivere (2) una singola componente del vettore senza dover accedere alle altre componenti
● Questo è un vantaggio rispetto ad altre strutture dati, quali le liste, che invece non permettono l'accesso diretto
● Dall'altro lato, però, i vettori sono strutture dati statiche, cioè la loro dimensione, una volta creati, non è modificabile, a differenza delle liste, per esempio
Università degli Studi di Milano
Marco Frasca
Matrici
● Le matrici sono strutture dati definite come vettori bidimensionali
● Dati p e q (interi positivi), una matrice di dimensione p x q su U è una collezione di elementi di U m
ij , con
i = {1, 2, …, p} e j = {1, 2, …, q} , indicato con [mij]
● L'insieme di tutte le matrici di dimensione p x q è denotato con Upxq
● Le operazioni sulle matrici sono le stesse per i vettori:
1) Proiezione o accesso diretto alle componenti
2) Sostituzione o scrittura di una componente
Università degli Studi di Milano
Marco Frasca
Matrici
● Data M = [mij] ∈ Upxq, p ≥ s ≥ 1 e q ≥ t ≥ 1, la proiezione
s,t-ma e definita come
● La operazione di sostituzione è invece definita come
dove rij = b, se i=s e j = t, r
ij = m
ij altrimenti
Università degli Studi di Milano
Marco Frasca
π st (M )=mst
σ st (M ,b)=[r ij ]
Record
● Un record è una struttura analoga ai vettori, ma in cui le componenti non sono omogenee e non hanno un ordine
● Sia A un alfabeto di simboli, e per ogni a ∈ A sia Ua un insieme d elementi
● Un record è una struttura dati individuata da una famiglia di elementi R={xa ∈ Ua | a ∈ A} , denotato anche con R = {xa}a ∈ A
● Gli insiemi Ua sono detti campi del record, ed in genere sono diversi tra loro.
● Con R . a si denota l'elemento xa corrispondente al campo Ua
Università degli Studi di Milano
Marco Frasca
Record
● Le operazioni associate ad un record sono nuovamente proiezione π
a(R) e sostituzione σ
a (R,b), definite come
segue
● πa(R) = R . a
● σa (R,b) = S, dove S è un record ottenuto da R sostituendo R .
a con b
● Anche per un record il numero di campi è fissato dalla sua dimensione
Università degli Studi di Milano
Marco Frasca
Tabelle
● Una struttura dati , che permette di avere dimensione non fissata è la tabella
● Una tabella può essere vista come un vettore di dimensione variabile
● Una tabella di dimensione k è un record con due campi:
1) Il primo contiene un intero m, con k ≥ m ≥ 1 ,
2) Il secondo è un vettore di dimensione m .
● Una tabella quindi può prevedere anche operazioni oggiuntive, che per esempio leggono la dimensione del vettore
Università degli Studi di Milano
Marco Frasca
Implementazione
● Implementare una struttura dati vuol dire definire il modo con cui I suoi elementi verranno organizzati in memoria, ed il modo con cui si accede agli stessi
● In linguaggio C I vettori sono array modimensionali :
● int v[10] , definisce un vettore di dimensione 10 le cui componenti sono degli interi
● In memoria v viene rappresentato in 10*n celle consecutive, dove n è il numero di celle (byte) necessarie per memorizzare un int
● La proiezione j-ma si ottiene accedendo alle locazioni dalla n*(j-1) + 1 alla n*(j) mediante l'istruzione v[j-1] (indici partono da 0 in C), partendo da una locazione iniziale individuata da v
● La sostituzione invece va a cambiare il contenuto delle celle sopra indicate con un altro elemento di tipo int , cioè v[j-1] = b
Università degli Studi di Milano
Marco Frasca
Implementazione
● Una matrice in linguaggio C è un array bidimensionale
● int v[10][5] , definisce una matrice di interi di dimensione 10x5
● In memoria v viene rappresentato in 10*5*n celle consecutive partendo dalla cella individuata da v, dove n è il numero di celle (byte) necessarie per memorizzare un int
● La proiezione ij-ma si ottiene accedendo alle locazioni dalla (i-1)*10*n + (j-1)*n + 1 alla n*[(i-1)*10 + j] mediante l'istruzione v[i-1][j-1]
● La sostituzione invece va a cambiare il contenuto delle celle sopra indicate con un altro elemento di tipo int , cioè v[i-1][j-1] = b
Università degli Studi di Milano
Marco Frasca