05EIP. Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino. Definizione di ricorsione e strategie divide et impera

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "05EIP. Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino. Definizione di ricorsione e strategie divide et impera"

Transcript

1 La ricorsione Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Sommario Definizione di ricorsione e strategie divide et impera Semplici algoritmi ricorsivi Merge Sort Quicksort Esempi più complessi di algoritmi ricorsivi A.A. 2001/2002 APA-ricorsione 2 Politecnico di Torino Pagina 1 di 64

2 Definizione Una procedura si dice ricorsiva (o recursiva) quando: all interno della propria definizione, compare la chiamata alla procedura stessa oppure compare la chiamata ad almeno una procedura la quale, direttamente o indirettamente, chiama la procedura stessa. Un algoritmo si dice ricorsivo quando si basa su procedure ricorsive. A.A. 2001/2002 APA-ricorsione 3 Esempio: il fattoriale 0! 1 N 1 : N! N (N-1)! double fact( double N ) { double sub ; if(n == 0) return 1.0 ; else { sub = fact( N-1 ) ; return N * sub ; } } A.A. 2001/2002 APA-ricorsione 4 Politecnico di Torino Pagina 2 di 64

3 Esempio: il fattoriale 0! 1 N 1 : N! N (N-1)! double fact( double N ) { double sub ; if(n == 0) return 1.0 ; } sub = fact( N-1 ) ; return N * sub ; A.A. 2001/2002 APA-ricorsione 5 Motivazioni 1.3 Molti problemi si prestano, per loro natura, ad una descrizione ricorsiva: Si definisce un metodo per risolvere dei sottoproblemi analoghi a quello di partenza (ma più piccoli) Si definisce un metodo per combinare le soluzioni parziali nella soluzione del problema originario. A.A. 2001/2002 APA-ricorsione 6 Politecnico di Torino Pagina 3 di 64

4 Divide et Impera (I) a sottoproblemi, ciascuno b volte più piccolo del problema Soluzione = Risolvi(Problema) ; Risolvi(Problema): Sottoproblema 1,2,3,,a = Dividi(Problema) ; Per ciascun Sottoproblema i : Sottosoluzione i = Risolvi(Sottoproblema i ) ; Return Soluzione = Combina(Sottosoluzione 1,2,3,,a ) ; A.A. 2001/2002 APA-ricorsione 7 Divide et Impera (II) Soluzione = Risolvi(Problema) ; Risolvi(Problema): Sottoproblema 1,2,3,,a = Dividi(Problema) ; Per ciascun Sottoproblema i : Sottosoluzione i = Risolvi(Sottoproblema i ) ; Return Soluzione = Combina(Sottosoluzione 1,2,3,,a ) ; Chiamata ricorsiva A.A. 2001/2002 APA-ricorsione 8 Politecnico di Torino Pagina 4 di 64

5 Quando fermarsi? La ricorsione non deve essere infinita, in quanto ogni algoritmo deve terminare. Ad un certo punto, i sottoproblemi diventano così semplici da essere risolvibili: in modo banale (es.: insiemi di 1 solo elemento) oppure, con metodi alternativi alla ricorsione. A.A. 2001/2002 APA-ricorsione 9 Avvertenze Ricordare sempre la condizione di terminazione Fare in modo che i sottoproblemi siano tutti strettamente minori del problema iniziale A.A. 2001/2002 APA-ricorsione 10 Politecnico di Torino Pagina 5 di 64

6 Divide et Impera (completo di terminazione) Risolvi(Problema): Se il problema è banale: Soluzione = Risolvi_banale(Problema) Else: Sottoproblema 1,2,3,,a = Dividi(Problema) ; Per ciascun Sottoproblema i : Sottosoluzione i = Risolvi(Sottoproblema i ) ; Return Soluzione = Combina(Sottosoluzione 1,2,3,,a ) ; A.A. 2001/2002 APA-ricorsione 11 Complessità (I) Risolvi(Problema): T(n) Se il problema è banale (n c): Θ(1) Soluzione = Risolvi_banale(Problema) Else: D(n) Sottoproblema 1,2,3,,a = Dividi(Problema) ; Per ciascun Sottoproblema i : Sottosoluzione i = Risolvi(Sottoproblema i ) ; Return Soluzione = T(n/b) Combina(Sottosoluzione 1,2,3,,a ) ; C(n) A.A. 2001/2002 APA-ricorsione 12 Politecnico di Torino Pagina 6 di 64

7 Complessità (II) T(n) = Θ(1) D(n) + a T(n/b) + C(n) per n c per n > c Equazione alle ricorrenze di non facile soluzione. Se D(n)+C(n)=Θ(n), si trova T(n)=Θ(n log n). A.A. 2001/2002 APA-ricorsione 13 Sommario Definizione di ricorsione e strategie divide et impera Semplici algoritmi ricorsivi Merge Sort Quicksort Esempi più complessi di algoritmi ricorsivi A.A. 2001/2002 APA-ricorsione 14 Politecnico di Torino Pagina 7 di 64

8 Esempio: numeri di Fibonacci Problema: Calcolare l N-esimo numero di Fibonacci Definizione: FIB N+1 = FIB N + FIB N-1 per n>0 FIB 1 = 1 FIB 0 = 0 A.A. 2001/2002 APA-ricorsione 15 Soluzione long fib(int N) { long f1, f2 ; if(n == 0) return 0 ; if(n == 1) return 1 ; } f1 = fib(n-1) ; f2 = fib(n-2) ; return f1+f2 ; A.A. 2001/2002 APA-ricorsione 16 Politecnico di Torino Pagina 8 di 64

9 Analisi FIB(5) FIB(3) FIB(4) FIB(1) FIB(2) FIB(3) FIB(2) FIB(0) FIB(1) FIB(1) FIB(2) FIB(1) FIB(0) FIB(1) FIB(0) A.A. 2001/2002 APA-ricorsione 17 Esempio: ricerca dicotomica Problema Determinare se un elemento x è presente all interno di un vettore ordinato v[n] Approccio Dividere il vettore a metà, e riapplicare il problema su una delle due metà (l altra si può escludere a priori, essendo il vettore ordinato) A.A. 2001/2002 APA-ricorsione 18 Politecnico di Torino Pagina 9 di 64

10 Esempio v x y 4 6 y x y<x A.A. 2001/2002 APA-ricorsione 19 Soluzione int trova(int v[], int a, int b, int x) { int c ; if(b-a == 0) if(v[a]==x) return a ; else return 1 ; } c = (a+b) / 2 ; if(v[c] >= x) return trova(v, a, c, x) ; else return trova(v, c+1, b, x) ; A.A. 2001/2002 APA-ricorsione 20 Politecnico di Torino Pagina 10 di 64

11 Esercizio proposto Si calcoli il coefficiente binomiale (n m), sfruttando le relazioni (derivate dal Triangolo di Tartaglia): n n 1 n 1 = + m m 1 m n n = = 1 n 0 0 n, 0 m n A.A. 2001/2002 APA-ricorsione 21 Esercizio proposto Si esegua il calcolo del determinante di una matrice quadrata. Si ricorda che: Det(M 1x1 ) = m 11 Det(M NxN ) = somma dei prodotti degli elementi di una riga (o colonna) per i determinanti delle sottomatrici (N-1)x(N-1) ottenute cancellando la riga e la colonna che contengono l elemento, preso con segno (-1) i+j. A.A. 2001/2002 APA-ricorsione 22 Politecnico di Torino Pagina 11 di 64

12 Ricorsione ed iterazione Ogni programma ricorsivo può anche essere implementato in modo iterativo. La soluzione migliore, come efficienza e chiarezza del codice, dipende dal problema. A.A. 2001/2002 APA-ricorsione 23 Esempio: il fattoriale (iterativo) 0! 1 N 1 : N! N (N-1)! double fact( double N ) { double tot = 1.0 ; int i; for(i=2; i<=n; ++i) tot = tot * i ; return tot ; } A.A. 2001/2002 APA-ricorsione 24 Politecnico di Torino Pagina 12 di 64

