Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


analisi degli algoritmi, Dispense di Analisi Matematica I

analisi degli algoritmi. politecnico di torino

Tipologia: Dispense

Pre 2010

Caricato il 10/05/2010

lawmari
lawmari 🇮🇹

4.5

(251)

36 documenti

1 / 125

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Testi
Teoria: Dispense di A.Laurentini, reperibili sul sito del corso
Testo Supplementare :Introduzione agli algoritmi e strutture dati, di T.
Cormen, C. Leiserson, R. Rivest, C. Stein, Edizioni McGraw Hill. .
Esame: Prova di Teoria + Prova di Programmazione . Voto : media dei
due voti
ANALISI DEGLI ALGORITMI
1 - INTRODUZIONE
Algoritmo:= Insieme di regole per ottenere dati di OUTPUT da dati di INPUT.
L’algoritmo è una soluzione ad un problema. Per un problema ci possono essere più
algoritmi. L’algoritmo ideale, o astratto è un insieme di regole, usualmente espresse
1
A
I O
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Anteprima parziale del testo

Scarica analisi degli algoritmi e più Dispense in PDF di Analisi Matematica I solo su Docsity!

Testi

Teoria: Dispense di A.Laurentini, reperibili sul sito del corso

Testo Supplementare :Introduzione agli algoritmi e strutture dati, di T.

Cormen, C. Leiserson, R. Rivest, C. Stein, Edizioni McGraw Hill..

Esame: Prova di Teoria + Prova di Programmazione. Voto : media dei

due voti

ANALISI DEGLI ALGORITMI

1 - INTRODUZIONE

Algoritmo:= Insieme di regole per ottenere dati di OUTPUT da dati di INPUT. L’algoritmo è una soluzione ad un problema. Per un problema ci possono essere più algoritmi. L’algoritmo ideale, o astratto è un insieme di regole, usualmente espresse

A

I O

in forma matematica. Ogni algoritmo può a sua volta avere differenti realizzazioni (diversi linguaggi di programmazione, etc.) Esempio: Si noti che sia in ingresso che in uscita un algoritmo può avere pochi o molti dati.

Alg.1 Alg.2 Alg.n

Real. 1 Real. 2

Problema: dato n , è primo?

Alg.1: dividi n per

2, 3, 4……  n/2

Alg.2: riduci le divisioni: se hai già

diviso per 2 e 3, non dividere per

6…..(Crivello di Eratostene)

Verifica se

n è primo

n si/no

Calcola l’instradamento

ottimo su Internet di un

pacchetto

instradamento

  • calcolare se un numero è primo (importante nella teoria dei codici segreti, basati su numeri prodotto di primi molto grandi)
  • moltiplicare due matrici (operazione comunissima, ad es. nella computer graphics)
  • trovare il percorso più breve tra due nodi di un grafo pesato (modella numerosi problemi pratici)
  • dato un grafo, trovare il percorso (se c’è) che mi fa passare da tutti i lati una volta sola ( modella numerosi problemi pratici, dall’ispezione di reti tecnologiche alla raccolta rifiuti)
  • ordinare una lista di nomi o numeri (problema comunissimo, dalle applicazioni gestionali alla computer graphics)
  • dati : un insieme di lavorazioni da effettuare, un ordinamento parziale, un insieme di centri di lavoro, trovare lo scheduling ottimo (si pensi alla costruzione di un’auto)
  • dato un volume (contenitore), ed un insieme di forme 3D, ciascuna con un coefficiente di merito, inserire le forme 3D nel contenitore in modo da massimizzare la somma dei coefficienti di merito
  • data la pianta polygonale di un ambiente, qual’ è il numero minimo di telecamere di sorveglianza richieste per coprire l’ambiente e dove devo installarle? (Il problema detto ART GALLERY Problem). Si può estendere in 3D.  Un esempio competo di problema e di algoritmo: L’accoppiamento stabile (Stable Matching Problem) Problema : Sono dati due insiemi M=( m 1 , m 2 , …… m n) e W= ( w 1 , w 2 , ….. w n) di uomini e donne. Ciascun uomo ha una lista di preferenze per le donne, e viceversa. Vogliamo trovare un accoppiamento stabile (se esiste), cioè tale che:
  • l’accoppiamento sia perfetto (ogni uomo ed ogni donna sono sistemati in una ed una sola coppia)
  • non ci siano instabilità. Un’instabilità si ha se mw e m’w’ , ma m preferisce w’ al suo partner corrente w e w’ preferisce m al suo partner corrente m’. Evidentemente in tal caso due coppie si disfano e se ne riforma una sola. Algoritmo di Gale-Shapley per determinare un accoppiamento stabile. Descrizione informale : m m' w w'

