ALGORITMI Docente: Prof. Domenico Cantone
|
|
- Davide Costa
- 4 anni fa
- Visualizzazioni
Transcript
1 CORSO SPECILE DI DURT NNULE PER IL CONSEGUIMENTO DELL BILITZIONE LL INSEGNMENTO NELL SCUOL SECONDRI DI I e II GRDO Indirizzo Fisico - Informatico - Matematico a.a. 00/07 - Classe - Informatica LGORITMI Docente: Prof. Domenico Cantone Modulo: LGORITMI DI ORDINMENTO Lucidi a cura del Dott. Salvatore Cristofaro
2 Problema dell ordinamento (Sorting) Il problema dell ordinamento è formalmente definito come segue: Input: Una sequenza di numeri (a, a,...,a n ), chiamata sequenza-input. Output: Una permutazione (i, i,..., i n ) di (,,...,n), chiamata soluzione, tale che si abbia a i a i a in. In tal caso, (a i, a i,..., a in ) è chiamata sequenza-output. Es. Data la sequenza-input (0, 0,,, 0, 9, ) a = 0 a = 0 a = a = a = 0 a = 9 a 7 = le permutazioni π a = (,,,, 7,, ) e π b = (,,,, 7,, ) sono soluzioni del problema dell ordinamento, a cui corrisponde la stessa sequenza-output (,, 0, 0,, 0, 9). Si osservi che, per una data sequenza-input S, il problema dell ordinamento può avere anche due o più soluzioni, ma ad esse corrisponde una stessa (unica) sequenza-output.
3 Una soluzione al problema dell ordinamento: ordinamento sul posto () Rappresentiamo la sequenza-input (a, a,..., a n ) mediante un array [.. n] di lunghezza n tale che [i] = a i, per i =,,..., n. sequenza-input (0, 0,,, 0, 9, ), con n = () Senza usare alcun array di supporto, riordiniamo gli elementi dell array, eventualmente scambiandoli di posto, in modo che alla fine si abbia [] [] [n]. sequenza-output (,, 0, 0,, 0, 9)
4 L algoritmo Insertion-Sort Insertion-Sort(). for j := to n do. k := [j]. i := j. while (i and [i] > k) do. [i + ] := [i]. i := i 7. [i + ] := k L algoritmo Insertion-Sort scandisce l array da sinistra verso destra, facendo scorrere l indice j da a n, e ogni volta sistema l elemento [j] al posto giusto nel sottoarray [.. j] spostando di una posizione verso destra tutti gli elementi più grandi di [j], lasciano al loro posto tutti gli altri. [j] > [j] [j] [.. j] [j +.. n] Si osservi che subito dopo che l algoritmo sistema [j] nel sottoarray [.. j], quest ultimo risulta ordinato.
5 Esempio j = j = j = j = j = rray ordinato
6 Complessità di Insertion-Sort Insertion-Sort() Costo. for j := to n do c. k := [j] c. i := j c. while (i and [i] > k) do c. [i + ] := [i] c. i := i c 7. [i + ] := k c 7 Per j =,,..., n, sia t j il numero di volte che la condizione del ciclo while in linea viene testata durante l esecuzione della (j )-esima iterazione del ciclo for: ISTRUZIONI Costo Numero di esecuzioni Costo totale. k := [j] c c. i := j c c. while (i and [i] > k) do c t j c t j. [i + ] := [i] c t j c (t j ). i := i c t j c (t j ) 7. [i + ] := k c 7 c 7 Durante la (j )-esima iterazione del ciclo for
7 La (j )-esima iterazione del ciclo for contribuisce dunque con un costo totale C(j) = c + c + c 7 c c + (c + c + c ) t j Il costo complessivo dovuto alle (n )-iterazioni del ciclo for risulta pertanto n C(j) = (c + c + c 7 c c ) (n ) + (c + c + c ) j= n j= t j Tenendo infine conto dell istruzione in linea (che viene eseguita n-volte), il running time di Insertion-Sort è dato da: n T(n) = c n + (c + c + c 7 c c ) (n ) + (c + c + c ) t j. () Caso Migliore (Best-Case) Il caso migliore occorre quando l array è già inizialmente ordinato (in senso non decrescente). In questo caso si ha che t j = (la condizione nel while viene testata una sola volta dato che [j ] [j]), e quindi T best (n) = (c + c + c + c + c 7 ) n (c + c + c + c 7 ) = Θ(n) j= (lineare). () Caso Peggiore (Worst-Case) Il caso peggiore occorre quando l array è inizialmente ordinato in senso decrescente. In questo caso si ha che t j = j (la condizione nel while viene testata j-volte dato che [],...,[j ] > [j]), e quindi T worst (n) = Θ(n ) (quadratico). () In generale: T(n) = O(n ) e T(n) = Ω(n).
8 L algoritmo Selection-Sort Selection-Sort(). for j := to n do. min := j. for i := j + to n do. if [i] < [min] then. min := i. temp := [j] 7. [j] := [min] 8. [min] := temp L algoritmo Selection-Sort scandisce l array da sinistra verso destra, facendo scorrere l indice j da a n, e per ogni tale j effettua le seguenti operazioni: ) trova la posizione min (più a sinistra) nel sottoarray [j.. n] contenente la chiave minima (cioè [min] [j], [j + ],..., [n]) (blocco di istruzioni nelle linee,, e ); ) scambia [j] con [min] (blocco di istruzioni nelle linee, 7 e 8). scambio x y y x j min j min
9 Esempio j = min = j = min = j = min = j = min = j = min = rray ordinato
10 Complessità di Selection-Sort Selection-Sort(). for j := to n do. min := j. for i := j + to n do. if [i] < [min] then. min := i. temp := [j] 7. [j] := [min] 8. [min] := temp Per j =,,...,n, sia t j il numero delle iterazioni eseguite dal ciclo for in linea durante la j-esima iterazione del for in linea. llora, il costo complessivo T(n) di Selection-Sort soddisfa n T(n) = Θ j= t j Poiché t j = n j, si ha che n j= t j = n (n j) = j= n(n ) ( ) n(n ) = T(n) = Θ = Θ ( n )
11 L algoritmo Heap-Sort Heap-Sort(). Build-Heap(). for i := n downto do. Exchange([], [i]). HeapSize[] := HeapSize[]. Heapify(, ) L algoritmo Heap-Sort inizia costruendo uno Heap effettuando la chiamata alla procedura Build-Heap() sull array input [.. n], dove n è la lunghezza di. Dato che il massimo elemento dello Heap si trova in [], esso può essere messo nella corretta posizione scambiandolo con [n]. questo punto, se scarichiamo il nodo n dallo Heap attuale (decrementando di HeapSize[]), possiamo osservare che il sottoarray [.. n ] può essere facilmente reso uno (n )-Heap, cioè uno heap con n nodi, mediante una chiamata alla procedura Heapify(, ). L algoritmo Heap-Sort ripete questo processo all indietro fino a quando la dimensione dello Heap attuale si riduce a. L algortimo Heap-Sort riporato sopra assume che tutti gli Heap siano dei Max-Heap. Nel caso si considerano dei Min-Heap si otterrà l ordinamento in senso non crescente dell array. La complessità di Heap-Sort è O(n log n), dato che la chiamata a Build-Heap() prende tempo O(n) e ciascuna delle n chiamate a Heapify impiega tempo O(log n).
12 = [,,,,, ] Build-Heap() I nodi colorati di grigio rappresentano i nodi che man mano vengono scaricati dallo Heap. Exchange([], []) HeapSize := HeapSize Heapify(, ) Exchange([], []) HeapSize := HeapSize Heapify(, ) Exchange([], []) HeapSize := HeapSize Heapify(, ) Exchange([], []) HeapSize := HeapSize Heapify(, ) Exchange([], []) HeapSize := HeapSize Heapify(, )
13 L algoritmo Merge-Sort Date due sequenze ordinate e B, si chiama merging ordinato di con B la sequenza M che si ottiene riordinando la concatenazione di con B. Esempio Il merging ordinato di = [ 7 ] con B = [ ] è la sequenza M = [ 7 ]. Il merging ordinato di con B può essere effettuato in tempo Θ(n + m), dove n ed m sono le lunghezze di e B, rispettivamente. Merge(, B). i := j :=. M := [ ]. while (i n and j m) do. if [i] < B[j] then. si prolunghi M con [i]. i := i + 7. else 8. si prolunghi M con B[j] 9. j := j + 0. if i n then. si prolunghi M con [i.. n]. else. si prolunghi M con B[j.. m]. return(m) B M [ 7 ] [ ] [ ] [ 7 ] [ ] i =, j = [ ] [ 7 ] [ ] i =, j = [ ] [ 7 ] [ ] i =, j = [ ] [ 7 ] [ ] i =, j = [ ] [ 7 ] [ ] i =, j = [ ] [ 7 ] [ ] i =, j = > m [ 7 ]
14 L algoritmo Merge-Sort (cont.) L algoritmo Merge-Sort si basa sulla strategia Divide and Conquer: un problema viene scomposto in sottoproblemi più piccoli, le cui soluzioni vengono poi combinate per ottenere una soluzione del problema originario. Il Merge-Sort opera come segue:. spezza a metà la sequenza input in due sottosequenze B e C;. chiama ricorsivamente se stesso sulle due sottosequenze B e C ottenendo le sequenze ordinate B e C, rispettivamente;. effettua il merging ordinato di B con C. Merge-Sort(, p, r). if p < r then. q := (p + r)/. Merge-Sort(, p, q). Merge-Sort(, q +, r). Merge(, p, q, r) Una chiamata alla procedura Merge-Sort(, i, j) permette di riordinare il sottoarray [i.. j]; La procedura Merge(, i, k, j) effettua il merging ordinato dei sottoarray (ordinati) [i.. k] e [k+.. j]; Effettuando una chiamata a Merge-Sort(,, n), dove n è la lunghezza di, verrà riordinato l intero array.
15 Esempio: operazioni eseguite da Merge-Sort sulla sequenza [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] Merging [ ] [ ] [ ] [ ]
16 Complessità di Merge-Sort Merge-Sort(, p, r). if p < r then. q := (p + r)/. Merge-Sort(, p, q). Merge-Sort(, q +, r). Merge(, p, q, r) Il running time T(n) di Merge-Sort, quando eseguito su un array [.. n] di lunghezza n, può essere espresso come segue: { Θ(), se n = T(n) = T(n/) + Θ(n), se n >. Il termine T(n/) rappresenta il costo della chiamata ricorsiva di Merge-Sort su cisacuna delle due sottosequenze [.. (n + )/ ] e [ (n + )/ +.. n] (linee. e.); Il termine Θ(n) rappresenta il costo della procedura di merging eseguita sulle sottosequenze ordinate ottenute al punto precedente (linea.) La soluzione della precedente equazione di ricorrenza è T(n) = Θ(n log n).
17 L algoritmo Quick-Sort Come il Merge-Sort anche il Quick-Sort si basa sulla strategia Divide and Conquer. Esso opera come segue:. la sequenza input viene partizionata in due sottosequenze B e C tali che ogni elemento di B è minore o uguale ad ogni elemento di C;. chiama ricorsivamente se stesso sulle due sottosequenze B e C, ottenendo le sequenze ordinate B e C, rispettivamente;. concatena B con C per ottenere l ordinamento di. Quick-Sort(, p, r). if p < r then. q := Partition(, p, r). Quick-Sort(, p, q). Quick-Sort(, q +, r) La procedura Partition(, p, r) riorganizza gli elementi del sottarray [p.. r], partizionandolo, in modo che ogni elemento del sottoarray [p.. q] sia minore o uguale ad ogni elemento del sottoarray [q +.. r] (vedi pagina seguente). Il valore x inizialmente contenuto in [p] (cioè prima dell esecuzione della procedura) viene usato come elemento pivot attorno al quale si effettuata la partizione: [p.. q] conterrà solanto elementi minori o uguali a x, [q +.. r] soltanto elementi maggiori o uguali a x.
18 L algoritmo Quick-Sort (cont.) Partition(, p, r). x := [p]. i := p. j := r +. while TRUE do. repeat. j := j 7. until [j] x 8. repeat 9. i := i + 0. until [i] x. if i < j then. Exchange([i], [j]). else. return(j) [... i [... [... 8 p 8 i [... [... 8 i [... i i j r... ] j... ] x = j... ] j 8... ] j 8... ] j 8... ] return(j) i Exchange([i], [j]) Exchange([i], [j]) Il running time della procedura Partition su un sottoarray [p.. r] è Θ(n) dove n = r p + è la lunghezza di [p.. r].
19 Complessità di Quick-Sort Il running time di Quick-Sort è strettamente legato al comportamento della procedura Partition. Worst Case: il caso peggiore occorre quando la procedura Partition produce sempre una partizione completamente sbilanciata del sottoarray [p.. r], in cui una regione della partizione contiene n elementi (n = r p + ) e l altra contiene solo elemento, cioè quando (a) Partition(, p, r) = p (Es. [p.. r] è inizialmente ordinato in senso crescente), oppure (b) Partition(, p, r) = r (Es. [p.. r] è inizialmente ordinato in senso decrescente). Nel caso peggiore, il running time T(n) di Quick-Sort può essere espresso dalla seguente equazione di ricorrenza: { Θ(), se n = T(n) = T(n ) + Θ(n), se n >, la cui soluzione è T(n) = Θ(n ). Best Case: il caso migliore occorre quando la procedura Partition produce sempre una partizione completamente bilanciata del sottoarray [p.. r], in cui una regione della partizione contiene n/ elementi (n = r p + ) e l altra ne contiene altrettanti (Es. quando gli elementi di [p.. r] sono tutti uguali tra loro). In questo caso si ha che: { Θ(), se n = T(n) = T(n/) + Θ(n), se n >, la cui soluzione è T(n) = Θ(n log n).
QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT)
QUICKSORT Basato sul paradigma divide-et-impera (come MERGE-SORT) Divide: stabilisce un valore di q tale da dividere l array A[p.. r] in due sottoarray non vuoti A[p.. q] e A[q+1.. r], dove ogni elemento
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
DettagliDivide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente
Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente Divide et impera - Schema generale Divide-et-impera (P, n) if n k then risolvi direttamente
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 una lista di nomi alfabeticamente, o un
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
DettagliCalcolo Parallelo e Distribuito
Calcolo Parallelo e Distribuito 1 Problema Progettare un algoritmo parallelo per l ordinamento di un vettore su un calcolatore MIMD a memoria distribuita con p processori Sorting Bitonico A. Murli Calcolo
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
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
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
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 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[]) {
DettagliCalcolo Parallelo e Distribuito
Calcolo Parallelo e Distribuito 1 Problema Progettare un algoritmo parallelo per l ordinamento di un vettore su un calcolatore MIMD a memoria distribuita con p processori Sorting Bitonico A. Murli Calcolo
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
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.
DettagliAlgoritmi di ordinamento
Capitolo 7 Algoritmi di ordinamento 7.1 Selection sort L algoritmo di ordinamento per selezione opera nel modo seguente: supponiamo che i primi k elementi siano ordinati; l algoritmo sceglie il minimo
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 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
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. 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
DettagliCalcolo Parallelo e Distribuito. a.a
Calcolo Parallelo e Distribuito a.a. 2005-2006 1 Problema Progettare un algoritmo parallelo per l ordinamento di un vettore su un calcolatore MIMD a memoria distribuita con p processori Sorting Bitonico
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 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
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 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
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
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
DettagliAlgoritmi di ordinamento
Algoritmi e Strutture Dati Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Algoritmi di ordinamento Esempi: ordinare una lista di nomi alfabeticamente, o
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 (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
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
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. HeapSort
Algoritmi e Strutture Dati HeapSort Selection Sort: intuizioni L algoritmo Selection-Sort scandisce tutti gli elementi dell array a partire dall ultimo elemento fino all inizio e ad ogni iterazione: Viene
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
DettagliAlgoritmo di ordinamento sul posto che ha tempo di esecuzione :
QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : O(n2 ) nel caso peggiore O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior algoritmo
DettagliLaboratorio di Programmazione Appunti sulla lezione 5: Algoritmi di ordinamento (cont.) Alessandra Raffaetà. Bubblesort
Laboratorio di Programmazione Appunti sulla lezione : Algoritmi di ordinamento (cont.) Alessandra Raffaetà Università Ca Foscari Venezia Corso di Laurea in Informatica Bubblesort Idea: Due elementi adiacenti
DettagliAlgoritmi e Strutture Dati
Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 6 novembre 2008 Heap binari: definizione Un heap binario è una albero binario quasi completo
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
DettagliLaboratorio di Programmazione Appunti sulla lezione 5: Algoritmi di ordinamento (cont.) Alessandra Raffaetà
Laboratorio di Programmazione Appunti sulla lezione : Algoritmi di ordinamento (cont.) Alessandra Raffaetà Università Ca Foscari Venezia Corso di Laurea in Informatica Bubblesort Idea: Due elementi adiacenti
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
DettagliCode a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis
Code a priorità Progettazione di Algoritmi 2018-19 Matricole congrue a 1 Docente: Annalisa De Bonis 26 Coda a priorità Una coda a priorità è un collezione di elementi a ciascuno dei quali è assegnata una
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
DettagliAlgoritmi di ordinamento
Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento giu 03 ASD 1 Selection Sort SelectionSort(dati[]) { for (i=0; i
Dettaglinel trasformare una sequenza di elementi
Ordinamento Carla Binucci e Walter Didimo Il problema dell ordinamento In generale, il Problema dell ordinamento consiste nel trasformare una sequenza di elementi rendendola ordinata rispetto a un certo
DettagliMergesort (cont.) 2018/ Lezione 16. Venerdì, 16 Novembre 2018
Mergesort (cont.) Informatica@SEFA 08/09 - Lezione 6 Massimo Lauria Venerdì, 6 Novembre 08 Mergesort La comprensione della struttura dati pila ci permette di capire più agevolmente
DettagliAlgoritmi di ordinamento (I parte)
(I parte) Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Definizione formale del problema Input:! Una sequenza di n numeri Output:! Una permutazione
DettagliIn questa lezione. Costruire un max-heap. [CLRS01] cap. 6 par Prof. E. Fachini - Intr. Alg.
In questa lezione Costruire un max-heap [CLRS01] cap. 6 par. 6.3!1 Heapsort: analisi Heapsort(A) Build-Max-Heap(A) for i = A.length downto 2 do scambia A[1] e A[i] A.heap-size = A.heap-size - 1 Max-Heapify
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
DettagliESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)
ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09) DISPENSA N. 4 1. Ricerca Binaria Ricorsiva L algoritmo Ricerca Binaria risolve il problema della ricerca di una chiave in un vettore. È un esempio
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
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 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:
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
DettagliAlgoritmi e Strutture Dati. HeapSort
Algoritmi e Strutture Dati HeapSort Selection Sort: intuizioni L algoritmo Selection-Sort scandisce tutti gli elementi dell array a partire dall ultimo elemento fino all inizio e ad ogni iterazione: Viene
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
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
Dettagli6) Il problema dell ordinamento
Pag 50 6) Il problema dell ordinamento Il problema dell'ordinamento degli elementi di un insieme è un problema molto ricorrente in informatica poiché ha un importanza fondamentale per le applicazioni:
DettagliQuickSort Università degli Studi di Milano
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
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
DettagliIn questa lezione. Heap binario heapsort. [CLRS10] cap. 6, par Prof. E. Fachini - Intr. Alg.
In questa lezione Heap binario heapsort [CLRS10] cap. 6, par. 6.1-6.4!1 Heap binari Un heap binario è una struttura dati consistente di un array visto come un albero binario. A= 5 60 65 30 50 18 40 25
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
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 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
Dettagli1 Introduzione. 2 Merge Sort
Corso: Gestione ed elaborazione grandi moli di dati Lezione del: 8 maggio 2006 Argomento: Algoritmi di ordinamento nel Disk odel: ergesort e ulti-way ergesort con analisi della complessitá di I/O e work.
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
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
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
DettagliSommario. Algoritmi di ordinamento lineari: CountingSort. BucketSort. RadixSort
Sommario Algoritmi di ordinamento lineari:! CountingSort! BucketSort! RadixSort 1 Ordinamento in tempo lineare. Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, nel
DettagliProblemi di ricerca in insiemi ordinati
Problemi di ricerca in insiemi ordinati Abbiamo visto che, per trovare un elemento in un insieme ordinato, con l algoritmo della ricerca binaria restringiamo l intervallo della ricerca alla metà in ogni
DettagliGli heap. Sommario. 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 Matteo SONZA
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
DettagliCorso di Tecniche di Programmazione
Problema: Data una sequenza di elementi in ordine qualsiasi, ordinarla. Corso di Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica Anno Accedemico 003/004 Proff. Giuseppe
DettagliDi cosa parliamo oggi?
Di cosa parliamo oggi? Oggi parliamo di Analisi di Algoritmi Analisi di Algoritmi = valutazione delle risorse usate da algoritmi per risolvere un dato problema Risorse = Tempo impiegato dall algoritmo
DettagliAlgoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati
Passaggio dei parametri in Java Nel seguente esempio public class parametri2 public static void main(string args[]) int x = 1; int y; double d[] = new double[2]; d[0] = 25; y= metodo1(d, x); System.out.println("Il
DettagliEsercizi su ABR. Prof. E. Fachini - Intr. Alg.!1
Esercizi su ABR Confronto proprietà ABR e Max-Heap. Proprietà del cammino radice-foglia individuato da una ricerca. Fusione di due ABR. Il successivo calcolato dalla radice Costruzione di un ABR bilanciato
DettagliProgrammazione I - corso B a.a prof. Viviana Bono
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 15 Algoritmi su array: selection sort, insertion sort, fusione
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:
DettagliEsercitazione 7 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016
Esercitazione 7 Algorithmi e Strutture Dati (Informatica) A.A 015/016 Tong Liu April 1, 016 Elementi fondamentali Notazioni Asintotiche Definition 1.1. (Notazione O) Sia g (n) una funzione di costo; indichiamo
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
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
DettagliSommario della lezione:
Sommario della lezione: Metodologie per il progetto di algoritmi: La Tecnica Divide et Impera Esempi di applicazione a: Ricerca del massimo e minimo di una sequenza di numeri Calcolo di potenze di numeri
DettagliDefinizioni di base. Algoritmo: procedura computazionale ben definita che prende valori in input e produce valori in output.
ANALISI DELLA COMPLESSITÀ DEGLI ALGORITMI Definizioni di base Algoritmo: procedura computazionale ben definita che prende valori in input e produce valori in output. Un algoritmo è uno strumento per risolvere
DettagliCOGNOME E NOME (IN STAMPATELLO) MATRICOLA
Politecnico di Milano Facoltà di Ingegneria dell Informazione Informatica 3 Proff. Campi, Ghezzi, Matera e Morzenti Appello del 14 Settembre 2006 Recupero II Parte COGNOME E NOME (IN STAMPATELLO) MATRICOLA
DettagliAlbero binario: Ogni nodo ha zero, uno, o due successori (ordinati)
Heap 1 Vittorio Maniezzo - Università di Bologna Alberi binari Albero binario: Ogni nodo ha zero, uno, o due successori (ordinati) Albero binario completo: Tutte le foglie hanno la stessa profondità e
DettagliESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)
ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 0/0) DISPENSA N. 6 Esercizi su alberi di ricerca e AVL Notazione: Per un albero T scriviamo T per indicare il numero dei nodi di T e h(t ) per indicare
DettagliIntroduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi. Parte prima
Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi Parte prima 1) Si dimostri il teorema sulla limitazione inferiore per il tempo asintotico di esecuzione nel caso
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
DettagliDati e Algoritmi 1: A. Pietracaprina. Priority Queue (II parte)
Dati e Algoritmi 1: A. Pietracaprina Priority Queue (II parte) 1 Costruzione di uno heap a partire da n entry date Input. Array P con n entry P[1 n] Output. Array P riorganizzato per rappresentare uno
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
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
DettagliAlgoritmi e Principi dell Informatica
Algoritmi e Principi dell Informatica Appello del 1 Settembre 2016 Chi deve sostenere l esame integrato (API) deve svolgere tutti gli esercizi in 2 ore e 30 minuti. Chi deve sostenere solo il modulo di
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 06 Algoritmi di ordinamento C. Limongelli Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Algoritmi di Ordinamento 1
DettagliValutiamo il costo computazionale dell algoritmo insertion sort.
Pag 63 6.1.1 Insertion sort L algoritmo insertion sort (ordinamento per inserzione) si può intuitivamente assimilare al modo in cui una persona ordina un mazzo di carte. Partendo da un mazzo vuoto inseriamo
DettagliCode a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una
Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una relazione d ordine. Sono definite almeno le seguenti operazioni:
DettagliOrdinamenti. Vittorio Maniezzo Università di Bologna
Ordinamenti 1 Vittorio Maniezzo Università di Bologna Grafo : definizione Un grafo G = (V,E)è composto da: V: insieme di vertici E V V: insieme di archi (edge) che connettono i vertici Un arco a= {u,v}
DettagliAlgoritmi e Strutture di Dati
Algoritmi e Strutture di Dati Code di priorità (Heap e heap_sort) m.patrignani Nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi,
DettagliEsercizi per il corso di Algoritmi
1 Esercizi per il corso di Algoritmi Esercizi sulle Notazioni Asintotiche 1. Esercizio: In ciascuno dei seguenti casi, indicare se f(n) = O(g(n)), o se f(n) = Ω(g(n)), oppure entrambi (nel cui caso occorre
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
DettagliFONDAMENTI DI INFORMATICA. Prof. Alfredo Accattatis Prof. Venturino Taggi
FONDAMENTI DI INFORMATICA Prof. Alfredo Accattatis Prof. Venturino Taggi accattatis@ing.uniroma2.it taggi@ing.uniroma2.it 2 Fondamenti di Informatica 2015/16 V.Taggi taggi@ing.uniroma2.it Algoritmi di
Dettaglicome segue: data una collezione C di elementi e una un elemento che verifica la proprietà P
Problemi di Ricerca Carla Binucci e Walter Didimo Il problema della Ricerca In generale, il Problema della Ricerca è definito come segue: data una collezione C di elementi e una proprietà P, determinare
Dettagli