13 Fibonacci (iterativo) long fib(int N) { long f1p=1, f2p=0, f ; int i; if(n == 0) return 0 ; if(n == 1) return 1 ; } f = f1p + f2p ; /* N==2 */ for(i=3; i<= N; ++i) { f2p = f1p ; f1p = f ; f = f1p+f2p ; } return f ; A.A. 2001/2002 APA-ricorsione 25 Ricerca dicotomica (iterativo) int trova(int v[], int a, int b, int x) { int c ; while(b-a!= 0) { c = (a+b) / 2 ; if(v[c] >= x) b = c ; else a = c+1 ; } if(v[a]==x) return a ; else return 1 ; } A.A. 2001/2002 APA-ricorsione 26 Politecnico di Torino Pagina 13 di 64

14 Esercizi proposti 1. Si fornisca la versione iterativa del calcolo del coefficiente binomiale (n m). 2. Si analizzino le difficoltà nel realizzare la versione iterativa del calcolo del determinante. A.A. 2001/2002 APA-ricorsione 27 Politecnico di Torino Pagina 14 di 64

15 Algoritmi di ordinamento (II parte: algoritmi ricorsivi) Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Sommario Definizione di ricorsione e strategie divide et impera Semplici algoritmi ricorsivi Merge Sort Quicksort Esempi più complessi di algoritmi ricorsivi A.A. 2001/2002 APA-ricorsione 29 Politecnico di Torino Pagina 15 di 64

16 Merge Sort L algoritmo noto come Merge Sort è l applicazione diretta del paradigma Divide et Impera al problema dell ordinamento. Risolvi Dividi Risolvi Combina A.A. 2001/2002 APA-ricorsione 30 Merge Sort: Dividi Il passo di divisione consiste semplicemente nel partizionare il vettore di partenza in due sotto-vettori, alla sinistra ed alla destra di un punto di divisione. Solitamente il punto di divisione viene scelto al centro del vettore Dividi A.A. 2001/2002 APA-ricorsione 31 p p q q+1 r r Politecnico di Torino Pagina 16 di 64

17 Merge Sort: terminazione La condizione di terminazione si ha quando il sotto-vettore ha un solo elemento (p=r) oppure nessun elemento (p>r). A.A. 2001/2002 APA-ricorsione 32 Merge Sort: Combina Il passo di ricombinazione è basato sulla fusione di due vettori ordinati: Dati due vettori ordinati, costruire un terzo vettore contenente gli stessi elementi, complessivamente ordinati Tale algoritmo è realizzabile in tempo Θ(n) Combina A.A. 2001/2002 APA-ricorsione 33 Politecnico di Torino Pagina 17 di 64

18 Pseudo-codice MERGE-SORT(A, p, r) 1 if p < r 2 then q (p+r)/2 3 MERGE-SORT(A, p, q) 4 MERGE-SORT(A, q+1, r) 5 MERGE(A, p, q, r) Terminazione Dividi Risolvi Combina A.A. 2001/2002 APA-ricorsione 34 Notazione Spesso in informatica si usano i seguenti due simboli: x = parte intera di x (per difetto) x = parte intera di x (per eccesso) Esempi: 3 = 3 = =3; 3.1 = 4 A.A. 2001/2002 APA-ricorsione 35 Politecnico di Torino Pagina 18 di 64

19 Esercizio Si scriva lo pseudo-codice della procedura Merge, garantendo che il suo tempo di esecuzione sia Θ(n). A.A. 2001/2002 APA-ricorsione 36 Soluzione: procedura Merge MERGE(A, p, q, r) 1 i p ; j q+1 ; k 1 2 while( i q and j r ) 3 if( A[i] < A[j]) B[k] A[i] ; i i+1 4 else B[k] A[j] ; j j+1 5 k k+1 6 while( i q ) B[k] A[i] ; i i+1; k k+1 7 while( j r ) B[k] A[j] ; j j+1; k k+1 8 A[p..q] B[1..k-1] A.A. 2001/2002 APA-ricorsione 37 Politecnico di Torino Pagina 19 di 64

20 Soluzione: procedura Merge MERGE(A, p, q, r) 1 i p ; j q+1 ; k 1 2 while( i q and j r ) 3 if( A[i] < A[j]) B[k] A[i] ; i i+1 4 else B[k] A[j] ; j j+1 5 k k+1 6 while( i q ) B[k] A[i] ; i i+1; k k+1 7 while( j r ) B[k] A[j] ; j j+1; k k+1 8 A[p..q] B[1..k-1] Prende ogni volta il più piccolo tra i primi due elementi non ancora considerati Esaurisce la coda del sottovettore restante A.A. 2001/2002 APA-ricorsione 38 Esercizio proposto Dimostrare che la procedura Merge così proposta ha una complessità Θ(n). A.A. 2001/2002 APA-ricorsione 39 Politecnico di Torino Pagina 20 di 64

21 Complessità (I) L analisi della procedura Merge Sort porta alle seguenti formule: Terminazione: semplice test, Θ(1) Dividi (2):calcolalametà di unarray, D(n)=Θ(1) Risolvi (3-4): risolve 2 sottoproblemi di dimensione n/2 ciascuno, 2T(n/2) Combina (5): basata su Merge, C(n) = Θ(n). A.A. 2001/2002 APA-ricorsione 40 Complessità (I) L analisi della procedura Merge Sort porta alle seguenti formule: In realtà un sottoproblema ha dimensione n/2, l altro n/2. Terminazione: Fortunatamente semplice test, questo Θ(1) dettaglio Dividi (2):calcolalametà non modifica unarray, il risultato D(n)=Θ(1) dell analisi di complessità. Risolvi (3-4): risolve 2 sottoproblemi di dimensione n/2 ciascuno, 2T(n/2) Combina (5): basata su Merge, C(n) = Θ(n). A.A. 2001/2002 APA-ricorsione 41 Politecnico di Torino Pagina 21 di 64

22 Complessità (II) T(n) = Θ(1) per n 1 2T(n/2) + Θ(n) per n > 1 Si può dimostrare che la soluzione è: T(n) = Θ(n log n) A.A. 2001/2002 APA-ricorsione 42 Giustificazione (n=16) log 2 n x 16 = n 2 x 8 = n 4 x 4 = n 8 x 2 = n 16 x 1 = n Livelli di ricorsione: log 2 n Operazioni per livello: n Operazioni totali: n log 2 n A.A. 2001/2002 APA-ricorsione 43 Politecnico di Torino Pagina 22 di 64

23 Avvertenza Non èdetto chele procedurericorsive abbiamo tutte complessità Θ(n log n). Ad esempio, un merge sort con una partizione asimmetrica (q=p+1), degenera in un insertion sort, con n chiamate ricorsive in ciascuna delle quali viene aggiunto un elemento al set già ordinato, ottenendo Θ(n 2 ). A.A. 2001/2002 APA-ricorsione 44 Esercizio proposto Si implementi in linguaggio C l algoritmo Merge Sort. Si verifichi sperimentalmente il suo comportamento Θ(n log n). n 2 nlogn A.A. 2001/2002 APA-ricorsione 45 Politecnico di Torino Pagina 23 di 64

24 Sommario Definizione di ricorsione e strategie divide et impera Semplici algoritmi ricorsivi Merge Sort Quicksort Esempi più complessi di algoritmi ricorsivi A.A. 2001/2002 APA-ricorsione 46 Descrizione Quicksort è un algoritmo Divide et Impera in cui il partizionamento viene fatto in base al valore (e non alla posizione) degli elementi del vettore. Ad ogni passo, viene scelto un valore pivot (perno), e gli elementi vengono assegnati alla prima o alla seconda partizione a seconda che siano minori o maggiori del pivot. A.A. 2001/2002 APA-ricorsione 47 Politecnico di Torino Pagina 24 di 64