All’inizio tutti sono disaccoppiati. Ad un certo punto, un maschio m disaccoppiato si propone alla donna w disaccoppiata che è in testa alle sue preferenze. La coppia viene formata come provvisoria (un uomo m’ che è più in alto nella lista di w potrebbe proporsi). Successivamente, si saranno formate varie coppie provvisorie. Un uomo libero qualunque si propone alla donna w più in alto nella sua lista. Se w è libera, si forma una coppia provvisoria. Se w è accoppiata con m’ , verifica chi è più in alto nella sua lista, e si accoppia con lui, lasciando l’altro libero. L’algoritmo termina quando non c’è più nessuno libero. Descrizione in pseudocodice function stableMatching { Initialize all m M and w W to free while free man m who still has a woman w to propose to { w = m's highest ranked such woman if w is free (m, w) become engaged else some pair (m', w) already exists if w prefers m to m' (m, w) become engaged m' becomes free else (m', w) remain engaged } } ( http://en.wikipedia.org/wiki/Stable_marriage_problem http://www.dcs.gla.ac.uk/research/algorithms/stable/) Si dimostra che:

  • L’algoritmo termina dopo al massimo n 2 esecuzioni del loop while.
  • L’accoppiamento finale è stabile
  • Qualunque esecuzione dell’algoritmo da lo stesso accoppiamento (l’ordine degli insiemi non ha importanza)
  • L’algoritmo non trova tutti gli accoppiamenti stabili: ne esistono altri. Uno si ottiene con le donne che si propongono!
  • L’algoritmo come descritto non è simmetrico e favorisce gli uomini!! Diciamo che una donna w è un partner valido di un uomo m se esiste un accoppiamento stabile con la coppia ( m,w ). Diciamo che w è il miglior partner valido di m se nessuna donna più alta nella lista delle preferenze di m è un partner valido. L’algoritmo dà agli uomini il miglior partner valido , ed alle donne il peggior partner valido !! L’algoritmo si applica a numerosi problemi pratici

2 – ANALISI DEI PROBLEMI E DEGLI ALGORITMI

Il tempo effettivo di elaborazione sarà circa proporzionale a questa misura. La costante di proporzionalità potrà essere misurata su di un certo sistema di elaborazione. Sono necessarie varie approssimazioni. Un programma è fatto di:

  • istruzioni di inizializzazioni
  • uno o più loop Si trascurano le inizializzazioni, si considerano solo i loop. Si può:
  • contare quante volte si esegue il loop più interno oppure
  • individuare un’operazione fondamentale e contare quante volte si esegue. Le due scelte sono in pratica coincidenti. Esempi Problema Operazione fondamentale -Trovare x in una lista di elementi xi -Confronto tra x e xi -moltiplicare due matrici -prodotto di due numeri -ordinare una lista -confronto tra due elementi della lista -attraversare un albero binario -attraversare un lato -trovare se un numero è primo -divisione Vantaggi di una scelta corretta dell’operazione fondamentale (OF):
  • l’OF potrebbe essere la più onerosa (es. op. floating point in confronto a op. fixed point)
  • il numero complessivo di operazioni è circa proporzionale al numero di OF
  • contare OF risponde alla domanda: come cresce il lavoro fatto con il crescere dell’imput
  • è una scelta flessibile, può essere più o meno dettagliata La scelta dell’operazione fondamentale determina una classe di algoritmi. Definiamo: COMPLESSITA’=LAVORO FATTO=N 0 OPERAZIONI FONDAMENTALI 2.2.1 - CASO MEDIO E CASO PESSIMO Il lavoro fatto W dipende da: a) algoritmo b) INPUT. Evidentemente:
  • ordinare 100 nomi è più lungo che ordinarne 10 (richiede più OF)
  • cercare un elemento in una lista di 100 nomi è più lungo che in una lista di 10
  • etc. A parità d’INPUT, dipende dal tipo d’INPUT (ad es., se una lista è già ordinata…) Esempi di dimensione dell’INPUT Problema Dim. INPUT
  • Trovare x in una lista - n 0 elementi n della lista
  • Moltiplicare due matrici - dim. Matrici
  • ordinare una lista - n^0 elementi n della lista
  • traversare albero binario - n^0 nodi
  • risolvere sist. di equaz. lineari - n^0 equazioni
  • risolvere un problema relativo ad un grafo - n^0 nodi; n^0 lati; ambedue  Complessità nel caso pessimo (worst case) W( n ):=Maxw(I)IDn w(I):= num. OF per un INPUT I Dn := insieme degli INPUT di dimensione n N.B.
  • la complessita’ nel caso pessimo è utile o indispensabile in molti casi pratici (es. applicazioni REAL TIME)
  • è spesso facile da calcolare
  • senza altre precisazioni, con complessità si intende sempre complessità nel caso pessimoComplessità nel caso medio (average behavior)    I D n A ( n ) p ( I ) w ( I ) Richiede per tutti gli I: -calcolo di w ( I ) -conoscenza delle probabilità p ( I ) Esempio 1
  • Problema: ricerca di x in una lista di n elementi

