05EIP. Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino. Definizione di ricorsione e strategie divide et impera
|
|
- Ornella Martino
- 5 anni fa
- Visualizzazioni
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 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
DettagliGli 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.
DettagliAlgoritmo 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
DettagliQUICKSORT. 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
DettagliQuick 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
DettagliEsercitazione 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:
DettagliAlgoritmi 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
DettagliPer 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
DettagliAlbero 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
DettagliEsercizi 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
DettagliGli 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)
DettagliCamil 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
DettagliGli 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
DettagliAlgoritmi 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
DettagliSi 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
DettagliLaboratorio 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
DettagliAnalisi 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
DettagliAlgoritmi 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
DettagliTecniche 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
DettagliDivide 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
DettagliQuicksort 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
DettagliInformatica 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
DettagliLinguaggio 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
DettagliLA 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
DettagliALGORITMI 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
DettagliLA 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
DettagliAlgoritmi 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[]) {
DettagliAlgoritmi 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
DettagliPensiero 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
DettagliAlgoritmi 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
DettagliFondamenti 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
DettagliLaboratorio 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ù
DettagliAlgoritmi 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
DettagliALGORITMI 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
DettagliCorso 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
DettagliProgetto 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
DettagliRICORSIONE. 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
DettagliAlgoritmi 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
DettagliInformatica (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
DettagliFondamenti 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
DettagliDefinizioni. 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:
DettagliUn 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
DettagliIn 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
Dettagli3 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
DettagliMoltiplicazione 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
DettagliAlgoritmi 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
DettagliProgrammazione 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,
DettagliOrdinamento 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
DettagliINFORMATICA 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
DettagliAlgoritmi 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
DettagliFUNZIONI. 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
DettagliMergesort. 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
Dettaglin 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
DettagliRicerca. 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
DettagliRicerca 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
DettagliQuickSort (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ù
DettagliEsercizi 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,
DettagliAlgoritmi 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
DettagliAlgoritmi 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
DettagliEsercizi 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,
DettagliAlgoritmi 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
DettagliOperativamente, 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
DettagliAlgoritmi 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
DettagliTempo 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
DettagliUn 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
DettagliLABORATORIO 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
Dettagli12 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
DettagliAlgoritmi 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
DettagliQuickSort (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ù
DettagliTempo 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
Dettaglin 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
DettagliLaboratorio 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
Dettagli5. 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
DettagliCominciamo 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
DettagliCapitolo 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!
DettagliOrdinamenti 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)
Dettagli13 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
DettagliFondamenti 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
DettagliLa 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
DettagliAlgoritmi 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
DettagliAlgoritmi 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
DettagliAlgoritmi 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
DettagliLaboratorio 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:
DettagliALGORITMI 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
DettagliAlgoritmi 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
Dettagliliceo 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:
DettagliAlgoritmi 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
DettagliFondamenti 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
DettagliDue 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
DettagliDivide 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
DettagliPseudo 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
DettagliIEIM 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
DettagliInformatica 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
DettagliIn 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
DettagliCorso 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
DettagliESERCIZI 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