25 Formulazione Dividi: partiziona A[p..r], riordinando gli elementi, in due sottovettori A[p..q] e A[q+1..r], in modo tale che gli elementi di A[p..q] siano tutti degli elementi di A[q+1..r]. Il valore di q è variabile. Risolvi: ordina ricorsivamente A[p..q] e A[q+1..r]. Combina: poiché A[p..q] e A[q+1..r] sono ordinati, e i primi sono ai secondi, non occorre fare nulla: A[p..r] è ordinato. A.A. 2001/2002 APA-ricorsione 48 Quicksort QUICKSORT(A, p, r) 1 if p < r 2 then q PARTITION(A, p, r) 3 QUICKSORT(A, p, q) 4 QUICKSORT(A, q+1, r) A.A. 2001/2002 APA-ricorsione 49 Politecnico di Torino Pagina 25 di 64

26 Partition PARTITION(A, p, r) 1 x A[p] > elemento Pivot 2 i p 1 3 j r while true 5 do repeat j j-1 6 until A[j] x 7 repeat i i+1 8 until A[i] x 9 if i < j 10 then scambia A[i] A[j] 11 else return j A.A. 2001/2002 APA-ricorsione 50 A A A A i Esempio p i i j j r j do repeat j j-1 until A[j] x repeat i i+1 until A[i] x if i < j then scambia A[i] A[j] else return j do repeat j j-1 until A[j] x repeat i i+1 until A[i] x 6 x p q q+1 r q j i A.A. 2001/2002 APA-ricorsione 51 Politecnico di Torino Pagina 26 di 64

27 Analisi di Partition La procedura fa convergere verso il centro gli indici i e j. Ogni volta che i trova un elemento maggiore del pivot e j trova un elemento minore del pivot, gli elementi vengono scambiati per permettere agli indici di continuare. Quando i incontra j, la partizione è completa. Il numero complessivo di operazioni è Θ(r-p+1), nonostante i loop annidati. A.A. 2001/2002 APA-ricorsione 52 Esercizio 1 Mostrare il funzionamento di Partition sulla seguente sequenza di numeri: A = { 8, 13, 11, 19, 12, 9, 5, 7, 4, 2, 6, 1 } A.A. 2001/2002 APA-ricorsione 53 Politecnico di Torino Pagina 27 di 64

28 Soluzione 1 A = { 8, 13, 11, 19, 12, 9, 5, 7, 4, 2, 6, 1 } x = 8 A = { 8, 13, 11, 19, 12, 9, 5, 7, 4, 2, 6, 1 } A = { 8, 1, 11, 19, 12, 9, 5, 7, 4, 2, 6, 13 } A = { 8, 1, 6, 19, 12, 9, 5, 7, 4, 2, 11, 13 } A = { 8, 1, 6, 2, 12, 9, 5, 7, 4, 19, 11, 13 } A = { 8, 1, 6, 2, 4, 9, 5, 7, 12, 19, 11, 13 } A = { 8, 1, 6, 2, 4, 7, 5, 9, 12, 19, 11, 13 } Partizione: A = { 8, 1, 6, 2, 4, 7, 5, 9, 12, 19, 11, 13 } A.A. 2001/2002 APA-ricorsione 54 Esercizio 2 Mostrare il funzionamento di Partition sulla seguente sequenza di numeri: A = { 13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 1 } A.A. 2001/2002 APA-ricorsione 55 Politecnico di Torino Pagina 28 di 64

29 Soluzione 2 A = { 13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 1 } x = 13 A = { 13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 1 } A = { 13, 1, 9, 5, 12, 8, 7, 4, 11, 2, 6, 19 } La partizione è: A = { 13, 1, 9, 5, 12, 8, 7, 4, 11, 2, 6, 19 } In questo caso la partizione è fortemente sbilanciata. A.A. 2001/2002 APA-ricorsione 56 Esercizio proposto Implementare in C la procedura Partition, verificando il corretto funzionamento. Quale valore viene restituito come punto di partizione q su vettori casuali? su vettori ordinati? su vettori ordinati inversamente? A.A. 2001/2002 APA-ricorsione 57 Politecnico di Torino Pagina 29 di 64

30 Esercizio Sempre in riferimento al vettore A = { 13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 1 } quale potrebbe essere una scelta migliore ( a mano ) per il pivot x? A.A. 2001/2002 APA-ricorsione 58 Prestazioni L efficienza di Quicksort dipende totalmente dalla qualità del partizionamento ottenuto. Se il partizionamento è ottimo (q~(p+r)/2), l algoritmo è O(n log n) Se il partizionamento è pessimo (q~p o q~r), l algoritmo degenera in un O(n 2 ) La qualità del partizionamento dipende da una buona scelta del pivot. A.A. 2001/2002 APA-ricorsione 59 Politecnico di Torino Pagina 30 di 64

31 Caso migliore A.A. 2001/2002 APA-ricorsione 60 Caso peggiore A.A. 2001/2002 APA-ricorsione 61 Politecnico di Torino Pagina 31 di 64

32 Scelta del pivot Il caso peggiore si verifica quando le partizioni hanno 1 ed n-1 elementi, rispettivamente, ossia quando il pivot è il minimo o il massimo. Un vettore già ordinato ricade quindi nel caso peggiore! Anche un vettore ordinato inversamente è nel caso peggiore. Il caso migliore si ha quando il vettore è il più disordinato possibile. A.A. 2001/2002 APA-ricorsione 62 Quicksort randomizzato PARTITION-RANDOM(A, p, r) > genera un numero casuale tra p e r 1 i RANDOM(p, r) > evita il caso peggiore! 2 scambia A[i] A[1] > applica il partizionamento 3 return PARTITION (A, p, r) A.A. 2001/2002 APA-ricorsione 63 Politecnico di Torino Pagina 32 di 64

33 Scelte del pivot Scegliere un elemento a caso (PARTITION- RANDOM) Scegliere l elemento nel mezzo: x A[(p+r)/2] Scegliere il valore medio tra min e max Scegliere la mediana tra 3 elementi presi a caso nel vettore A.A. 2001/2002 APA-ricorsione 64 Complessità Da quanto visto emerge che Quicksort ha un comportamento: O(n 2 ) in generale, O(n log n) in media Θ(n 2 ) nel caso peggiore (che si deve cercare di evitare) Θ(n log n) nel caso medio e nel caso migliore A.A. 2001/2002 APA-ricorsione 65 Politecnico di Torino Pagina 33 di 64

34 Esempi n(n+1)/2 Vettore ordinato, pivot primo elemento, n=2 k Vettore casuale, pivot primo elemento, n=2 k Vettore casuale, pivot casuale, n=4/3 2 k + Vettore ordinato, pivot casuale, n=4/3 2 k 2n ln n A.A. 2001/2002 APA-ricorsione 66 Esercizio proposto Si implementi l algoritmo Quicksort in C, e si sperimentino diverse scelte dell elemento pivot. A.A. 2001/2002 APA-ricorsione 67 Politecnico di Torino Pagina 34 di 64

35 Sommario Definizione di ricorsione e strategie divide et impera Semplici algoritmi ricorsivi Merge Sort Quicksort Esempi più complessi di algoritmi ricorsivi A.A. 2001/2002 APA-ricorsione 68 Sommario Definizione di ricorsione e strategie divide Il Tour del Cavaliere et impera Espansione dei valori X Il problema Semplici delle algoritmi N regine ricorsivi Gioco Merge del Domino Sort Quicksort Esempi più complessi di algoritmi ricorsivi A.A. 2001/2002 APA-ricorsione 69 Politecnico di Torino Pagina 35 di 64