La teoria è analoga a quella del lavoro fatto. Lo spazio usato si può definire, in funzione dell’INPUT, sia nel caso pessimo che nel caso medio. Nell’analisi si trascura:

  • lo spazio usato dal programma
  • lo spazio usato dai dati di INPUT Si considera solo lo spazio aggiuntivo ( extra space ). Se l’algoritmo non ne richiede, si dice che funziona in space. 2.4 - SEMPLICITÀ Caratteristica importante: permette una scrittura più agevole del programma, debug e modifiche più semplici. Tuttavia è difficile da quantificare. 2.5 - OTTIMALITÀ Ogni problema ha una sua complessità intrinseca , cioè un lavoro minimo al di sotto del quale non si può andare. Il confronto tra algoritmi va fatto a parità di condizioni, quindi entro classi in cui è ammessa la stessa operazione fondamentale. 2.5.1- CASO PESSIMO(WORST CASE)Definizione: Un algoritmo è ottimo (nel worst case) se, nella sua classe di algoritmi non esiste un altro algoritmo che (nel worst case) faccia meno OF.  Come dimostrare che un algoritmo A è ottimo (in una classe)?
  1. Si trova un LOWER BOUND F( n ), lavoro minimo (minimo n^0 di OF) che debbono fare tutti gli algoritmi della classe)
  2. Si trova la complessità WA( n ) di A e si confronta con il LOWER BOUND:
  • se F( n ) =WA( n ), A e ottimo F( n ) WA( n )
  • se F( n ) <WA( n ), non si può dire niente. Potrebbe esistere un LOWER BOUND F’( n )> F( n ).

