Anteprima
Vedrai una selezione di 6 pagine su 23
Appunti algoritmi e strutture dati, parte 1 Pag. 1 Appunti algoritmi e strutture dati, parte 1 Pag. 2
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
Appunti algoritmi e strutture dati, parte 1 Pag. 6
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
Appunti algoritmi e strutture dati, parte 1 Pag. 11
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
Appunti algoritmi e strutture dati, parte 1 Pag. 16
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
Appunti algoritmi e strutture dati, parte 1 Pag. 21
1 su 23
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Formula di Binet

Rappresentazione: l'n-esimo numero di Fibonacci senza ricorsione.

Ricoresivamente, l'n-esimo numero di Fibonacci si ricava cosi:

  • F ( n ) = { 1 se n = 1 , 2 , F ( n ) = F ( n - 1 ) + F ( n - 2 ) se n > 3, }

Formula di Binet:

∀ n ∈ ℕ F ( n ) = 1 5 ( Φ n - 1 Φ n )

Dimostrazione

Consideriamo un numero x, appartenente alla sequenza di Fibonacci, possiamo rappresentarlo come un segmento formato dalla somma di due segmenti a e b, costituenti Fn-1 e Fn-2: a : b =

a + b a = a b

A questo punto sostituiamo ab con Φ:

Φ = 1 0 = 1 + Φ = 1 4

Induzione

Caso base n = 1,2

F = 1 5 ( Φ 1 - 1 Φ 1 )

Ok.

Paso induttivo n≥3.

Assumo che la proprietà sia valida fino a n-1.

Per definizione Fm=Fm-1 + Fm-2 e per ipotesi induttiva

(1/√5) (Φm-1 + Φn-2 - Φm-2 - Φn-2) = (1/√5) (Φm-1 Φm-2 + Φm-2 - mm-2) =

(1/√5) (Φm-1 - Φm-2) Φn-2) adesso è della forma (1/√5) (Φm Φm-1).

Bisogna dimostrare che Φn Φn-1 - m2 Φn-2 + 1 m-2 =

Φmn-1 + Φn-2 - Φn-2 - Φn-2) = Φm (1/2 + 1/2n-2) =

Φn (Φ + 1) = Φn (Φ + 2) = Φn2 - Φ) = Φm (Φ/Φ2) = Φn

Nella dimostrazione per induzione bisogna usare tutte le potesi e riuscire ad arrivare nella forma della tesi.

Tradotto in termini informatici: Fib1 (int m) → int

return (Φm - Φm)

Questo algoritmo usa, però, numeri irrazionali che non sono rappresentabili nel mondo reale quindi il risultato sarà sempre un'approssimazione. Man mano che m è sempre più grande, il risultato si allontana sempre di più dal risultato effettivo.

Si definisce complessità di un algoritmo il numero di istruzioni che vengona eseguite per costituire la risposta.

Fib4 (int m) -> int

  1. a=1, b=1
  2. for i=3 to m do
  3. c=a+b
  4. a=b
  5. b=c
  6. return c

Tempo Lineare

Spazio Costante

Corretto SI

CRESCITA ASINTOTICA

Punti di interesse: Complessità, è una funzione della dimensione dei dati in ingresso (funzione di m);

Complessità asintotica, ossia per valori più grandi di m;

ignoriamo le costanti.

DEFINIAMO:

  1. O(g(m)) = { f(m) | ∃c>0 ∃m₀∈ℕ ∃∀m>m₀: f(m) ≤ c∙g(m) }

GRAFICAMENTE:

ALTRE CLASSI DI COMPLESSITÀ

Definiamo: f(m) = o(g(m)) <=> ∀c > 0 ∃m₀∈ℕ ∀m ≥ m₀ : f(m) < c·g(m)

o(g(m)) ⊆ O(g(m))

f(m) = ω(g(m)) <=> ∀c > 0 ∃m₀∈ℕ ∃m ≥ m₀ : c·g(m) < f(m)

ω(g(m)) ⊆ Ω(g(m))

Vogliamo provare che O(g(m)) ∩ Ω(g(m)) = ∅

f(m) = O(g(m)) → ∀c > 0 ∃m₀∈ℕ ∀m ≥ m₀ : f(m) < c·g(m)

f(m) = Ω(g(m)) → ∃c' > 0 ∃m₁∈ℕ ∀m ≥ m₁ : f(m) ≥ c·g(m)

È evidente che f(m) < c·g(m) e f(m) ≥ c·g(m) non possono coesistere, quindi o(g(m)) ∩ Ω(g(m)) = ∅

UTILITÀ DEL LIMITE PER IDENTIFICARE LA CLASSE DI COMPLESSITÀ

DEFINIZIONE DI LIMITE DI UNA SUCCESSIONE

{aₙ} ⊆ ℝ lim aₙ = l, l∈ℝ

∀ε > 0 ∃m₀∈ℕ ∀m ≥ m₀ : |aₙ - l| < ε

PROPRIETÀ:

f(m) = o(g(m)) <=> limm→∞ f(m)/g(m) = 0

ossia f cresce più lentamente di g e il rapporto diventa sempre più piccolo man mano che m cresce.

Istruzioni Condizionali:

if condizione then

Body 1

else

Body 2

Bisogna valutare il tempo di "condizione", che potrebbe chiamare ulteriori funzioni, di Body 1 e Body 2.

T(m) = T(cond) + max { T(Body 1) , T(Body 2) }

Ci interessa il caso peggiore, quindi basta solo il Body più lungo.

Ciclo for:

for i=1 to n do

Body

T(m) = m • T(Body)

MyAlgorithm (int m) -> int

int i, j, a;

if (m > 2) then

a = 2   O(1) = tempo costante

for i=1 to m do

for j=1 to m do

a = a+(i+1)*(j+2)   n2 volte viene eseguito

for i=1 to 16 do

a = a + MyAlgorithm(m/a)   16 volte

return a;

else

return & m-1;

T(m) = n2 + 16T(m/a)

Dettagli
Publisher
A.A. 2018-2019
23 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher seba1998ciao di informazioni apprese con la frequenza delle lezioni di Algoritmi e strutture dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi Ca' Foscari di Venezia o del prof Pelillo Marcello.