36 Il tour del cavaliere Si desidera trovare una sequenza di mosse del cavallo tale per cui questo tocca una ed una sola volta ciascuna casella di una scacchiera N N. Si ricorda che un cavallo in posizione (i,j) può muovere in 8 possibili caselle: A.A. 2001/2002 APA-ricorsione 70 Analisi Si supponga che N=4. 1 A.A. 2001/2002 APA-ricorsione 71 Politecnico di Torino Pagina 36 di 64

37 Mossa 1 1 Livello della prossima mossa da fare Coordinate dell ultima mossa A.A. 2001/2002 APA-ricorsione 72 Mossa A.A. 2001/2002 APA-ricorsione 73 Politecnico di Torino Pagina 37 di 64

38 Mossa A.A. 2001/2002 APA-ricorsione 74 Mossa A.A. 2001/2002 APA-ricorsione 75 Politecnico di Torino Pagina 38 di 64

39 Mossa A.A. 2001/2002 APA-ricorsione 76 Mossa A.A. 2001/2002 APA-ricorsione 77 Politecnico di Torino Pagina 39 di 64

40 Mossa ,1,3 A.A. 2001/2002 APA-ricorsione 78 Mossa ,1,3 9,0,1 A.A. 2001/2002 APA-ricorsione 79 Politecnico di Torino Pagina 40 di 64

41 Mossa ,1,3 9,0,1 10,2,2 A.A. 2001/2002 APA-ricorsione 80 Mossa ,0,1 8,1,3 10,2,2 A.A. 2001/2002 APA-ricorsione 81 Politecnico di Torino Pagina 41 di 64

42 Mossa ,0,1 8,1,3 10,2,2 11,0,3 A.A. 2001/2002 APA-ricorsione 82 Mossa ,0,1 8,1,3 10,2,2 12,1,1 11,0,3 A.A. 2001/2002 APA-ricorsione 83 Politecnico di Torino Pagina 42 di 64

43 Mossa ,2,2 9,0,1 8,1,3 11,0,3 12,1,1 13,3,0 A.A. 2001/2002 APA-ricorsione 84 Mossa ,1,3 9,0,1 10,2,2 11,0,3 12,1,1 13,3,0 13,2,3 A.A. 2001/2002 APA-ricorsione 85 Politecnico di Torino Pagina 43 di 64

44 Mossa ,1,3 9,0,1 10,2,2 11,0,3 12,1,1 13,3,0 13,2,3 14,3,1 A.A. 2001/2002 APA-ricorsione 86 Mossa ,1,3 9,0,1 10,2,2 11,0,3 12,1,1 13,3,0 13,2,3 14,3,1 15,1,0 A.A. 2001/2002 APA-ricorsione 87 Politecnico di Torino Pagina 44 di 64

45 Mossa ,3,0 16,0,2 15,1,0 12,1,1 14,3,1 13,2,3 11,0,3 10,2,2 9,0,1 8,1,3 A.A. 2001/2002 APA-ricorsione 88 Mossa ,1,3 9,0,1 10,2,2 11,0,3 12,1,1 13,3,0 13,2,3 14,3,1 15,1,0 16,0,2 A.A. 2001/2002 APA-ricorsione 89 Politecnico di Torino Pagina 45 di 64

46 Mossa ,3,0 16,0,2 15,1,0 12,1,1 14,3,1 13,2,3 11,0,3 10,2,2 9,0,1 8,1,3 A.A. 2001/2002 APA-ricorsione 90 Mossa ,3,0 16,0,2 12,1,1 13,2,3 11,0,3 10,2,2 14,3,1 14,3,1 15,1,0 9,0,1 8,1,3 A.A. 2001/2002 APA-ricorsione 91 Politecnico di Torino Pagina 46 di 64

47 Mossa ,3,0 16,0,2 12,1,1 13,2,3 11,0,3 14,3,1 14,3,1 15,1,0 10,2,2 15,1,0 9,0,1 8,1,3 A.A. 2001/2002 APA-ricorsione 92 Mossa ,3,0 12,1,1 13,2,3 11,0,3 14,3,1 14,3,1 15,1,0 15,1,0 10,2,2 9,0,1 8,1,3 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 93 Politecnico di Torino Pagina 47 di 64

48 Mossa ,1,3 9,0,1 10,2,2 11,0,3 12,1,1 13,3,0 13,2,3 14,3,1 14,3,1 15,1,0 15,1,0 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 94 Mossa ,3,0 12,1,1 13,2,3 11,0,3 14,3,1 14,3,1 15,1,0 15,1,0 16,0,2 16,3,1 10,2,2 9,0,1 8,1,3 A.A. 2001/2002 APA-ricorsione 95 Politecnico di Torino Pagina 48 di 64

49 Mossa ,3,0 12,1,1 13,2,3 11,0,3 10,2,2 14,3,1 14,3,1 15,1,0 15,1,0 9,0,1 8,1,3 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 96 Mossa ,3,0 12,1,1 11,0,3 13,2,3 10,2,2 14,3,1 14,3,1 15,1,0 15,1,0 16,0,2 16,3,1 9,0,1 8,1,3 A.A. 2001/2002 APA-ricorsione 97 Politecnico di Torino Pagina 49 di 64

50 Mossa ,3,0 12,1,1 11,0,3 13,2,3 10,2,2 14,3,1 14,3,1 15,1,0 15,1,0 9,0,1 8,1,3 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 98 Mossa ,3,0 12,1,1 10,2,2 9,0,1 11,0,3 11,1,0 13,2,3 14,3,1 14,3,1 15,1,0 15,1,0 8,1,3 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 99 Politecnico di Torino Pagina 50 di 64

51 Mossa ,3,0 12,1,1 11,0,3 13,2,3 10,2,2 14,3,1 14,3,1 15,1,0 15,1,0 9,0,1 11,1,0 12,3,1 8,1,3 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 100 Mossa ,3,0 12,1,1 11,0,3 10,2,2 13,2,3 13,2,3 14,3,1 14,3,1 15,1,0 15,1,0 9,0,1 11,1,0 12,3,1 8,1,3 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 101 Politecnico di Torino Pagina 51 di 64

52 Mossa ,1,3 9,0,1 10,2,2 11,0,3 11,1,0 12,1,1 12,3,1 13,3,0 13,2,3 13,2,3 14,3,1 14,3,1 14,0,2 15,1,0 15,1,0 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 102 Mossa ,1,3 9,0,1 10,2,2 11,0,3 11,1,0 12,1,1 12,3,1 13,3,0 13,2,3 13,2,3 14,3,1 14,3,114,0,2 14,1,1 15,1,0 15,1,0 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 103 Politecnico di Torino Pagina 52 di 64

53 Mossa ,1,3 9,0,1 10,2,2 11,0,3 11,1,0 12,1,1 12,3,1 13,3,0 13,2,3 13,2,3 14,3,1 14,3,114,0,2 14,1,1 15,1,0 15,1,0 15,0,3 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 104 Mossa ,1,3 9,0,1 10,2,2 11,0,3 11,1,0 12,1,1 12,3,1 13,3,0 13,2,3 13,2,3 14,3,1 14,3,114,0,2 14,1,1 15,1,0 15,1,0 15,0,3 15,3,0 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 105 Politecnico di Torino Pagina 53 di 64

54 Mossa ,1,3 9,0,1 10,2,2 11,0,3 11,1,0 12,1,1 12,3,1 13,3,0 13,2,3 13,2,3 14,3,1 14,3,114,0,2 14,1,1 15,1,0 15,1,0 15,0,315,3,0 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 106 Mossa ,1,3 9,0,1 10,2,2 11,0,3 11,1,0 12,1,1 12,3,1 13,3,0 13,2,3 13,2,3 14,3,1 14,3,114,0,2 14,1,1 15,1,0 15,1,0 15,0,315,3,0 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 107 Politecnico di Torino Pagina 54 di 64