WA( n ) F( n ) Esempio 1 di analisi ottimalità nel caso pessimo

  • Problema: trovare il max di una lista
  • Classe algoritmi: che usano il confronto a tre vie tra due elementi(<=>)
  • Algoritmo: confronto il primo col secondo, il maggiore con il terzo, il maggiore con il quarto…. Max:=L[1] For index:=2 to n do If Max<L[index] then Max:=L[index] end if end for ( pseudo-codice simile al PASCAL )
  • Lavoro fatto dall’algoritmo nel caso pessimo: W( n )= n- 1 confronti (è uguale anche ad A( n ))
  • LOWER BOUND - Se un elemento è max, n- 1 elementi non sono max. Per decidere che uno di questi non è max, ci vuole almeno un confronto. In totale, almeno F( n )= n- 1 confronti. C onclusione : W( n )= F( n )  L’algoritmo è ottimo. Esempio 2 di analisi ottimalità nel caso pessimo
  • Problema: prodotto di due matrici quadrate AB=C
  • Classe di algoritmi: quelli che ammettono le 4 operazioni aritmetiche
  • OF:= moltiplicazione
  • Algoritmo: applica la definizione: (^) kj n k cij (^)  a ikb   1 Complessità dall’algoritmo : W( n )= n^3 ( numero addizioni: ( n -1) n^2  n^3 ) LOWER BOUND : n^2 (si omette la dimostrazione) Conclusione : non possiamo dire se l’algoritmo sia o no ottimo. N.B.

3. CLASSIFICAZIONE ASINTOTICA

Motivazioni Si supponga di avere due algoritmi:

  • Alg. A’ , complessità W’( n )=2 n
  • Alg. A” , complessità W”( n )=5 n Qual è il migliore? I tempi di esecuzione saranno T’ c’2 n , T” c”5 n. Non sappiamo dirlo. E’ ragionevole allora classificarli in una stessa classe di complessità(asintotica). Possiamo anche dire che sono dello stesso ordine di complessita’. Supponiamo invece:
  • Alg. A’ , complessità W’( n )=c’ n^3
  • Alg. A” , complessità W”( n )=c” n^2 c’<c” Per n piccoli, A’ è migliore, ma per n > n 0 =c”/c’, A” è sempre migliore. Inoltre:

lim

W n

W n

n

Dobbiamo quindi considerare A’ ed A” in classi di complessità asintotiche diverse. c’ n^3

