24
Stima di somme: esercizio Valutare l'ordine di grandezza della somma Quando |x|<1, sviluppando in serie si ha ln(1+x) = x x 2 /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 kln ( 1 + 3 k ) k = 0 n k ln ( 1 + 3 k )= k = 0 n ( 1 ) = Propos .1 ( k = 0 n 1)=( n)

Stima di somme: esercizio Università degli Studi di Milano ...frasca.di.unimi.it/ALGM16/slides_lab2.pdf · Somma di potenze di interi ... Le operazioni sulle matrici sono le stesse

  • Upload
    vungoc

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

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

Implementazione

● Un record e di conseguenza una tabella in linguaggio C possono essere implementate mediante il costrutto struct

● In che modo?

Università degli Studi di Milano

Marco Frasca