55 Mossa ,1,3 9,0,1 10,2,2 11,0,3 11,1,0 12,1,1 12,3,1 13,3,0 13,2,3 13,2,3 14,3,1 14,3,114,0,2 14,1,1 15,1,0 15,1,0 15,0,315,3,0 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 108 Mossa ,1,3 9,0,1 10,2,2 11,0,3 11,1,0 12,1,1 12,3,1 12,0,2 13,3,0 13,2,3 13,2,3 14,3,1 14,3,114,0,2 14,1,1 15,1,0 15,1,0 15,0,315,3,0 16,0,2 16,3,1 A.A. 2001/2002 APA-ricorsione 109 Politecnico di Torino Pagina 55 di 64

56 Esercizio Si scriva lo pseudo-codice per i problema del Tour del Cavaliere, descrivendo i passi sopra esposti nell esempio. A.A. 2001/2002 APA-ricorsione 110 Complessità Il numero di mosse possibili ad ogni passo è al più 8. Il numero di passi è N 2. Quindi l albero ha un numero di nodi 8 N^2. Nel caso peggiore la soluzione corrisponde alla foglia più a destra l albero è completo. In tal caso il numero di chiamate recursive prima di trovare la soluzione è Θ(8 N^2 ). A.A. 2001/2002 APA-ricorsione 111 Politecnico di Torino Pagina 56 di 64

57 Inizializzazioni #define DIM 6 int a[8],b[8],scacc[dim][dim]; void main(void) { int i, j, result; a[0]=2; b[0]=1; a[1]=1; b[1]=2; a[2]=-1; b[2]=2; a[3]=-2; b[3]=1; a[4]=-2; b[4]=-1; a[5]=-1; b[5]=-2; a[6]=1; b[6]=-2; a[7]=2; b[7]=-1; for( i=0; i<dim; i++) for( j=0; j<dim; j++) scacc[i][j] = 0; A.A. 2001/2002 APA-ricorsione 112 Programma principale } scacc[0][0] = 1; result = muovi( 2, 0, 0); if( result == 1) { for( i=0; i<dim; i++) { for( j=0; j<dim; j++) printf( "%2d ",scacc[i][j]); printf( "\n"); } } else { printf( "Soluzione non trovata\n"); } A.A. 2001/2002 APA-ricorsione 113 Politecnico di Torino Pagina 57 di 64

58 Muovi (1) int muovi( int mossa, int posx, int posy) { int i,ret,newposx,newposy; if( mossa == (DIM*DIM+1)) return(1); for( i=0; i<8; i++) { newposx = posx + a[i]; newposy = posy + b[i]; A.A. 2001/2002 APA-ricorsione 114 Muovi (2) if( (newposx<dim) && (newposx>=0) && (newposy<dim) && (newposy>=0)) { if( scacc[newposx][newposy] == 0) { scacc[newposx][newposy]=mossa; ret=muovi(mossa+1,newposx,newposy); if( ret == 0) scacc[newposx][newposy]=0; else return(1); } } } return(0); } A.A. 2001/2002 APA-ricorsione 115 Politecnico di Torino Pagina 58 di 64

59 Sommario Definizione di ricorsione e strategie divide Il Tour del Cavaliere et impera Espansione dei valori X Il problema Semplici delle algoritmi N regine ricorsivi Gioco Merge del Domino Sort Quicksort Esempi più complessi di algoritmi ricorsivi A.A. 2001/2002 APA-ricorsione 116 Valore X Quando si lavora con le funzioni Booleane, si usa spesso il simbolo X, che indica che una certa variabile può assumere indifferentemente il valore 0 o 1. Ad esempio, se si considera la funzione OR, questa ritorna il valore 1 in corrispondenza dei valori di ingresso 01, 10 e 11, che si indicano più compattamente come X1, 1X. A.A. 2001/2002 APA-ricorsione 117 Politecnico di Torino Pagina 59 di 64

60 Split Si desidera realizzare un programma che riceve una stringa di valori binari eventualmente comprendenti delle X, e generi tutte le combinazioni corrispondenti all espressione data. Esempio: se riceve la stringa 01X0X, il programma genera le combinazioni A.A. 2001/2002 APA-ricorsione 118 Soluzione È basata su un algoritmo recursivo che esplora l intero albero delle possibili combinazioni compatibili con la stringa data, tramite trasformazione di ciascuna delle X prima in 0 e poi in 1. Il numero delle foglie (ognuna corrispondente ad una combinazione) è pari a 2 N, dove N è il numero delle X. L albero ha un altezza pari N+1. A.A. 2001/2002 APA-ricorsione 119 Politecnico di Torino Pagina 60 di 64

61 Albero delle combinazioni 01X0X 0100X 0110X A.A. 2001/2002 APA-ricorsione 120 C #include <stdio.h> #define MAX 100 char int ibuff[max], obuff[max]; index, len; void split(int); void main(void) { } gets( ibuff); len = strlen( ibuff); split(0); A.A. 2001/2002 APA-ricorsione 121 Politecnico di Torino Pagina 61 di 64

62 C (2) void split(int index) { if( index == len) { obuff[index]='\0'; printf( "%s\n", obuff); return; } switch( ibuff[index]) { case '0': case '1': obuff[index] = ibuff[index]; split(index+1); return; case X': obuff[index] = '0'; } split(index+1); obuff[index] = '1'; split(index+1); return; A.A. 2001/2002 APA-ricorsione 122 } Sommario Definizione di ricorsione e strategie divide Il Tour del Cavaliere et impera Espansione dei valori X Il problema Semplici delle algoritmi N regine ricorsivi Gioco Merge del Domino Sort Quicksort Esempi più complessi di algoritmi ricorsivi A.A. 2001/2002 APA-ricorsione 123 Politecnico di Torino Pagina 62 di 64

63 Le N regine Sia data una scacchiera NxN, e siano date N regine del gioco degli scacchi. Trovare una disposizione delle N regine in modo tale che nessuna possa essere mangiata dalle altre.?? A.A. 2001/2002 APA-ricorsione 124 Sommario Definizione di ricorsione e strategie divide Il Tour del Cavaliere et impera Espansione dei valori X Il problema Semplici delle algoritmi N regine ricorsivi Gioco Merge del Domino Sort Quicksort Esempi più complessi di algoritmi ricorsivi A.A. 2001/2002 APA-ricorsione 125 Politecnico di Torino Pagina 63 di 64

64 Gioco del domino Siano date N pedine del Domino, ciascuna delle quali è dotata di due facce, etichettate da un numero tra 1 e 6. Si trovi la sequenza più lunga possibile di pedine, rispettando l identità dei valori delle facce adiacenti delle pedine consecutive. A.A. 2001/2002 APA-ricorsione 126 Politecnico di Torino Pagina 64 di 64

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino La ricorsione Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario! Definizione di ricorsione e strategie divide et impera! Semplici algoritmi ricorsivi! Merge

Dettagli

Gli algoritmi ricorsivi di ordinamento. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Gli algoritmi ricorsivi di ordinamento. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino ordinamento Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Merge Sort Ricorsivo, divide et impera Stabile Divisione: due sottovettori SX e DX rispetto al centro del vettore. p r A.A.

Dettagli

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmo di ordinamento sul posto che ha tempo di esecuzione : QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : - O(n 2 ) nel caso peggiore - O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior

Dettagli

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT)

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT) QUICKSORT Basato sul paradigma divide-et-impera (come MERGE-SORT) Divide: stabilisce un valore di q tale da dividere l array A[p.. r] in due sottoarray non vuoti A[p.. q] e A[q+1.. r], dove ogni elemento