c” n^2 n 0 =c”/c’ 3.1-NOTAZIONI   Notazione O( o grande, big ho) Siano f(n), g(n) funzioni di interi positivi n. Definizione: O( f(n) )= O( f ):= insieme delle funzioni g tali che esiste una costante positiva c ed un n 0 tali che g(n)cf(n) per nn 0.

  • Equivale a dire che: g è asintoticamente limitata da un multiplo di f
  • Una definizione equivalente è : g  O( f ) se c f g n    lim (^) con c costante reale (anche 0).
  • Correntemente si dice che O( f ) è l’insieme delle funzioni che crescono al massimo come f. Se g appartiene a questo insieme, si dice che è O( f ). Esempio: c, n, n/1000, n^2 /2 sono tutte O( n^2 ). N.B. Se (^) n lim  ^ f^ ^ n lim g , si può usare il teorema di L’Hopital: ' ' lim lim g f g f n  n   (^) se f’ e g’ esistono Esempio 1 f=n 3 /3 g=37 n 2 +120n+ si ha g  O( f ) (ma f  O( g ) Infatti

( f )  f  ( f ) O( f ) o( f ) Esempi di complessità’ asintotica di algoritmi

  • Ricerca di un elemento in una lista ( n )
  • Ricerca del max. in una lista ( n )
  • Prodotto di matrici (algoritmo normale) ( n 3 ) 3.2 - PROPRIETÀ DI 
  • Transitività: se f O( g ) e g O( h ) ,  f O( h )
  • f O( g ) se e solo se g ( f )
  • se f  ( g ), allora g ( f )
  • stabilisce un’equivalenza tra funzioni. Ogni insieme  e’ una classe di equivalenza che chiamiamo classe di complessità(asintotica)
  • O( f+g )=O(Max( f,g )) ; la proprietà vale anche per e ed è utile per analizzare algoritmi fatti da più parti ( 10n 3 +3n 3 +5n lg n+57 )=( n 3 )=………………. Per descrivere questa classe di complessità usiamo la funzione più semplice della classe: n^3. Se f  ( n ) diciamo che f e’ lineare, se f  ( n^2 ) diciamo che f e’ quadratica, etc. O(1) indica funzioni limitate da una costante. N.B. Si dimostra che:
    1. ln n ( n  ) per >0. Il logaritmo cresce meno di qualunque potenza (anche di n1/k )
    2. nk ( cn ) per k >0 , c> 1. Qualunque potenza di n cresce meno dell’esponenziale

N.B. Talvolta, invece di  si usa =. Ad es., si scrive f = ( n )

 - RICHIAMI MATEMATICI

 Notazioni “floor”  x  e “ceiling”  x . Floor di x è il maggior intero che non supera x , ceiling di x è il minor intero maggiore o uguale di x. Es.  2  = 2.5 =  2.99 = 2 ;  3  =  2.5 =  2.1 = 3  Logaritmi. Sono largamente usati nell’analisi degli algoritmi, in particolare quelli in base 2

  • logb b a= a
  • funzione strettamente crescente e univoca
  • logb x 1 x 2 =logb x 1 + logb x 2
  • logb x 1 / x 2 =logb x 1 - logb x 2
  • logb1=
  • logb x a = a logb x
  • conversione di basi :logb x =logc x logb c
  • N.B. Nell’analisi degli algoritmi spesso non si considerano le costanti moltiplicative, quindi i logaritmi in basi diverse sono equivalenti
  • notazioni usuali: log 2 x = lg x ; loge x = ln x
  • lg e  1.44; ln 2  0.7; lg 10  3.
  • n  2  lg n  < 2 n
  • n /2 < 2  lg n   n
  • d(ln x )/d x = 1/ x  d(lg x )/d x = lg e / x

a b b+1 a-1 a b

  • Funzioni crescenti  (^)  ^      b a b i a b a f x dx f i f xdx 1 1 ( ) () ( ) Esempio 1 Funzione decrescente.  xn n x dx i n n n i ln ln ln 1 ln 1 1 1 2  ^    ^   ed anche:

 ln  ln( 1 ) ln 2

(^1 ) 2 1 2 2          (^)  x x n dx i n n n i da cui n i n i n i n i 1 ln 1 ln 1 2 1  ^  ^    Esempio 2 Funzione crescente.

n n n e e n n n i i xdx e xdx ex x x en n n n^ n i n n n i lg lg lg lg 1. 44 lg lg lg lg ln lg ln lg ( ln 1 ) 1 2 1 1 1     

       ^ 

 

5 - STRUTTURE DATI ELEMENTARI

Abstract data type(ADT) Idea generale per svincolare gli algoritmi dai dati. ADT:= insieme di elementi di informazione con operatori associati. Es. : numeri interi + operazioni aritmetiche Matrici +somme, prodotti, inversioni,trasposizioni Utilità degli ADT. Se sono già forniti gli operatori necessari per gestire i dati, devo occuparmi solo dell’algoritmo. Di conseguenza:

  • il codice è più compatto
  • il codice è portabile
  • posso cambiare le routine che gestiscono i dati senza cambiare l’algoritmo  - LISTE LISTA: Insieme ordinato di elementi dello stesso tipo (detti talora record ): a 1 , a 2 , …………..an,
  • n= 0, lista vuota
  • a 1 := testa (head) della lista
  • an := coda (tail)
  • esiste una posizione data dall’indice: ai precede ai+1  i, 1  in e segue ai-1  i, 1  in
  • può essere utile avere eol(L), posizione (o indice ) successivo all’ultimo elemento  Operazioni più comuni sulle liste
  • insert (x, p, L): inserisci l’elemento x in posizione p nella lista L