Ordinamento per inserzione e per fusione
|
|
- Mariangela Bertoni
- 6 anni fa
- Visualizzazioni
Transcript
1 Ordinamento per inserzione e per fusione Alessio Orlandi 15 marzo 2010
2 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 non decrescente. Si crei C, l array contenente gli elementi di A e B, ordinato in modo non decrescente. Esempio: A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4, 5, 7, 7, 8, 10, 13, 14
3 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 non decrescente. Si crei C, l array contenente gli elementi di A e B, ordinato in modo non decrescente. Esempio: Con le carte viene meglio A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4, 5, 7, 7, 8, 10, 13, 14
4 Fusione: soluzione Intuzione: osserviamo 2 elementi alla volta, spostiamo il più piccolo in output e avanziamo il suo array. A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C =
5 Fusione: soluzione Intuzione: osserviamo 2 elementi alla volta, spostiamo il più piccolo in output e avanziamo il suo array. A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2,
6 Fusione: soluzione Intuzione: osserviamo 2 elementi alla volta, spostiamo il più piccolo in output e avanziamo il suo array. A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4,
7 Fusione: soluzione Intuzione: osserviamo 2 elementi alla volta, spostiamo il più piccolo in output e avanziamo il suo array. A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4, 5,
8 Fusione: soluzione Intuzione: osserviamo 2 elementi alla volta, spostiamo il più piccolo in output e avanziamo il suo array. A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4, 5, 7,
9 Fusione: soluzione Intuzione: osserviamo 2 elementi alla volta, spostiamo il più piccolo in output e avanziamo il suo array. A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4, 5, 7, 7,
10 Fusione: soluzione Intuzione: osserviamo 2 elementi alla volta, spostiamo il più piccolo in output e avanziamo il suo array. A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4, 5, 7, 7, 8,
11 Fusione: soluzione Intuzione: osserviamo 2 elementi alla volta, spostiamo il più piccolo in output e avanziamo il suo array. A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4, 5, 7, 7, 8, 10, Casi limite: terminata una lista, l altra si copia.
12 Fusione: soluzione Intuzione: osserviamo 2 elementi alla volta, spostiamo il più piccolo in output e avanziamo il suo array. A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4, 5, 7, 7, 8, 10, 13, Casi limite: terminata una lista, l altra si copia.
13 Fusione: soluzione Intuzione: osserviamo 2 elementi alla volta, spostiamo il più piccolo in output e avanziamo il suo array. A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4, 5, 7, 7, 8, 10, 13, 14 Casi limite: terminata una lista, l altra si copia.
14 Fusione: pseudocodice void merge ( i n t A, i n t na, i n t B, i n t nb, i n t C) { i n t Acur = 0, Bcur = 0, Ccur = 0 ; / Corpo p r i n c i p a l e. / while ( Acur < na && Bcur < nb ) i f ( A[ Acur ] <= B[ Bcur ] ) C [ Ccur++] = A[ Acur ++]; e l s e C [ Ccur++] = B[ Bcur ++]; / Una l i s t a t e r m i n a t a. / while ( Acur < na ) C [ Ccur++] = A[ Acur ++]; while ( Bcur < nb ) C [ Ccur++] = B[ Bcur ++]; }
15 Fusione: complessità QUIZ! Sia n = n A + n B. La complessità al caso pessimo di merge è: O(log n) O(n) O(n 2 )
16 Fusione: complessità QUIZ! Sia n = n A + n B. La complessità al caso pessimo di merge è: O(log n) O(n) O(n 2 ) Dimostriamolo..
17 Fusione in O(n) - I Abbiamo la complessità del ciclo principale: while ( Acur < na && Bcur < nb ) i f ( A[ Acur ] <= B[ Bcur ] ) C [ Ccur++] = A[ Acur ++]; e l s e C [ Ccur++] = B[ Bcur ++]; E quella di uno dei due cicli successivi: while ( Acur < na ) C [ Ccur++] = A[ Acur ++]; while ( Bcur < nb ) C [ Ccur++] = B[ Bcur ++]; Le due complessità si sommano
18 Fusione in O(n) - Limiti Liste terminate while ( Acur < na ) C [ Ccur++] = A[ Acur ++]; while ( Bcur < nb ) C [ Ccur++] = B[ Bcur ++]; Nel primo ciclo, copio un array: f 1 (n A ) O(n A ). Nel secondo ciclo, copio un array: f 2 (n B ) O(n B ). Complessità totale: O(n A ) + O(n B ) O(n): x t.c. f 1 (n A ) x n A. y t.c. f 2 (n B ) y n B. Se z = x + y, f 1 (n A ) + f 2 (n B ) z (n A + n B ) z n O(n).
19 Fusione in O(n) - principale while ( Acur < na && Bcur < nb ) i f ( A[ Acur ] <= B[ Bcur ] ) C [ Ccur++] = A[ Acur ++]; e l s e C [ Ccur++] = B[ Bcur ++]; A = 4, 7, 8, 13, 14 B = 2, 5, 7, 10 C = 2, 4, 5, 7, 7, 8, 10, 13, 14 Intuizione: il numero di iterazioni max Ccur, ovvero n A + n B = n. O(1) operazioni per ogni iterazione del ciclo La complessità del ciclo principale è O(n).
20 Ordinamento per inserzione
21 Ordinamento - motivazione Problema Sia A un array di n interi > 0, ordinati in modo non decrescente. Si fornisca il numero di elementi distinti contenuti all interno dell array Esempio: A = 3, 3, 6, 6, 6, 8, 8, 8. Facile! Soluzione già vista, in O(n).
22 Ordinamento - motivazione Problema Sia A un array di n interi > 0, Si fornisca il numero di elementi distinti contenuti all interno dell array Esempio A = 6, 3, 6, 3, 6, 8, 8, 8. Meno facile!. Una soluzione in O(n 2 ) : count = 0 ; f o r ( i = 0 ; i < n ; i++ ) i f ( A[ i ] > 0 ) { count++; f o r ( j = i ; j < n ; j++ ) i f ( A[ i ] == A[ j ] ) A[ j ] = 0 ; }
23 Ordinamento - motivazione Problema Sia A un array di n interi > 0, Si fornisca il numero di elementi distinti contenuti all interno dell array Esempio A = 6, 3, 6, 3, 6, 8, 8, 8. Altra strada: (1) ordino A, (2) soluzione ordinata. O(n log n)!!
24 Ordinamento - motivazione II Problema Sia A un array di interi. Ordinare A in modo non decrescente. Problema semplice da porre. Ordinare aiuta a lavorare dopo: uno strumento. Differenti velocità: da O(n log n) a O(n 2 ) a O(n + max A). Differenti algoritmi: insertion sort, mergesort, quicksort, heapsort,.. Differenti tecniche: divide et impera, ricorsione, heap. Oggi: insertion sort, mergesort.
25 Insertion sort Torniamo alle carte
26 Insertion sort Torniamo alle carte Composto da n passi. Ad ogni passo i = 0, 1,..., n 1: A[0..i 1] è già stata riordinata. Il resto no. Dobbiamo inserire A[i] nella sequenza mantenendo l ordine. Troviamo la posizione j i in cui va messo. Inseriamo A[i] lì, spingendo a destra il resto.
27 Insertion sort - fare spazio Passo i = 3, A[0..2] è ordinato. Estendiamo ad A[3] tmp = 4; 4 < < : A[1] = tmp
28 Insertion sort: pseduocodice void i n s e r t i o n S o r t ( i n t A, i n t n ) { i n t tmp ; f o r ( i = 0 ; i < n ; i++ ) { tmp = A[ i ] ; j = s h i f t (A, i ) ; A[ j ] = tmp ; } } Codifica completa: esercizio di laboratorio!
29 Insertion sort: pseduocodice void i n s e r t i o n S o r t ( i n t A, i n t n ) { i n t tmp ; f o r ( i = 0 ; i < n ; i++ ) { tmp = A[ i ] ; j = s h i f t (A, i ) ; A[ j ] = tmp ; } } Codifica completa: esercizio di laboratorio! QUIZ! Complessità?
30 Insertion sort: pseduocodice void i n s e r t i o n S o r t ( i n t A, i n t n ) { i n t tmp ; f o r ( i = 0 ; i < n ; i++ ) { tmp = A[ i ] ; j = s h i f t (A, i ) ; A[ j ] = tmp ; } } Codifica completa: esercizio di laboratorio! QUIZ! Complessità? O(n 2 )
31 Insertion sort: complessità Al passo i l operazione di shift esegue al più i spostamenti: O(i). Si eseguono poi altre due operazioni in tempo costante, ad ogni passo. Se sommiamo, per un qualche c: n 1 T (n) = O(i) i=0 n 1 c i = i=0 = c (n2 n) 2 c n (n 1) 2 O(n 2 )
32 Insertion sort: complessità Al passo i l operazione di shift esegue al più i spostamenti: O(i). Si eseguono poi altre due operazioni in tempo costante, ad ogni passo. Se sommiamo, per un qualche c: n 1 T (n) = O(i) i=0 n 1 c i = i=0 = c (n2 n) 2 c n (n 1) 2 O(n 2 ) Insertion sort è lento! Non ci aiuta per trovare i distinti!
33 Mergesort: idea Tecnica del divide et impera: riduciamo il problema a se stesso! Prendiamo il nostro array A e dividiamolo in due metà: A L e A R Ora, supponiamo di poter ordinare A L e A R indipendentemente: A questo punto possiamo usare merge e ottenere A ordinato!
34 Come ordinare A L e A R? Ecco il impera: mergesort! Dividiamo A L in (A L ) L e (A L ) R poi li ordiniamo usando mergesort, e poi li fondiamo, per ottenere A L ordinato. La stessa cosa succede con A R : dividiamo, ordiniamo, fondiamo. Quando fermarsi? Quando la lunghezza diventa < 1: a quel punto è pronto.
35 Come ordinare A L e A R? Ecco il impera: mergesort! Dividiamo A L in (A L ) L e (A L ) R poi li ordiniamo usando mergesort, e poi li fondiamo, per ottenere A L ordinato. La stessa cosa succede con A R : dividiamo, ordiniamo, fondiamo. Quando fermarsi? Quando la lunghezza diventa < 1: a quel punto è pronto. Ingredienti: Caso base semplice Possibilità di ricorrere su due sottoproblemi identici Possibilità di ricomporre la soluzione dei due sottoproblemi.
36 Mergesort: pseudocodice Mergesort = strategia di esecuzione merge. 1 void mergesort ( i n t A, i n t l e f t, i n t r i g h t ) 2 { 3 i f ( r i g h t l e f t > 0 ) { 4 i n t middle = ( l e f t+r i g h t ) / 2 ; 5 mergesort ( A, l e f t, middle ) ; 6 mergesort ( A, middle +1, r i g h t ) ; 7 newmerge ( A, l e f t, middle, r i g h t ) ; 8 } 9 } newmerge: variazione sul tema di merge, la vedremo dopo. Si usa l intervallo [left, right).
37 Mergesort: simulazione S(0,7)
38 Mergesort: simulazione S(0,7) S(0,3)
39 Mergesort: simulazione S(0,7) S(0,3) S(0,1)
40 Mergesort: simulazione S(0,0) S(0,7) S(0,3) S(0,1)
41 Mergesort: simulazione S(0,7) S(0,3) S(0,1) S(0,0) S(1,1)
42 Mergesort: simulazione S(0,7) S(0,3) S(0,1) S(0,0) S(1,1)
43 Mergesort: simulazione S(0,7) S(0,3) S(0,1) S(2,3) S(0,0) S(1,1)
44 Mergesort: simulazione S(0,7) S(0,3) S(0,1) S(2,3) S(0,0) S(1,1) S(2,2)
45 Mergesort: simulazione S(0,7) S(0,3) S(0,1) S(2,3) S(0,0) S(1,1) S(2,2) S(3,3)
46 Mergesort: simulazione S(0,7) S(0,3) S(0,1) S(2,3) S(0,0) S(1,1) S(2,2) S(3,3)
47 Mergesort: simulazione S(0,7) S(0,3) S(0,1) S(2,3) S(0,0) S(1,1) S(2,2) S(3,3)
48 Mergesort: simulazione S(0,7) S(0,3) S(4,7) S(0,1) S(2,3) S(0,0) S(1,1) S(2,2) S(3,3)
49 Mergesort: dettaglio Abbiamo usato newmerge, ma merge presupponeva di avere: 2 array in input un array per l output Noi vogliamo che funzioni sul posto, sia come input che come output. Soluzione: Primo elemento banale. Secondo elemento: introduciamo un array ausiliario di dimensione n che viene usato da merge di volta in volta: void mergesort ( i n t A, i n t l, i n t r, i n t TMP) void newmerge ( i n t A, i n t l, i n t c, i n t r, i n t TMP) Quando il risultato è pronto in TMP, lo spostiamo in A[l..r].
50 Mergesort: complessità Dimostrare la complessità di mergesort richiede l uso di equazioni di ricorrenza. Ad ogni passo i, sia x i = r i l i + 1. Sia T (x) il tempo di mergesort su x: Ad ogni passo, eseguiamo mergesort su x/2 per 2 volte (sx e dx) Quando le sottochiamate terminano, eseguiamo merge, con complessità O(x). Pertanto, T (x) dipende da T (x/2). In particolare: T (0) = T (1) = O(1) T (x) = T ( x/2 ) + T ( x/2 ) + O(x) 2T ( x/2 ) + O(x) Risoluzione effettiva: prof. Grossi. Ma è T (n) = O(n log n).
51 Mergesort: intuizione Solo le Merge contano: ogni nodo ha costo O(r l + 1). M(0,7) M(0,3) M(4,7) M(0,1) M(2,3) M(4,5) M(6,7) M(0,0) M(1,1) M(2,2) M(3,3) M(4,4) M(5,5) M(6, 6) M(7, 7) Quindi, ogni livello dell albero ha complessità O(n).
52 Quanti livelli ha l albero?
53 Quanti livelli ha l albero? 1 1 nodo 2 2 nodi 3 4 nodi n nodi 1, 2, 4, etc.. cresce come 2 i per i = 0, 1,.... Quando i = log 2 n, allora l albero termina di crescere. T (n) = log 2 n i=0 O(n) O(n log n). Quindi: O(n log n) per ordinare un array, O(n) per calcolare i distinti O(n log n), meglio di O(n 2 )!.
54 Mergesort: iterativo È proprio necessaria la ricorsione? NO! Mergesort iterativo! M(0,7) M(0,3) M(4,7) M(0,1) M(2,3) M(4,5) M(6,7) Eseguiamo le chiamate di merge per livelli, dal basso verso l alto. Ultimo livello: fusione di singoli. Le coppie diventano ordinate. Penultimo livello: fusione di coppie. Le quadruple diventano ordinate. Terzultimo livello: fusione di quadruple, le 8-uple diventano ordinate.... Proseguiamo fin quando non fondiamo solo 2 elementi (n/2 2)
55 Mergesort iterativo: codice void m e r g e I t e r ( i n t A, i n t n, i n t TMP) { i n t i, r ; f o r ( passo = 1 ; passo < n ; passo = 2 ) f o r ( i = 0 ; i+passo < n ; i +=2 passo ) { r = min ( n, i +2 passo ) ; merge (A, i, i+passo, r ) ; } } Vantaggio: niente ricorsione: può gestire dimensioni arbitrarie.
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
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
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
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
DettagliDizionari Liste invertite e Trie
Dizionari Liste invertite e Trie Lucidi tratti da Crescenzi Gambosi Grossi, Strutture di dati e algoritmi Progettazione, analisi e visualizzazione Addison-Wesley, 2006 Dizionari Universo U delle chiavi
DettagliPROVETTE D ESAME. Algoritmi e Strutture Dati
PROVETTE D ESAME Algoritmi e Strutture Dati ESERCIZIO 1 Si ottengano limiti superiori e inferiori per la seguente ricorrenza ESERCIZIO 1 ESERCIZIO 2 Dato un albero binario T, il grado di sbilanciamento
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
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
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
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
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
DettagliParallel sorting. Algoritmi Avanzati. Davide Lo Re
Parallel sorting Algoritmi Avanzati Davide Lo Re Indice Richiami Idea Descrizione Illustrazione Fase 1: Costruzione delle strutture dati Fase 1.1 Fase 1.2 Fase 2: Merge Analisi Costo Algoritmo di Cole
DettagliUn esempio di calcolo di complessità: insertion sort
Un esempio di calcolo di complessità: insertion sort Vediamo su un esempio come si può calcolare la complessità di un algoritmo... L esempio è un metodo semplice per ordinare arrays: insertion sort, o
DettagliIn questa lezione. Heapsort. ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 114
In questa lezione Heapsort ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 11 1 Paternità L heapsort è stato pubblicato da J. W. J. Williams nel 106. Pochi mesi
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. 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 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
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. 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
DettagliAlgoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.
E. Calabrese: Fondamenti di Informatica Algoritmi-1 Algoritmi di ricerca Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati. Per esempio: - cercare
DettagliLa 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
DettagliAlgoritmi e Strutture Dati
Algoritmi e Strutture Dati Capitolo 1 Un introduzione informale agli algoritmi Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione informale di algoritmo Insieme di istruzioni, definite
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
DettagliUn vettore è una struttura dati che permette di memorizzare sequenze di dati omogeneii (sequenze di interi, di valori booleani,...
Vettori (array) Un vettore è una struttura dati che permette di memorizzare sequenze di dati omogeneii (sequenze di interi, di valori booleani,...) I vettori sono caratterizzati da dimensione tipo Es.
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,
DettagliDati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base
Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1. Sia T una stringa arbitraria di lunghezza n 1 su un alfabeto Σ. È sempre possibile
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
DettagliHeap e code di priorità
Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010
DettagliNotazione asintotica. notazione Ω. notazione O. notazione o notazione ω. Marina Zanella Algoritmi e strutture dati Richiami matematici 1
Notazione asintotica Sebbene si possa talvolta determinare il tempo esatto di esecuzione di un algoritmo, l estrema precisione non giustifica lo sforzo del calcolo; infatti, per input sufficientemente
DettagliLaboratorio di Algoritmi e Strutture Dati. Code con Priorità
Laboratorio di Algoritmi e Strutture Dati Code con Priorità Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso
DettagliProblemi di ordinamento
Problemi di ordinamento Input: una sequenza di n numeri a 1, a 2,..., a n ; Output: una permutazione a 1, a 2,..., a n di a 1, a 2,..., a n tale che a 1 a 2... a n. Generalmente, la sequenza è rappresentata
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
DettagliAlgoritmi e Strutture Dati
Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Heap Heap binari: definizione Un heap binario è una struttura dati composta
DettagliAlgoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione
Algoritmi greedy Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione Gli algoritmi greedy sono algoritmi basati sull idea
DettagliEsercizi per il corso di Algoritmi e Strutture Dati
1 Esercizi per il corso di Algoritmi e Strutture Dati 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 algoritmi
DettagliEsercizi Capitolo 12 - Divide-et-Impera
Esercizi Capitolo 12 - Divide-et-Impera Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare
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,
DettagliOrdinamenti per confronto: albero di decisione
Ordinamenti per confronto: albero di decisione Albero di decisione = rappresentazione grafica di tutte le possibili sequenze di confronti eseguite da un algoritmo assegnato di ordinamento per confronto
DettagliSommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort
Ordinamento Sommario Ordinamento Selection Sort Bubble Sort/ Shaker Sort Shell Sort Cosa e' l'ordinamento Il problema consiste nell elaborare insiemi di dati costituiti da record I record hanno sono costituiti
DettagliQuicksort e qsort() Alessio Orlandi. 28 marzo 2010
Quicksort e qsort() Alessio Orlandi 28 marzo 2010 Intro Quicksort è l algoritmo di ordinamento più implementato, insieme con Mergesort. Tutte le librerie standard UNIX ne prevedono una implementazione.
DettagliEsercizi vari. Alberto Montresor. 19 Agosto, 2014
Esercizi vari Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle rispettive soluzioni
DettagliProblemi e algoritmi. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 (da U. de' Liguoro - Alg. & Spe. 03/04)
Problemi e algoritmi Il che cosa e il come Il che cosa ed il come Problema: descrive che cosa si deve calcolare Specifica (di un algoritmo): descrive che cosa calcola un algoritmo Algoritmo: descrive come
DettagliAlgoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio
Algoritmi Greedy Tecniche Algoritmiche: tecnica greedy (o golosa) Idea: per trovare una soluzione globalmente ottima, scegli ripetutamente soluzioni ottime localmente Un esempio Input: lista di interi
Dettagli2. Analisi degli Algoritmi
2. Analisi degli Algoritmi Introduzione 2.1 Un modello di macchina elementare: la Macchina a Registri 2.2 Costo di esecuzione di un programma 2.3 Analisi del costo di esecuzione: il modello a costi uniformi
DettagliQuicksort. Quicksort: idea di base. Riprendiamo il problema dell'ordinamento di n oggetti.
Riprendiamo il problema dell'ordinamento di n oggetti. Quicksort Per questo problema abbiamo già visto gli algoritmi insertion-sort e mergesort. Il tempo di esecuzione di insertion-sort è (n 2 ). Il tempo
DettagliProblemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come
Problemi e algoritmi Il che cosa e il come Problema: descrive che cosa si deve calcolare Specifica (di un algoritmo): descrive che cosa calcola un algoritmo Algoritmo: descrive come effettuare un calcolo
DettagliEsercizi di Algoritmi e Strutture Dati
Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi
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
DettagliAlgoritmi e Strutture Dati
Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e Strutture Dati Capitolo 2 Minimo albero ricoprente: Algoritmo di Prim Il problema del calcolo di un Minimum
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 e Strutture Dati
Algoritmi e Strutture Dati Informazioni sul corso + Un introduzione informale agli algoritmi Domenico Fabio Savo 1 Domenico Fabio Savo Email: savo@dis.uniroma1.it Web: http://www.dis.uniroma1.it/~savo
DettagliLE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve
LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione
DettagliLezione 8 Struct e qsort
Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort
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
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ù
DettagliScopo: ordinare una sequenza di elementi in base a una certa relazione d ordine. Ipotesi: gli elementi siano memorizzati in un array.
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 i algoritmi i possono avere efficienza
DettagliNell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:
Pag 24 3) Il problema della ricerca Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi: si incontrano in una grande varietà di situazioni reali; appaiono come sottoproblemi
DettagliElezione di un leader in una rete ad anello
Elezione di un leader in una rete ad anello Corso di Algoritmi Distribuiti Prof. Roberto De Prisco Lezione n a cura di Rosanna Cassino e Sergio Di Martino Introduzione In questa lezione viene presentato
DettagliDati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree
Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1 Si definisca Interval Tree un albero binario di ricerca le
DettagliAlgoritmi (9 CFU) (A.A ) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1
Algoritmi (9 CFU) (A.A. 2009-10) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1 Overview Definiamo la struttura dati heap Operazioni di costruzione e gestione di un heap Algoritmo Heapsort Code
DettagliAlgoritmi e Strutture Dati - II modulo Soluzioni degli esercizi
Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi Francesco Pasquale 6 maggio 2015 Esercizio 1. Su una strada rettilinea ci sono n case nelle posizioni 0 c 1 < c 2 < < c n. Bisogna installare
DettagliTecniche Algoritmiche/1 Divide et Impera
Tecniche Algoritmiche/1 Divide et Impera Ivan Lanese Dipartimento di Informatica Scienza e Ingegneria Università di Bologna Ivan.lanese@gmail.com http://www.cs.unibo.it/~lanese/ Divide-et-impera 2 Tecniche
DettagliNote per la Lezione 6 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 6 Ugo Vaccaro Ancora sulla tecnica Programmazione Dinamica Nella lezione scorsa abbiamo appreso che la tecnica Divide-et-Impera,
DettagliCammini minimi fra tutte le coppie
Capitolo 12 Cammini minimi fra tutte le coppie Consideriamo il problema dei cammini minimi fra tutte le coppie in un grafo G = (V, E, w) orientato, pesato, dove possono essere presenti archi (ma non cicli)
DettagliAlgoritmi e strutture di dati 2
Paola Vocca Lezione 4: Programmazione dinamica 1 Caratteristiche Programmazione dinamica: paradigma basato sullo stesso principio utilizzato per il divide et impera o il problema viene decomposto in sotto-problemi
DettagliUNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Algoritmi
UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Algoritmi Algoritmi classici Alcuni problemi si presentano con elevata frequenza e sono stati ampiamente studiati Ricerca di un elemento in un vettore
DettagliADT Coda con priorità
Code con priorità ADT Coda con priorità Una coda con priorità è una struttura dati dinamica che permette di gestire una collezione di dati con chiave numerica. Una coda con priorità offre le operazioni
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
DettagliEsercitazione 3. Heapsort
Esercitazione Heapsort Heapsort Algoritmo di ordinamento che utilizza una struttura dati detta heap per la gestione delle informazioni Tempo di esecuzione O(n lg n) Heap (binario) = struttura dati composta
DettagliAlgoritmi e strutture dati. Analisi di algoritmi Funzioni di costo, notazione asintotica
Algoritmi e strutture dati Analisi di algoritmi Funzioni di costo, notazione asintotica Alberto Montresor Università di Trento 2016/09/11 This work is licensed under a Creative Commons Attribution-ShareAlike
DettagliAlgoritmi di ordinamento (II parte)
Algoritmi di ordinamento (II parte) E3: sommario Studio di due implementazioni di algoritmi avanzati Algoritmo ordinamento veloce (QuickSort) Algoritmo per fusione (MergeSort) Metodi offerti in java.util
DettagliCOMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.200.2005/06 Prof. V.L. Plantamura Dott.ssa A. Angelini Confronto di algoritmi Uno stesso problema può essere risolto in modi diversi,
DettagliAlgoritmi e Strutture Dati Esercizi Svolti. Giuseppe Persiano Dipartimento di Informatica ed Appl. Renato M. Capocelli Università di Salerno
Algoritmi e Strutture Dati Esercizi Svolti Giuseppe Persiano Dipartimento di Informatica ed Appl Renato M Capocelli Università di Salerno Indice Esercizio 12-3 5 Esercizio 23-4 6 Esercizio 63-3 7 Esercizio
DettagliAppunti di informatica. Lezione 10 anno accademico Mario Verdicchio
Appunti di informatica Lezione 10 anno accademico 2016-2017 Mario Verdicchio Esercizio Scrivere un programma che, data una sequenza di 10 interi (scelta dall utente), la ordini in ordine crescente Soluzione
DettagliAlgoritmi e Strutture Dati 2/ed Quiz a risposta multipla
Camil Demetrescu Irene Finocchi Giuseppe F. Italiano Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla Indice 1 Un introduzione informale agli algoritmi 1 2 Modelli di calcolo e metodologie di
DettagliTipici tempi di esecuzione. Martedì 7 ottobre 2014
Tipici tempi di esecuzione Martedì 7 ottobre 2014 Punto della situazione Abbiamo definito il tempo di esecuzione di un algoritmo Scelto l analisi asintotica Abbiamo definito le notazioni asintotiche che
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:
DettagliEsempio: rappresentare gli insiemi
Esempio: rappresentare gli insiemi Problema: rappresentare gli insiemi Vedremo che la scelta della rappresentazione per implementarli non è così ovvia come era stato per i numeri razionali In realtà ci
DettagliUNIVERSITA DEGLI STUDI DI PERUGIA
UNIVERSITA DEGLI STUDI DI PERUGIA REGISTRO DELLE LEZIONI E DELLE ALTRE ATTIVITÀ DIDATTICHE Anno accademico 2006-2007 Dott./Prof. Pinotti Maria Cristina Settore scientifico-disciplinare INF01 Facoltà Scienze
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 HEAP SORT StudentiDIA Forum
Dettagli2.2 Alberi di supporto di costo ottimo
. Alberi di supporto di costo ottimo Problemi relativi ad alberi hanno numerose applicazioni: progettazione di reti (comunicazione, teleriscaldamento,...) memorizzazione compatta di sequenze (DNA) diffusione
DettagliAlgoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I)
Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I) Algoritmi greedy Gli algoritmi per problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione
DettagliInserimento in una lista ordinata
Inserimento in una lista ordinata Vogliamo inserire un nuovo elemento in una lista in cui gli elementi sono memorizzati in ordine crescente: Passo 1: creare un nuovo nodo della lista Passo 2: trovare il
DettagliRappresentazione degli algoritmi
Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti
DettagliTecniche di Ordinamento dei Vettori
Tecniche di Ordinamento dei Vettori Corso di Laurea Ingegneria Corso B A.A. 2010-2011 1 Contenuto 1) Generalità 2) Metodi a Minimo Ingombro di Memoria 2.1) Ordinamento per selezione ( Selection Sort )
DettagliCrescita funzioni. 20 novembre Come possiamo confrontare le funzioni di costo che abbiamo ottenuto finora?
Crescita funzioni 20 novembre 2006 1 Funzioni di costo Definizione 1 (Funzione di costo). Utilizziamo il termine funzione di costo per indicare una funzione f : N R dall insieme dei numeri naturali ai
DettagliLaboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 07/02/07 Nota Questi lucidi sono tratti
DettagliCalcolare x n = x x x (n volte)
Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile
DettagliOrdinamenti e crescita della complessità
Ordinamenti e crescita della complessità Informatica@SEFA 07/08 - Lezione Massimo Lauria Venerdì, 7 Ottobre 07 Nota bibliografica: Il contenuto di questa e di alcune delle prossime
DettagliInformatica 3. LEZIONE 20: Ordinamento esterno. Modulo 1: Organizzazione della memoria Modulo 2: Ordinamento esterno
Informatica 3 LEZIONE 20: Ordinamento esterno Modulo 1: Organizzazione della memoria Modulo 2: Ordinamento esterno Informatica 3 Lezione 20 - Modulo 1 Organizzazione della memoria Introduzione Dati in
DettagliCammini Minimi. Algoritmo di Dijkstra
Cammini Minimi Algoritmo di Dijkstra Cammino in un grafo Dato un grafo G=(V,E), un Cammino (Percorso) in G è un insieme di vertici v 1, v 2,.., v k tali che (v i, v i+1 ) E v 1 v 2 v 3 v k In un grafo
DettagliAlgoritmi e Strutture Dati Laboratorio 15/12/2008. Daniele Loiacono
Algoritmi e Strutture Dati Laboratorio 15/12/2008 Problema della compressione Rappresentare i dati in modo efficiente Impiegare il numero minore di bit per la rappresentazione Goal: risparmio spazio su
DettagliALGORITMI CORSO DI STUDIO IN INFORMATICA (laurea triennale) UNIVERSITÀ DEGLI STUDI DI CATANIA ANNO ACCADEMICO 2014/15
ANNO ACCADEMICO 2014/15 1 a prova in itinere 13 gennaio 2015 ESERCIZIO 1 Si risolva l equazione di ricorrenza al variare del parametro reale a>1. T (n) = 27 n a T + n 2 log n a ESERCIZIO 2 Si ordinino
DettagliStrutture di controllo iterative
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione Problema Scrivere un programma che acquisisca da standard input un intero
DettagliIntroduzione Definizioni
Informatica 3 Informatica 3 LEZIONE 20: Ordinamento esterno Lezione 20 - Modulo 1 Modulo 1: Organizzazione della memoria Modulo 2: Ordinamento esterno Organizzazione della memoria Politecnico di Milano
DettagliAlgoritmi e Strutture Dati. Capitolo 4 Ordinamento
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 una lista di nomi alfabeticamente, o un
DettagliProgrammazione dinamica
Programmazione dinamica Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Programmazione
DettagliAlgoritmi e Strutture dati a.a. 2013/2014
a.a. 2013/2014 Dr Informazioni docente E-mail docente: fdrmra@unife.it Ricevimento: Mercoledì 15:00-16:00 presso ufficio docenti a contratto (3 piano), Dipartimento di Matematica e Informatica, Campus
DettagliPermutazioni. 1 Introduzione
Permutazioni 1 Introduzione Una permutazione su un insieme di n elementi (di solito {1, 2,...,n}) è una funzione biiettiva dall insieme in sé. In parole povere, è una regola che a ogni elemento dell insieme,
Dettagli