Dettagli

Quick Sort. PARTITION(A,p,r) risistema il sottoarray A[p...r] e riporta l indice q:

Quick Sort. PARTITION(A,p,r) risistema il sottoarray A[p...r] e riporta l indice q: Quick Sort - Ordinamento in loco - Tempo di esecuzione nel caso peggiore: Θ(n 2 ) - Tempo di esecuzione nel caso medio: Θ(n lg n) - I fattori costanti nascosti nella notazione Θ sono abbastanza piccoli

Dettagli

Esercitazione 2. Quicksort

Esercitazione 2. Quicksort Esercitazione 2 Quicksort Caratteristiche Algoritmo di ordinamento mediamente molto efficiente Vantaggio: ordinamento sul posto Basato sul paradigma divide et impera (come merge sort) Elemento chiave:

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet   francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc m.franceschet@unich.it Algoritmi e Strutture di Dati I 2 Problema dell ordinamento

Dettagli

Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente

Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente Progetto di algoritmi sequenziali (un solo esecutore ) Divide et Impera Per regnare occorre tenere divisi i nemici e trarne vantaggio Greedy fai ad ogni passo la scelta più conveniente Buoni risultati

Dettagli

Albero di Riscorsione

Albero di Riscorsione Albero di Riscorsione Albero di ricorsione Un albero di ricorsione è un modo di visualizzare cosa accade in un algoritmo divide et impera L etichetta della radice rappresenta il costo non ricorsivo della

Dettagli

Esercizi per il corso di Algoritmi, anno accademico 2011/12

Esercizi per il corso di Algoritmi, anno accademico 2011/12 Esercizi per il corso di Algoritmi, anno accademico 2011/12 Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, nè in C++, etc. ). Di tutti gli

Dettagli

Gli algoritmi e la loro complessità

Gli algoritmi e la loro complessità Gli algoritmi e la loro complessità Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Algoritmo Un algoritmo è una procedura di calcolo (eventualmente composta da un certo numero di passi)

Dettagli

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera:

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera: MergeSort Usa la tecnica del divide et impera: 1 Divide: dividi l array a metà 2 Risolvi i due sottoproblemi ricorsivamente 3 Impera: fondi le due sottosequenze ordinate 1 Esempio di esecuzione 7 2 4 5

Dettagli

Gli heap. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Gli heap. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino 1 a.a. 2001/2002 Sommario Gli heap L algoritmo Heapsort Le code con priorità. 2 a.a. 2001/2002 Politecnico

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento Il problema Vogliamo ordinare un array monodimensionale in modo crescente per il caso decrescente valgono le stesse considerazioni Vari algoritmi possibili Diverse caratteristiche

Dettagli

Si può fare di meglio?

Si può fare di meglio? Si può fare di meglio? Gli algoritmi visti fino ad ora hanno costo O(n 2 ) È possibile fare di meglio? Quanto meglio? Algoritmi e Strutture Dati 1 Algoritmi divide et impera Idea generale Divide: Scomporre

Dettagli

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A Ingegneria e Scienze Informatiche - Cesena A.A. 2014-2015 pietro.dilena@unibo.it MergeSort MergeSort MergeSort: esempio MergeSort: pseudocodice Algoritmo di ordinamento ricorsivo basato sulla tecnica Divide

Dettagli

Analisi algoritmi ricorsivi e relazioni di ricorrenza

Analisi algoritmi ricorsivi e relazioni di ricorrenza Analisi algoritmi ricorsivi e relazioni di ricorrenza Punto della situazione Finora abbiamo affrontato: il tempo di esecuzione di un algoritmo, l analisi asintotica con le notazioni asintotiche e la tecnica

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento Il problema Vogliamo ordinare un array monodimensionale in modo crescente per il caso decrescente valgono le stesse considerazioni Vari algoritmi possibili Diverse caratteristiche

Dettagli

Tecniche Algoritmiche: divide et impera

Tecniche Algoritmiche: divide et impera Tecniche Algoritmiche: divide et impera Una breve presentazione F. Damiani - Alg. & Lab. 04/05 Divide et impera (o Divide and conquer) Per regnare occorre tenere divisi i nemici e trarne vantaggio F. Damiani

Dettagli

Divide et impera. Vittorio Maniezzo Università di Bologna

Divide et impera. Vittorio Maniezzo Università di Bologna Divide et impera 1 Vittorio Maniezzo Università di Bologna Divide et Impera Divide et impera: Dividi: se l istanza del problema da risolvere è troppo complicata per essere risolta direttamente, dividila

Dettagli

Quicksort Moltiplicazione di interi Master Theorem Valutazione del tempo di esecuzione di algoritmi iterativi e ricorsivi

Quicksort Moltiplicazione di interi Master Theorem Valutazione del tempo di esecuzione di algoritmi iterativi e ricorsivi Quicksort Moltiplicazione di interi Master Theorem Valutazione del tempo di esecuzione di algoritmi iterativi e ricorsivi Algoritmi basati sulla tecnica Divide et Impera In questo corso: Ricerca binaria

Dettagli

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione Informatica Generale Andrea Corradini 14 - Algoritmi: ordinamento per inserimento e ricorsione Sommario Un algoritmo iterativo: l'ordinamento per inserimento (insertion sort) La ricorsione: i numeri triangolari

Dettagli

Linguaggio C. Problemi di Ricerca e Ordinamento: Algoritmi e Complessità.

Linguaggio C. Problemi di Ricerca e Ordinamento: Algoritmi e Complessità. Linguaggio C Problemi di Ricerca e Ordinamento: Algoritmi e Complessità. 1 Complessità degli Algoritmi Si definisce Complessità di un Algoritmo C(A) la funzione dei parametri rilevanti per A che determina

Dettagli

LA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO

LA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini

Dettagli

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

LA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

LA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini

Dettagli

Algoritmi di Ordinamento

