Algoritmi e Strutture Dati. HeapSort
|
|
|
- Gabriele Boni
- 9 anni fa
- Visualizzazioni
Transcript
1 Algoritmi e Strutture Dati HeapSort
2 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 cercato l elemento massimo nella parte di array che precede l elemento corrente l elemento massimo viene scambiato con l elemento corrente max i 1 disordinati ordinati n
3 Select Sort Selection-Sort(A) FOR i = length[a] DOWNTO 2 DO max = Findmax(A,i) scambia A[max] e A[i] Findmax(A,x) max = 1 FOR i = 2 to x DO IF A[max] < A[i] THEN max = i return max
4 Heap Sort L algoritmo Heap-Sort: è una variazione di Selection-sort in cui la ricerca dell elemento massimo è facilitata dall utilizzo di una opportuna struttura dati la struttura dati è chiamata heap lo heap è una variante della struttura dati albero binario in uno heap si può accedere all elemento massimo in tempo costante si può ricostruire la struttura heap in tempo sublineare.
5 Alberi binari Un albero binario è una struttura dati astratta definita come un insieme finito di nodi che è vuoto oppure è composto da tre insiemi disgiunti di nodi: un nodo radice un albero binario detto sottoalbero sinistro un albero binario detto sottoalbero destro
6 Alberi binari nodo radice sottoalbero destro sottoalbero sinistro
7 Alberi binari nodo radice Radice del sottoalbero sinistro sottoalbero destro sottoalbero sinistro sottoalbero destro
8 Alberi binari nodo radice Radice del sottoalbero sinistro Radice del sottoalbero destro sottoalbero sinistro sottoalbero destro sottoalbero sinistro sottoalbero destro
9 Alberi binari nodo radice sottoalbero sinistro sottoalbero destro
10 Alberi binari padre dei nodi j e k nodo i nodo radice arco dal nodo i al nodo k nodo j nodo k figli del nodo i
11 Alberi binari In nodo di un albero binario si dice nodo foglia (o solo foglia) se non ha figli (cioè se entrambi i sottoalberi di cui è radice sono vuoti) Un nodo si dice nodo interno se ha almeno un figlio Un percorso dal nodo i al nodo j è la sequenza di archi che devono essere attraversati per raggiungere il nodo j dal nodo i
12 Alberi binari nodo radice nodi interni nodi foglia nodo k percorso dalla radice al nodo k
13 Alberi binari In un albero binario la profondità di un nodo è la lunghezza del percorso dalla radice al nodo (cioè il numero di archi tra la radice e il nodo) La profondità massima di un nodo all interno di un albero è l altezza dell albero. Il grado di un nodo è il numero di figli di quel nodo.
14 Alberi binari nodo radice Profondità 0 Profondità 1 Profondità 2 Profondità 3
15 Alberi binari nodo radice Profondità 0 Profondità 1 Profondità 2 Profondità 3 Altezza 3
16 Alberi binari nodo radice Profondità 0 Profondità 1 Grado 2 Profondità 2 Grado 1 Profondità 3 Altezza 3
17 Albero binaro pieno Un albero binario si dice pieno se tutte le foglie hanno la stessa profondità h tutti i nodi interni hanno grado 2 Un albero pieno di altezza h ha esattamente 2 h+1-1 nodi. Un albero pieno con n nodi ha altezza esattamente log 2 n.
18 Albero binaro pieno 1 n = 2 h +1-1 = = n = 15 e altezza h = log 2 n = 3
19 Albero binaro completo Un albero binario si dice completo se tutte le foglie hanno profondità h o h-1, dove h è l altezza dell albero tutti i nodi interni hanno grado 2, eccetto al più uno.
20 Albero binaro completo nodo con un solo figlio profondità 0 profondità h-1 profondità h nodi foglia
21 Proprietà di uno Heap Un Albero Heap è un albero binario tale che per ogni nodo i: tutte le foglie hanno profondità h o h-1, dove h è l altezza dell albero; tutti i nodi interni hanno grado 2, eccetto al più uno; entrambi i nodi j e k figli di i sono NON maggiori di i. Condizioni 1 e 2 definiscono la forma dell albero
22 Proprietà di uno Heap Un Albero Heap è un albero binario tale che per ogni nodo i: tutte le foglie hanno profondità h o h-1, dove h è l altezza dell albero; tutti i nodi interni hanno grado 2, eccetto al più uno; entrambi i nodi j e k figli di i sono NON maggiori di i. Condizione 3 definisce l etichettatura dell albero
23 Proprietà di uno Heap Un Albero Heap è un albero binario completo tale che per ogni nodo i: entrambi i nodi j e k figli di i sono NON maggiori di i.
24 Heap
25 Heap Uno Heap non impone alcuna relazione di ordinamento tra i figli di un nodo.
26 Heap e Ordinamenti Parziali Un Albero Heap è un albero binario completo tale che per ogni nodo i: entrambi i nodi j e k figli di i sono NON maggiori di i. Uno Heap rappresenta un Ordiamento Parziale
27 Heap e Ordinamenti Parziali Un Ordinamento Parziale è una relazione tra elementi di un insieme che è: Riflessiva: x è in relazione con se stesso Anti-simmetrica: se x è in relazione con y e y è in relazione con x allora x = y Transitiva: se x è in relazione con y e y è in relazione con z allora x è in relazione con z Esempi: le relazioni e le relazioni >, < NON sono ordinamenti parziali
28 Heap e Ordinamenti Parziali Gli Ordinamenti Parziali possono essere usati per modellare, ad esempio, gerarchie con informazione incompleta o elementi con uguali valori. L ordinamento parziale definito da uno Heap è una nozione più debole di un ordinamento totale, infatti uno Heap è più semplice da costruire è molto utile ma meno dell ordinamento totale
29 Implementazione di uno Heap Uno Heap può essere implementato in vari modi: come un albero a puntatori come un array.
30 Heap: da albero ad array
31 Heap: da albero ad array Uno Heap può essere implementato come un array A in cui: la radice dello Heap sta nella posizione A[1] dell array se il nodo i dello Heap sta nella posizione i dell array (cioè A[i ]), il figlio sinistro di i sta nella posizione 2i il figlio destro di i sta nella posizione 2i
32 Heap: da albero ad array
33 Heap: da albero ad array
34 Heap: da albero ad array
35 Heap: da albero ad array
36 Heap: da albero ad array
37 Heap: da albero ad array
38 Proprietà di uno Heap Un Albero Heap è un albero binario completo tale che per ogni nodo i: entrambi i nodi j e k figli di i sono NON maggiori di i. Un array A è uno Heap se A[i ] A[2i ] e A[i] A[2i+1]
39 Operazioni elementari su uno Heap SINISTRO(i) return 2i DESTRO(i) return 2i + 1 PADRE(i) return i/2 heapsize[a] n è la lunghezza dello Heap
40 Operazioni su uno Heap Heapify(A,i): ripristina la proprietà di Heap al sottoalbero radicato in i assumendo che i suoi sottoalberi destro e sinistro siano già degli Heap Costruisci-Heap(A): produce uno Heap a partire dall array A non ordinato HeapSort(A): ordina l array A sul posto.
41 Heapify: Intuizioni Heapify(A,i): dati due Heap H 1 e H 2 con radici SINISTRO(i) e DESTRO(i) e un nuovo elemento v in posizione A[i] se lo Heap H con radice A[i]=v vìola la proprietà di Heap allora: metti in A[i] la più grande tra le radici degli Heap H1 e H2 applica Heapify ricorsivamente al sottoalbero modificato (con radice A[2i] o A[2i+1]) e all elemento v (ora in posizione A[2i] o A[2i+1]).
42 Heapify: intuizione sinistro(i) x i v destro(i) y Heap Heap
43 Heapify: intuizione (x > v e x y) sinistro(i) v i x destro(i) y heapify(sinistro(i)) Heap
44 Algoritmo Heapify Heapify(A,i) l = SINISTRO (i) r = DESTRO(i) IF l heapsize[a] AND A[l] > A[i] THEN maggiore = l ELSE maggiore = i IF r heapsize[a] AND A[r] > A[maggiore] THEN maggiore = r IF maggiore i THEN scambia A[i] e A[maggiore] Heapify(A,maggiore)
45 Heapify IF l heapsize[a] AND A[l] > A[i] THEN maggiore = l ELSE maggiore = i 45 1 i l 25 r
46 Heapify IF r heapsize[a] AND A[r] > A[maggiore] THEN maggiore = r 45 1 i maggiore l r
47 Heapify IF maggiore i THEN scambia A[i] e A[maggiore] Heapify(A,maggiore) 45 1 i maggiore l r
48 Heapify IF maggiore i THEN scambia A[i] e A[maggiore] Heapify(A,maggiore) 45 1 i maggiore l r
49 Heapify IF maggiore i THEN scambia A[i] e A[maggiore] Heapify(A,maggiore) 45 1 i maggiore l r
50 Heapify IF maggiore i THEN scambia A[i] e A[maggiore] Heapify(A,maggiore) i l 30 r
51 Heapify IF l heapsize[a] AND A[l] > A[i] THEN maggiore = l ELSE maggiore = i i l 30 r
52 Heapify IF l heapsize[a] AND A[l] > A[i] THEN maggiore = l ELSE maggiore = i i l maggiore 30 r
53 Heapify IF r heapsize[a] AND A[r] > A[maggiore] THEN maggiore = r i l maggiore 30 r
54 Heapify IF maggiore i THEN scambia A[i] e A[maggiore] Heapify(A,maggiore) i l maggiore 14 r
55 Heapify IF maggiore i THEN scambia A[i] e A[maggiore] Heapify(A,maggiore) i
56 Heapify IF l heapsize[a] AND A[l] > A[i] THEN maggiore = l ELSE maggiore = i 45 IF r heapsize[a] AND A[r] > 1 A[maggiore] THEN maggiore = r i di heapsize[a] Entrambi i test sono falsi 22 perché l e r sono maggiori 12
57 Heapify Heapify termina! È stata ripristinata la proprietà Heap i
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
ADT 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
In 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
Esercitazione 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
Algoritmi (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
Un heap binario è un albero binario con le seguenti caratteristiche:
Heap Un heap binario è un albero binario con le seguenti caratteristiche: È quasi completo: tutti i livelli, tranna al più l ultimo sono completi e le foglie dell ultimo livello sono tutte adossate a sinistra.
Algoritmi 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
Heap 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),
Algoritmi di ordinamento: Array e ricorsione
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Insertion Sort Quicksort Heapsort Indice
LE 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
Alberi Binari di Ricerca
Alberi Binari di Ricerca Prof. G. M. Farinella [email protected] www.dmi.unict.it/farinella Riferimenti Bibliografici Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms, Third Edition,
Algoritmi 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]
Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ Heap e Heapsort Algoritmi di ordinamento Insertion Sort Quicksort Heapsort Insertion Sort L
Esercizi su alberi binari
Esercizi su alberi binari Esercizi svolti: Determinazione nodi contenti verifica completezza verifica quasi completezza lunghezza del cammino interno determinazione ultima foglia in un quasi completo verifica
Alberi e alberi binari I Un albero è un caso particolare di grafo
Alberi e alberi binari Un albero è un caso particolare di grafo È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine ed entra
Un albero completamente bilanciato o pieno (full) alberi completamente sbilanciati. Un albero binario completo
alberi completamente sbilanciati Un albero completamente bilanciato o pieno (full) Definizione: Un albero è pieno se tutte le foglie sono sullo stesso livello e ogni nodo non foglia ha due figli. Il numero
Note per la Lezione 4 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che
Laboratorio di Python
, Esercizi su alberi Università di Bologna 16 maggio 2013 Sommario 1 2 Consegna non avvenuta Meno di 10 studenti hanno inviato l esercizio svolto. Definizione ricorsiva alberi binari Un albero binario
ALGORITMI 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
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello del 24 Gennaio 2007 Esercizio 1 (ASD) 1. Sia T (n) = T (n/6) + T (n/3) + Θ(n). Considerare ciascuna delle seguenti affermazioni
Alberi 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,
Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.
Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Algoritmi e Strutture Dati + Lab A.A. / Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro ALBERO
Heap 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
Strutture 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
Dati e Algoritmi I (Pietracaprina) Esercizi su Priority Queue e Heap
Dati e Algoritmi I (Pietracaprina) Esercizi su Priority Queue e Heap g Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1 Si definisca un albero ternario completo di altezza h come un albero con
GLI ALBERI BINARI DI RICERCA. Cosimo Laneve
GLI ALBERI BINARI DI RICERCA Cosimo Laneve argomenti 1. alberi binari di ricerca 2. la ricerca di elementi e la complessità computazionale 3. operazione di cancellazione di elementi 4. esempi/esercizi
Per semplicità eliminiamo le ripetizioni nell'albero.
Albero binario di ricerca 20 40 100 95 Un albero binario di ricerca é un albero binario in cui ogni nodo ha un etichetta minore o uguale a quelle dei nodi nel sottoalbero radicato nel figlio destro e maggiore
Gli ordini di visita di un albero binario di 9 nodi sono i seguenti: A, E, B, F, G, C, D, I, H (anticipato)
Alberi Indovina l albero Gli ordini di visita di un albero binario di 9 nodi sono i seguenti: A, E, B, F, G, C, D, I, H (anticipato) B, G, C, F, E, H, I, D, A (posticipato) B, E, G, F, C, A, D, H, I (simmetrico).
Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei
Alberi Alberi: definizioni Alberi Binari Esercizi su alberi binari: metodi ricorsivi Struttura dati per alberi generici 1 Alberi Gli alberi sono strutture dati naturalmente ricorsive Un albero è un particolare
Alberi binari e alberi binari di ricerca
Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
ALGORITMI 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
