Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4
|
|
- Albino Gagliardi
- 5 anni fa
- Visualizzazioni
Transcript
1 Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 Heap sort; ordinamento senza G. Gini 2013
2 Ordinamento per confronti: complessita' Esistono altri algoritmi di ordinamento per confronto di complessita ottima O(nlog(n)) che operano sul posto? mergesort richiede memoria aggiuntiva QuickSort opera sul posto ma può essere Θ(n 2 ) Si', heapsort (ordinamento del mucchio) (Williams, 1964)
3 Idea di heapsort Modificando insertion sort, che e' di complessita' O(n 2 ), abbiamo ottenuto mergesort, di complessita' O(nlog(n)) abbiamo reso logaritmico, anziche' lineare, il costo di localizzare la posizione dove inserire il nuovo elemento nel sottovettore gia' ordinato. Consideriamo ora selection sort: cosa e' che lo rende quadratico? Il fatto che ad ogni iterazione il costo per identificare il nuovo elemento minimo e' lineare: sarebbe possibile renderlo logaritmico?
4 Verso heapsort nel primo ciclo di selection sort, tramite n-1 confronti, viene identificato l'elemento minimo del vettore cosa potremmo fare in alternativa con n-1 confronti? 1. dividiamo gli n elementi in coppie 2. con n/2 confronti si puo' stabilire l'elemento minimo di ogni coppia, ottenendo n/2 elementi 3. i passi (1) e (2) possono essere iterati fino ad ottenere l'elemento minimo del vettore, piu' un albero di relazioni tra gli elementi del vettore via via selezionati il tutto con n/2 + n/4 + n/ = n-1 confronti l'albero cosi' costruito ha altezza log(n)
5 HEAP come vettore per mantenere questa organizzazione degli elementi del vettore che ne riflette gli ordinamenti parziali e' necessario mantenere la struttura dati ad albero questa struttura dati e' chiamata heap. Il vettore stesso puo' essere utilizzato per rappresentare un albero binario. Un albero binario completo di n elementi puo' essere rappresentato in un array (con indici da 0 a n-1) dove i figli sinistro e destro del nodo i si trovano rispettivamente agli indici 2*i+1 e 2*i+2
6 Definizione di heap Un vettore, che può essere interpretato come albero binario B. Ogni nodo di B può anche rappresentare un elemento di una coda con priorità. C è un ordinamento parziale sui valori nei nodi Min-heap: i valori dei nodi sono minori dei valori sui nodi figli ovvero, A[Parent(i)] A[i] : heap crescente, cioè il padre contiene valore minore o uguale a quello dei figli. La radice contiene il valore minimo. Max-heap: i valori dei nodi sono maggiori dei valori sui nodi figli ovvero, A[Parent(i)] A[i] : heap descrescente, cioè il padre contiene un valore maggiore o uguale a quello dei figli. La radice contiene il valore massimo.
7 Esempio di min-heap e max-heap Min-heap Max-heap
8 Min-HEAP: esempio (con array da 0) vettore = [ 4, 12, 6, 14, 22, 18, 16, 44, 55, 23, 42, 94, 19, 26, 67 ] v[0]=4 v[1]=12 v[2]=6 v[3]=14 v[4]=22 v[5]=18 v[6]=16 v[7] =44 v[8] =55 v[9] =23 v[10] =42 v[11] =94 v[12] =19 v[13] =26 v[14] =67 i 0 i n/2-1 : v[i] v[2*i+1] v[i] v[2*i+2] - figlio sinistro e figlio destro i 0 i n-1 : v[0] v[i]
9 Esempio max (con array da 1) Un albero binario può essere rappresentato in un array, con # elementi heap # elementi array A[1] contiene la radice Parent (i) return _i/2_ Left (i) return 2*i Right (i) return 2*i + 1 In un max heap, A[Parent(i)] A[i] In un min heap A[Parent(i)] A[i]
10 HEAPSORT: idea dell ordinamento Se usiamo un max heap: 1. ogni volta estraiamo il massimo elemento (la radice) e la poniamo in fondo 2. Ripristiniamo un max heap con un elemento in meno 1. Max-heapify - mantiene la proprietà di maxheap 2. Build-Max-Heap, costruisce un max-heap da zero
11 max-heapify Heapify( A,i): ripristina la proprietà di Heap nel sottoalbero radicato in i assumendo che i suoi sottoalberi destro e sinistro siano già degli Heap Input Un array A e un indice i Gli alberi binari con radici Left(i) e Right(i) sono max-heap Ma l albero binario con radice i non è un max-heap Obiettivo Ripristinare la proprietà di max-heap sul sottoalbero con radice i Far scendere l'elemento A[i] nell'array fino alla posizione che gli compete
12 Esempio di Heapify(a,i) Assumiamo di avere due heap H 1 e H 2 con radici A[2i] e A[2i+1] e un nuovo elemento v in posizione i A[2i] A[i]= v A[2i+1] H 1 H 2
13 Esempio di Heapify(a,i) Assumiamo che il valore v in posizione i violi la proprietà di heap ovvero, v<a[2i] oppure v<a[2i+1] A[2i] = x A[i]= v A[2i+1] H 1 H 2
14 Esempio di Heapify(a,i) Scambia v in posizione i con la più grande delle radici Supponiamo ad esempio che A[2i] A[2i+1] A[i]= v A[2i] = x A[2i+1] H 1 H 2
15 Esempio di Heapify(a,i) Scambia A[i] con A[2i] A[2i]=v A[i]= x A[2i+1] H 1 H 2
16 Esempio di Heapify(A,i) Applica ricorsivamente la procedura Heapify sul sottoalbero la cui radice è stata scambiata In questo caso al sottoalbero di radice 2i, ovvero Heapify(A,2i) A[i]= x Heapify(A,2i) A[2i+1] H 1 H 2
17 Pseudocodice max-heapify max-heapify (A,i) l = left(i) //indirizzo sottoalbero sinistro r = right(i) //indirizzo sottoalbero destro if (l A.heapsize and A[l]>A[i]) // A.heap-size il numero di elementi dello heap then max = l else max = i if (r A.heapsize and A[r]>A[max]) then max = r if max i then swap(a, i, max) max-heapify (A, max)
18 Procedura build-max-heap() Principio generale Sia A[1..N] un array da ordinare I nodi A[ N/2 +1..N] sono foglie dell'albero e quindi heap di un elemento da cui iniziare La procedura build-max-heap() attraversa i restanti nodi dell'albero ed esegue max-heapify() build-max-heap(a) A.heapsize <-A.length //A.lenght numero elementi array for(i=a.length/2; i>=1; i--) max-heapify(a, i);
19 Heapsort con max heap Mettiamo l elemento più grande, che è il primo dell array, in fondo alla parte di array da ordinare, lo heap Lo heap si decrementa di 1, Chiama max-heapify( ) su n -1 elementi, per ricostruire un max heap heapsort (A, n) // array di n elementi build-max-heap(a) for (i=n; n>=2; i--) swap(a, 1, i) A.heapsize <- A.heapsize-1 max-heapify(a, 1)
20 esempio
21 Animazione Heapsort Animazione del heapsort da Wikipedia
22 Complessità di heapsort Max-heapify, è invocato n volte ed ogni sua chiamata, nel caso medio, è O(log n) Build-Max-Heap è O(n) Heapsort è quindi O(nlog n) è in place
23 Heap per gestire code Code di priorità Esempio: sistema operativo multitasking, in cui i job in esecuzione hanno diverse priorità Nello heap si memorizzano insiemi di oggetti a cui è associata una priorità Con la procedura max-heap si restituisce l elemento di priorità maggiore Implementazione: max-heap
24 Operazioni su Code di Max Priorità insert(s, x) inserisce l'elemento x nella coda maximum(s) restituisce l'elemento in S con priorità più alta extract-max(s): rimuove e restituisce l'elemento in S con priorità più alta increase-priority(s, x, k): aumenta la priorità di x al nuovo valore k, dove k>x.p
25 Sommario Heap: albero binario completo che soddisfa la heap property Due implementazioni Alberi binari Array Tre procedure principali (per max o min) Max-heapify: mantiene la proprietà di max-heap Build-Max-Heap: costruisce un max-heap da zero Heapsort: ordina un array sul posto Code di priorità Memorizzano insiemi di oggetti con una priorità Implementate tipicamente con una max-heap
26 Altri metodi di sorting È possibile fare sorting senza usare confronti? Se sì, è possibile migliorare la complessità? Abbiamo il limite inferiore teorico Ω(n log n) sugli algoritmi per confronto. Ma se non facciamo confronti, il limite teorico non si applica. Si applica comunque Ω(n). È possibile avere algoritmi Θ(n)?
27 Counting sort Ipotesi fondamentale: i valori da ordinare sono numeri naturali compresi tra 0 e una certa costante k Idea di base: se nell'array ci sono m e valori piu piccoli di un certo elemento e (il cui valore è v e ) nell'array ordinato l'elemento e sarà in posizione m e +1 quindi, basta contare quante "copie" dello stesso valore v e sono contenute nell'array usiamo questa informazione per determinare, per ogni elemento e (con 0 v e k), quanti elementi ci sono più piccoli di e dobbiamo tenere conto del fatto che nell'array ci possono essere elementi ripetuti
28 Algoritmo counting sort facciamo una scansione di A e riempiamo il vettore B, lungo k, del numero di occorrenze del valore A(i) per tutti gli n elementi di A. Poi scandiamo B per ogni i (da 1 a k), e scriviamo il valore i nel vettore A per B(i) volte.
29 Counting sort pseudocodice COUNTING-SORT (A[ ], k, n) //k è il massimo dei valori di A j <-1 crea B [1 k] //B conterrà gli elemeni contati for i <- 0 to k do B[i] := 0 // inizializza B for i := 1 to n do B[A[i]] := B[A[i]] + 1 //B[i] ora contiene il numero di elementi uguali a i for i := 1 to k do while B[i] >0 do A[j] <-i j<-j+1 B[i] := B[i] - 1
30 Esempio di counting sort A= [ ] ha lunghezza 8 B ha pure lunghezza 8 Counting-sort (A, 5, 8) Dopo il secondo for B contiene in ogni posizione il numero di volte che un valore da 0 a k compare in A B= [ ] Alla fine A = [ ]
31 Complessità di counting sort La procedura scandisce un vettore lungo n ed un vettore lungo k, quindi il tempo è O(n+k) La complessità è data dai cicli for (k volte uno, n volte l altro) e dal ciclo while eseguito k volte Se k è O(n), la complessità è O(n), cioè è lineare O(n) non è in contrasto con il limite inferiore Ω(n log(n)) sul numero dei confronti. Infatti counting sort non effettua confronti fra gli elementi di A. Counting sort ha complessità inferiore sia a mergesort che a heap-sort perché fa assunzioni sui valori da ordinare.
32 Ordinare per distribuzione Come si fa a ordinare un mazzo di carte? per prima cosa si separano cuori, fiori, quadri e picche, e per fare questo non si opera alcun confronto. I confronti entrano in gioco per ordinare tra loro carte dello stesso seme. utilizzando insertion sort e' possibile ordinare "per distribuzione". Vediamo radix sort
33 Ordinare per distribuzione L algoritmo: distribuisco le carte secondo il loro valore indipendentemente dal seme, in 13 pacchetti diversi e ordinati tra loro. Il pacchetto dei 2 segue quello degli assi e precede quello dei 3. Poi raccolgo i pacchetti mantenedo il loro ordine. Poi distribuisco le carte cosi' raccolte in base al seme, in 4 pacchetti diversi e ordinati tra loro. Poi raccolgo i pacchetti nel loro ordine: il mazzo risulta ordinato. Note: Per ottenere il mazzo ordinato devo distribuire prima in base alla cifra piu leggera (il numero), poi in base a quella piu pesante (il seme).
34 RADIX sort Abbiamo valori numerici da ordinare RADIX sort esegue gli ordinamenti per posizione delle cifre, partendo dalla cifra meno significativa. É stato usato per ordinare le schede perforate. Ora è usato per ordinare record di informazioni con più campi chiave.
35 Esempio su decimali 1 passo 2 passo 3 passo 4 passo risultato
36 RADIX SORT (Distribution Sort) radixsort (A, d) // A array di n elementi, d cifra di ordine più alto for i <- 1 to d do usa un ordinamento stabile pe ordinare A sulla cifra i
37 RADIXSORT: complessita Il tempo di esecuzione dipende dall algoritmo stabile che si utilizza Se ogni numero si trova fra 0 e k-1, e k non è troppo grande, counting sort è migliore. Ogni passagio su n numeri di d cifre richiede un tempo Θ(n+k); poichè ci sono d passate, il tempo di radix sort è Θ(d (n+k)) Se d è costante e k = O(n) radix sort è eseguito in tempo lineare. Radix sort è da preferire ad un algoritmo basato su confronti, come Quicksort? In realtà le costanti nascoste nella notazione asintotica contano. Radix sort ha meno passi ma più pesanti, Inoltre non è detto che ordini sul posto (dipende dall algoritmo scelto).
38 Altro metodo di distribuzione Bucket sort se l'intervallo dei valori da ordinare è noto a priori, è diviso in intervalli più piccoli, detti bucket (cesto). Ciascun valore dell array è quindi inserito nel bucket a cui appartiene, i valori all'interno di ogni bucket vengono ordinati l'algoritmo si conclude con la concatenazione dei valori contenuti nei bucket.
39 Bucket sort BucketSort(A, n) //A array di n elementi, ognuno fra 0 e 1 for i 1 to length[a] do inserisci A[i] nella lista B(n(A[i]) //B array ausiliario di liste concatenate dei bucket for i 1 to n-1 do ordina(b[i]) con insertion sort return concatena(b[0], B[1],..B[n-1]) // restituisce la concatenazione dei bucket
40 esempio (a) l array (b) l array di liste concatenate dopo il secondo ciclo for
41 Bucket sort - complessità La complessità del bucket sort è O(n) per tutti i cicli, a parte l'ordinamento dei singoli bucket. Resta da valutare il tempo dovuto alle chiamate di insertion sort nel secondo for Considerando la variabile casuale n i che è il numero di elementi del bucket B[i], poiché insertion sort è quadratico abbiamo T(n) = Θ(n) + Σ O(n i2 ) Si dimostra che questa equazione vale Θ(n) + n O( 2-1/n) = Θ(n) Quindi il tempo di esecuzione è lineare
42 RankSort e sorting parallelo Strategia dell algoritmo di Rank Sort: Conta il numero di elementi minori di a nell array Hai quindi la posizione di a nell array ordinata Ripeti per tutti gli elementi dell array Complessità risulta n*(n-1), O(n 2 ).
43 RankSort Versione sequenziale void ranksort(int a[],int sorted[], int n) { /* works well only if there are no repetitions of the numbers in the array */ for (int i=0; i<n; i+=1) { int rank = 0; for (int j=0; j<n; j+=1) if (a[i] > a[j]) rank += 1; sorted[rank] = a[i]; } }
44 RankSort - parallelo utilizzando n processori: void ranksort(int a[],int sorted[], int n) { /* works well only if no repetitions */ forall (int i=0; i<n; i+=1) { /* l istruzione parallela forall distribuisce * l esecuzione su n processori */ int rank = 0; for (int j=0; j<n; j+=1) if (a[i] > a[j]) rank += 1; sorted[rank] = a[i]; } } Complessità parallela O(n)
45 Sorting esterno Grandi quantità di dati i dati si trovano su un file ad accesso sequenziale Occorrono 3 files su cui distribuire le sottosequenze durante l ordinamento fusione diretta (ispirato a mergesort) si divide la sequenza a da ordinare in due meta, b e c; si fa il merging fra b e c combinando gli elementi semplici in coppie ordinate; si chiama questa sequenza a e si ricomincia facendo il merging delle coppie per ottenere gruppi di 4, e cosi via fino ad ordinare l intera sequenza.
46 Esempio Sorting per fusione diretta a = volta b = c = a = volta b = c = a = volta b = c = a =
47 Pseudocodice fusione diretta Ordinaperfusione su<-t p<-1 repeat if su then i<-1, j<-n, k<-n+1,l<-2*n else k<-1, l<-n, i<-n+1,j<-2*n fondi sequenze i e j in k Copia coda di i in k Copia coda j in k su <- not su p <- 2*p until p = n
48 Complessità fusione diretta La lunghezza p della sequenza ordinata viene raddoppiato ad ogni passata Ordinamento termina se p n Servono log(n) passate Il numero totale di spostamenti è n log(n)
49 Alcuni confronti
50 Heapsort vs quicksort
51 riassunto Nome Migliore Medio Peggiore Memoria Stabile In place Bubble sort O(n) O(n 2 ) O(n 2 ) O(1) Sì Sì Bucket sort O(n+m) O(n+m) O(n+m) O(m) Si No Counting sort O(n+k) O(n+k) O(n+k) O(n+k) Sì No Heap sort O(nlog n) O(nlog n) O(nlog n) O(1) No Sì Insertion sort O(n) O(n + d) O(n 2 ) O(1) No Sì Merge sort O(nlog n) O(nlog n) O(nlog n) O(n) Sì No Quicksort O(nlog n) O(nlog n) O(n 2 ) O(log n) No Sì Radix sort O(n k/s) O(n k/s) O(n k/s) O(n) Sì Selection sort O(n 2 ) O(n 2 ) O(n 2 ) O(1) No Sì Shell sort O(n 1.5 ) O(1) No Sì Stupid sort O(1) O(n n!) illimitato O(1) No Sì
52 Esercizi da fare su heap Considerare i seguenti valori memorizzati in un vettore, Rappresenta una heap? (motivare opportunamente la risposta) Implementare una coda FIFO utilizzando un heap.
Problemi 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
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
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
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
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
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
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
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
DettagliDato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche:
Heapsort Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche: T(n) = O(n log(n)) Alg. Ordinamento ottimale Ordina in loco (niente
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
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
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
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 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
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
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
DettagliHeap, heapsort e code a priorità. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino
Heap, heapsort e code a priorità Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Heap Definizione: albero binario con proprietà strutturale: quasi completo (tutti i livelli completi,
DettagliALGORITMI Docente: Prof. Domenico Cantone
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
DettagliIn questa lezione. Code di priorità. [CLRS01] cap. 6 da pag. 114 a pag Prof. E. Fachini - Intr. Alg. lunedì 17 settembre 2012
In questa lezione Code di priorità [CLRS01] cap. 6 da pag. 114 a pag. 117 1 Coda di priorità: cos è? Una coda di priorità è una struttura dati dinamica che permette di gestire dei dati con chiave numerica,
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
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
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
DettagliSpesso sono definite anche le seguenti operazioni:
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:
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
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
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
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
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
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
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
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 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 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,
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
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
DettagliAlgoritmi e Strutture di Dati
Algoritmi e Strutture di Dati Capitolo 0 - Code con priorità e insiemi disgiunti This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license,
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
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
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
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
DettagliIl tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.
Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro
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
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
DettagliProva di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE
Prova di Algoritmi e s.d. (1o anno) 17 Settembre 2002 TESTO e RISPOSTE Esercizio 1 (punti 7 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali).
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
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
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,
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
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 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
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
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
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
DettagliSommario. Un algoritmo di ordinamento di complessità lineare: CountingSort. [CLRS10] cap. 8 par.8.2
Sommario Un algoritmo di ordinamento di complessità lineare: CountingSort [CLRS10] cap. 8 par.8.2!1 Ordinamento in tempo lineare. Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento
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
DettagliInformatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann
Informatica 3 LEZIONE 16: Heap - Codifica di Huffmann Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann Informatica 3 Lezione 16 - Modulo 1 Heap e code di priorità Introduzione
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
DettagliEsercizio. 2 i=i*2) j=j*2)
Esercizio 1 Esercizio 2 i=i*2) j=j*2) Soluzione Il frammento è composto da due parti quasi identiche. L unica differenza è il modo in cui crescono i contatori. Nella prima parte la crescita è lineare mentre
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 Ordinamento e code di priorità. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 9
Heap Ordinamento e code di priorità Heap: definizione Definizione. Uno Heap (binario) è un albero binario finito i cui vertici sono etichettati da elementi di un insieme linearmente ordinato (chiavi),
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
DettagliCode con priorità. Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna.
Code con priorità Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna marzolla@cs.unibo.it http://www.moreno.marzolla.name/ Copyright 2009 2012 Moreno Marzolla, Università di Bologna
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
DettagliAlgoritmi e Strutture Dati
Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto
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}
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
DettagliOrdinamenti. Grafo : definizione. Un grafo G = (V,E)è composto da: V: insieme di vertici E V V: insieme di archi (edge) che connettono i vertici
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}
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
DettagliAlgoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
DettagliAlgoritmi e Strutture Dati
Algoritmi e Strutture Dati Esercitazione 7 Domenico Fabio Savo 1 Esercitazione: heap Abbiamo visto come utilizzare i MAX-HEAP nell'algoritmo di ordinamento heapsort che permette di ordinare un array di
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
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 Il concetto di dato Il concetto
DettagliDallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 26-7 Lezioni prof. Elio Giovannetti Parte 21 Heapsort versione 2/2/27
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
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
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
DettagliUniversità degli Studi di Camerino Laurea in Informatica Prima Prova Parziale del corso di Algoritmi e Strutture Dati
Università degli Studi di Camerino Laurea in Informatica Prima Prova Parziale del corso di Algoritmi e Strutture Dati Docente: Maria Rita Di Berardini 19 dicembre 2007 Nome: Cognome: N.Matricola: Note:
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
Dettagliheap concetti ed applicazioni
heap concetti ed applicazioni ADT coda di priorità operazioni getfirst restituisce l'elemento nella struttura con massima priorità deletefirst cancella l'elemento nella struttura con massima priorità insert
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
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
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
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
DettagliHeap e Code di Priorità
Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non
DettagliIn questa lezione. Alberi binari: [CLRS09] cap. 12 per la visita inorder. visite e esercizi su alberi binari. Prof. E. Fachini - Intr. Alg.
In questa lezione Alberi binari: visite e esercizi su alberi binari [CLRS09] cap. 12 per la visita inorder!1 Visita inordine di un albero binario visita inordine(x) se l albero x non è nullo allora visita
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
DettagliMERGESORT. Abstract. In questo articolo ci proponiamo di analizzare le due tipologie ricorsive mergesort
MERGESORT a cura di Alessandro Lucchetta e Luca Gagliano Realizzato nell'ambito del progetto Archimede con la supervisione dei Pro. Fabio Breda, Rizzo Gabriele, Valentina Fabbro e Francesco Zampieri I.S.I.S.S.
DettagliEsercizi di Algoritmi e Strutture Dati
Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 10 novembre 2010 1 La bandiera nazionale (problema 4.7 del libro di testo). Il problema della bandiera
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
DettagliStrutture dati per insiemi disgiunti
Strutture dati per insiemi disgiunti Servono a mantenere una collezione S = {S 1, S 2,..., S k } di insiemi disgiunti. Ogni insieme S i è individuato da un rappresentante che è un particolare elemento
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
Dettagliheap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata
heap heap concetti ed applicazioni heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. tutte le foglie sono a sinistra ma non è un BST!! 3. ogni nodo contiene una chiave maggiore
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
DettagliAlberi ed Alberi Binari
Alberi ed Alberi Binari Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell informazione,
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
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
Dettagli