Algoritmi di Ordinamento Algoritmi di Ordinamento 1 Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento Statistiche di ordine 2 Selection Sort SelectionSort(dati[]) {

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 I conigli di Fibonacci Ricerca Binaria L isola dei conigli

Dettagli

Pensiero Algoritmico. Lezione 3 23 Novembre Ripasso. Anatomia di un programma. Anatomia di un programma. Ozalp Babaoglu Università di Bologna

Pensiero Algoritmico. Lezione 3 23 Novembre Ripasso. Anatomia di un programma. Anatomia di un programma. Ozalp Babaoglu Università di Bologna Pensiero Algoritmico Lezione 3 23 Novembre 2016 Ozalp Babaoglu Università di Bologna Ripasso Definizione del problema Astrarre i dettagli, costruire un modello Costruire l algoritmo che risolve il problema

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Modelli di calcolo e metodologie di analisi Domenico Fabio Savo 1 Notazione asintotica f(n) = tempo di esecuzione / occupazione di memoria di un algoritmo su input di dimensione

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Vettori e matrici #1 Le variabili definite come coppie sono dette variabili scalari Fondamenti di Informatica 5. Algoritmi e pseudocodifica Una coppia è una variabile

Dettagli

Laboratorio di Programmazione M-Z

Laboratorio di Programmazione M-Z Diretta Laboratorio di Programmazione M-Z Docente: Dott.ssa Alessandra Lumini alessandra.lumini@unibo.it Università di Bologna, Sede di Cesena Divide et impera Dividere un problema in sottoproblemi più

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi di Ordinamento Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Il problema dell ordinamento Il problema dell ordinamento di un insieme

Dettagli

ALGORITMI E STRUTTURE DATI

ALGORITMI E STRUTTURE DATI ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Introduzione al C + Array

Dettagli

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Ricorsione DD Cap. 5, pp. 160-184 KP Cap. 5, pp. 199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale

Dettagli

Progetto Corda. Alberto Ferrari. Alberto Ferrari Ingegneria dell'informazione, UniPR. 18/12/2017 Progetto Corda

Progetto Corda. Alberto Ferrari. Alberto Ferrari Ingegneria dell'informazione, UniPR. 18/12/2017 Progetto Corda Progetto Corda Alberto Ferrari Alberto Ferrari Ingegneria dell'informazione, UniPR file:///e:/cordanoweb/lez/array.html#3 1/33 Array (ordinamento) 2/33 file:///e:/cordanoweb/lez/array.html#3 2/33 Sort

Dettagli

RICORSIONE. Informatica B - A.A. 2013/2014

RICORSIONE. Informatica B - A.A. 2013/2014 RICORSIONE Informatica B - A.A. 2013/2014 RICORSIONE Che cos è la ricorsione? Un sottoprogramma P richiama se stesso (ricorsione diretta) Un sottoprogramma P richiama un altro sottoprogramma Q che comporta

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi Ricorsivi e Ricorrenze Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno

Dettagli

Informatica (A-K) 5. Algoritmi e pseudocodifica

Informatica (A-K) 5. Algoritmi e pseudocodifica Vettori e matrici #1 Informatica (A-K) 5. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile & Ambientale A.A. 2011-2012 2 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie

Dettagli

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie

Dettagli

Definizioni. Soluzione ottima: migliore soluzione possibile Soluzione ottima localmente: soluzione ottima in un dominio contiguo. Il paradigma greedy

Definizioni. Soluzione ottima: migliore soluzione possibile Soluzione ottima localmente: soluzione ottima in un dominio contiguo. Il paradigma greedy Il paradigma greedy Paolo Camurati, Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Definizioni Soluzione ottima: migliore soluzione possibile Soluzione ottima localmente:

Dettagli

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente: Pag 29 4) La ricorsione 4.1 Funzioni matematiche ricorsive Partiamo da un concetto ben noto, quello delle funzioni matematiche ricorsive. Una funzione matematica è detta ricorsiva quando la sua definizione

Dettagli

In questa lezione: correttezza del mergesort Analisi del mergesort: relazioni di ricorrenza e alberi della ricorsione

In questa lezione: correttezza del mergesort Analisi del mergesort: relazioni di ricorrenza e alberi della ricorsione In questa lezione: correttezza del mergesort Analisi del mergesort: relazioni di ricorrenza e alberi della ricorsione Prof E Fachini - Intr Alg 1 MergeSort: correttezza MergeSort (A,p,r) if p < r then

Dettagli

3 aprile o Esonero: mercoledi 17 aprile ore 11:30 14:00 consulta la pag. WEB alla voce esoneri. si raccomanda la puntualita!

3 aprile o Esonero: mercoledi 17 aprile ore 11:30 14:00 consulta la pag. WEB alla voce esoneri. si raccomanda la puntualita! 3 aprile 2002 Avvisi: 1 o Esonero: mercoledi 17 aprile ore 11:30 14:00 consulta la pag. WEB alla voce esoneri si raccomanda la puntualita! Qualche informazione sull esonero Argomenti trattati: svolti nelle

Dettagli

Moltiplicazione veloce di interi

Moltiplicazione veloce di interi Moltiplicazione veloce di interi Ogni numero intero w di n cifre può essere scritto come 10 n/2 w s + w d w s indica il numero formato dalle n/2 cifre più significative di w w d denota il numero formato

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi di Ordinamento Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 13 novembre 2008 Il problema dell ordinamento Il problema dell ordinamento

Dettagli

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario La ricorsione Metodi ricorsivi Esercizi proposti 16/01/2013 2 La ricorsione In Java ogni metodo può chiamare anche se stesso,

Dettagli

Ordinamento per inserzione e per fusione

Ordinamento per inserzione e per fusione Ordinamento per inserzione e per fusione Alessio Orlandi 15 marzo 2010 Fusione: problema Problema Siano A e B due array di n A e n B interi rispettivamente. Si supponga che A e B siano ordinati in modo

Dettagli

INFORMATICA GENERALE

INFORMATICA GENERALE CAROSELLI STEFANO INFORMATICA GENERALE TESINA «LA TECNICA DEL DIVIDE-ET-IMPERA E DUE SUE IMPORTANTI APPLICAZIONI: IL QUICK SORT E IL MERGE SORT» La tecnica del DIVIDE-ET-IMPERA è un metodo di risoluzione

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi di Ordinamento Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Il problema dell ordinamento Il problema dell ordinamento di un insieme

Dettagli

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice Funzioni FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvono parti specifiche di un problema Una funzione permette di attribuire un nome ad un insieme di istruzioni

Dettagli

Mergesort. Mergesort. Mergesort. Mergesort. L idea è la seguente: (par. 13.4) dividere l insieme in due parti uguali di n/2 componenti

Mergesort. Mergesort. Mergesort. Mergesort. L idea è la seguente: (par. 13.4) dividere l insieme in due parti uguali di n/2 componenti L idea è la seguente: (par. 13.4) dividere l insieme in due parti uguali di n/2 componenti n/2 n/2 se fossero già ordinate le potremmo riunire con un algoritmo di fusione (merge) Esempio. Consideriamo

Dettagli

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita n! = 1 n( n 1)! se se n n = > 0 0 dove n è un numero intero non negativo Il calcolo del fattoriale

Dettagli

Ricerca. Per ricerca si intende il procedimento di localizzazione di una particolare informazione in un elenco di dati.

Ricerca. Per ricerca si intende il procedimento di localizzazione di una particolare informazione in un elenco di dati. Ricerca Per ricerca si intende il procedimento di localizzazione di una particolare informazione in un elenco di dati. Il problema della ricerca in termini generali : dato un insieme D = {a 1,a 2,...,a

Dettagli

Ricerca in una sequenza ordinata

Ricerca in una sequenza ordinata Ricerca su array ordinata Ricerca in una sequenza ordinata Se la sequenza è ordinata posso sfruttare l ordinamento per rendere più efficiente la ricerca, terminando se l elemento corrente risulta maggiore

Dettagli

QuickSort (1962, The Computer Journal)

QuickSort (1962, The Computer Journal) QuickSort (1962, The Computer Journal) Charles Antony Richard Hoare (1934 -) Attualmente senior researcher al Microsoft Research Center di Cambridge Hoare ha vinto nel 1980 il Turing Award, il premio più

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino I conigli di Fibonacci Ricerca Binaria L isola dei conigli Leonardo da

Dettagli

Algoritmi di ordinamento: Array e ricorsione

Algoritmi di ordinamento: Array e ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Insertion Sort Quicksort Heapsort Indice

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 27 marzo 2012 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,

Dettagli

Algoritmi e Strutture Dati. Divide-et-impera

Algoritmi e Strutture Dati. Divide-et-impera Algoritmi e Strutture Dati Divide-et-impera Alberto Montresor Università di Trento 2018/12/05 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Sommario 1

Dettagli

Operativamente, risolvere un problema con un approccio ricorsivo comporta

Operativamente, risolvere un problema con un approccio ricorsivo comporta ! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa!! La ricorsione consiste nella possibilità di definire una funzione in termini di se

Dettagli

Algoritmi di ordinamento: Array e ricorsione

Algoritmi di ordinamento: Array e ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output F = { (s, s ) } per ogni s esiste una e una sola coppia (s, s ). Esempio: un algoritmo che calcola il quadrato di

Dettagli

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli Studi di Napoli Federico II wpage.unina.it/lapegna Partiamo da un

Dettagli

12 Function Handles e Ricorsione in MATLAB

12 Function Handles e Ricorsione in MATLAB 1 Function Handles e Ricorsione in MATLAB Un function handle è una variabile il cui valore è una funzione. Data una funzione esistente, il suo function handle è dichiarato come handle = @nome dove nome

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento! Selection Sort! Quick Sort! Lower bound alla complessità degli algoritmi di ordinamento Ordinamento 1 Selection Sort SelectionSort(dati[]) { for (i=0; idati.length-1; i++) { min

Dettagli

QuickSort (1962, The Computer Journal)

QuickSort (1962, The Computer Journal) QuickSort (1962, The Computer Journal) Charles Antony Richard Hoare (1934 -) Attualmente senior researcher al Microsoft Research Center di Cambridge Hoare ha vinto nel 1980 il Turing Award, il premio più

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita n! = 1 n( n 1)! se se n n = > 0 0 dove n è un numero intero non negativo Il calcolo del fattoriale

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ Heap e Heapsort Algoritmi di ordinamento Insertion Sort Quicksort Heapsort Insertion Sort L

Dettagli

5. DIVIDE AND CONQUER I

5. DIVIDE AND CONQUER I Divide-et-Impera (Divide and conquer) 5. DIVIDE AND CONQUER I Mergesort e Relazioni di ricorrenza Esempi di progettazione D&I Moltiplicazione di interi Contare inversioni Divide-et-Impera. Definizione

Dettagli

Cominciamo con un esempio... Utilizzando un sottoprogramma 16/12/2017

Cominciamo con un esempio... Utilizzando un sottoprogramma 16/12/2017 Cominciamo con un esempio... Franco FRATTOLILLO Dipartimento di Ingegneria Università degli Studi del Sannio Corso di "Programmazione I" Corso di Laurea in Ingegneria Informatica / ExAT 1 Franco FRATTOLILLO

Dettagli

Capitolo 19. Ricorsione

Capitolo 19. Ricorsione Capitolo 19 La ricorsione Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a sé stessa Esempio: Funzione fattoriale su interi non negativi: f(n) = n!

Dettagli

Ordinamenti ricorsivi

Ordinamenti ricorsivi Ordinamenti ricorsivi Selection Sort ricorsivo Algoritmi di ordinamento I Il metodo del selection sort può essere facilmente realizzato in modo ricorsivo I si definisce una procedura che ordina (ricorsivamente)

Dettagli

13 Ricorsione con MATLAB

13 Ricorsione con MATLAB 13.1 Esercizi Esercizio 13.1 Scrivere una funzione che verifichi iterativamente se una stringa è palindroma. Scrivere poi una funzione che implementi la stessa funzionalità in modo ricorsivo. Si stampi

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Algoritmi di ordinamento Gli ordinamenti interni sono fatti su sequenze in memoria centrale Fondamenti di Informatica 18. Algoritmi di ordinamento in C++ Gli ordinamenti esterni sono fatti su sequenze

Dettagli

La ricorsione. Induzione nel progetto e nella verifica di programmi ricorsivi. Le forme della ricorsione

La ricorsione. Induzione nel progetto e nella verifica di programmi ricorsivi. Le forme della ricorsione La ricorsione Induzione nel progetto e nella verifica di programmi ricorsivi. Le forme della ricorsione Circoli viziosi Se in una definizione ciò che viene definito (definiendum) è usato per definire (nel

Dettagli

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Selection e Insertion Sort Ordinamento Dato un insieme S di n elementi presi da un dominio totalmente ordinato, ordinare S in ordine non crescente o non

Dettagli

Algoritmi e strutture di dati 2

Algoritmi e strutture di dati 2 Algoritmi e strutture di dati 2 Paola Vocca Lezione 1: Divide et Impera 1 Paradigma del divide et impera Strutturato in tre fasi. Sia Π() istanza di dimensione di un problema computazionale Π (dove è immediato

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Esempi: ordinare alfabeticamente lista di nomi, o insieme

Dettagli

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento Alessandra Raffaetà Università Ca Foscari Venezia Corso di Laurea in Informatica Ricerca binaria Assunzione:

Dettagli

ALGORITMI DI ORDINAMENTO ALGORITMI DI ORDINAMENTO

ALGORITMI DI ORDINAMENTO ALGORITMI DI ORDINAMENTO ALGORITMI DI ORDINAMENTO Scopo: ordinare una sequenza di elementi in base a una certa relazione d ordine lo scopo finale è ben definito algoritmi equivalenti diversi algoritmi possono avere efficienza

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Quicksort (*) e metodi di ordinamento lineari Punto della situazione Problema dell ordinamento: Lower bound (n log n) Upper bound O(n log n) Algoritmi

Dettagli

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE PROGRAMMAZIONE BIENNIO: SECONDA DISCIPLINA: INFORMATICA PIANO DI LAVORO DEL DOCENTE / RELAZIONE FINALE Anno scolastico 2014/2015 DOCENTE Prof. PAOLO ARMANI CLASSE:

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Elementi di Programmazione Dinamica Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Tecniche di Programmazione Tecniche di progettazione e

Dettagli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento

Dettagli

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort Due algoritmi di ordinamento basati sulla tecnica Divide et Impera: Mergesort e Quicksort (13 ottobre 2009, 2 novembre 2010) Ordinamento INPUT: un insieme di n oggetti a 1, a 2,, a n presi da un dominio

Dettagli

Divide et impera. Divide et impera. Divide et impera. Divide et impera

Divide et impera. Divide et impera. Divide et impera. Divide et impera Divide et impera Divide et impera La tecnica detta divide et impera è una strategia generale per impostare algoritmi (par. 9.4). Consideriamo un problema P e sia n la dimensione dei dati, la strategia

Dettagli

Pseudo codice. Paolo Bison. Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova. Pseudo codice, Paolo Bison, A.A , p.

Pseudo codice. Paolo Bison. Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova. Pseudo codice, Paolo Bison, A.A , p. Pseudo codice Paolo Bison Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova Pseudo codice, Paolo Bison, A.A. 2003-04, 2003-09-30 p.1/38 Pseudo codice linguaggio testuale mix di linguaggio naturale

Dettagli

IEIM Esercitazione IX Puntatori, Enumerazione e Ricorsione. Alessandro A. Nacci -

IEIM Esercitazione IX Puntatori, Enumerazione e Ricorsione. Alessandro A. Nacci - IEIM 2017-2018 Esercitazione IX Puntatori, Enumerazione e Ricorsione Alessandro A. Nacci alessandro.nacci@polimi.it - www.alessandronacci.it 1 Matrici e funzioni Esercizio 1 2 MATRICI E FUNZIONI Il passaggio

Dettagli

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi Informatica Generale Andrea Corradini 13 - Gli algoritmi e la risoluzione di problemi Sommario Passi per la risoluzione di problemi Problemi di ricerca e ordinamento Algoritmi iterativi: la ricerca lineare

Dettagli

In questa lezione. Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort

In questa lezione. Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort In questa lezione Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort [CLRS] par. 2.3. Prof. E. Fachini - Intr. Alg.!1 Progettazione di

Dettagli

Corso di Perfezionamento

Corso di Perfezionamento Programmazione Dinamica 1 1 Dipartimento di Matematica e Informatica Università di Camerino 15 febbraio 2009 Tecniche di Programmazione Tecniche di progettazione di algoritmi: 1 Divide et Impera 2 Programmazione

Dettagli

ESERCIZI SULLA TECNICA BACKTRACKING e BRANCH & BOUND

ESERCIZI SULLA TECNICA BACKTRACKING e BRANCH & BOUND ESERCIZI SULLA TECNICA BACKTRACKING e BRANCH & BOUND 1. [ STRINGHE] Scrivere in pseudo-codice una procedura che, preso in input un intero n, stampi tutte le stringhe di lunghezza minore o uguale ad n sull

Dettagli