Albero binario: Ogni nodo ha zero, uno, o due successori (ordinati)

Documenti analoghi
Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Problemi di ordinamento

Heap, heapsort e code a priorità. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche:

ADT Coda con priorità

In questa lezione. Heapsort. ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 114

In questa lezione. Costruire un max-heap. [CLRS01] cap. 6 par Prof. E. Fachini - Intr. Alg.

Gli heap. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

In questa lezione. Heap binario heapsort. [CLRS10] cap. 6, par Prof. E. Fachini - Intr. Alg.

In questa lezione. Code di priorità. [CLRS01] cap. 6 da pag. 114 a pag Prof. E. Fachini - Intr. Alg. lunedì 17 settembre 2012

ALGORITMI E STRUTTURE DATI

Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una

Algoritmi e Strutture Dati. HeapSort

Algoritmi e Strutture Dati. HeapSort

Algoritmi (9 CFU) (A.A ) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1

Heap Ordinamento e code di priorità. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 9

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Spesso sono definite anche le seguenti operazioni:

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

Esercitazione 3. Heapsort

Algoritmi e Strutture di Dati

Heap e code di priorità

Algoritmi di ordinamento: Array e ricorsione

Ordinamenti. 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. Vittorio Maniezzo Università di Bologna

Algoritmi e Strutture Dati

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

heap concetti ed applicazioni

Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi. Parte prima

Heap binomiali. Oltre alle precedenti operazioni fondamentali degli heap riunibili, sugli heap binomiali definiremo anche le due ulteriori operazioni:

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Visualizzazione di dati

Un heap binario è un albero binario con le seguenti caratteristiche:

Code a priorità (Heap) Definizione Heapify (mantenimento coda a priorità) Costruire un Heap Insert, Maximum e Extract-Max

Alberi Binari di Ricerca. Vittorio Maniezzo Università di Bologna

Alberi Binari di Ricerca

Selection Sort (minsort)

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Algoritmi e Strutture Dati. Lezione 4

Code con priorità. Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna.

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Heap e Code di Priorità

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Università degli Studi di Camerino Laurea in Informatica Prima Prova Parziale del corso di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata

Strutture dati elementari. Vittorio Maniezzo - Università di Bologna

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Indici con gli alberi

Algoritmi e Strutture Dati

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Esercizi di Algoritmi e Strutture Dati

ADT albero binario completo

Strutture dati elementari

lezione 9 min-heap binario Heap e Alberi posizionali generali

Esercizi vari. Alberto Montresor. 19 Agosto, 2014

Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Laboratorio di Algoritmi e Strutture Dati

Esercizi per il corso di Algoritmi

Introduzione. Heap-binomiali: un heap binomiale è un insieme di alberi binomiali.

Handle di Funzioni Università degli Studi di Milano

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort

Heap, heap indiretti e code di priorità

Alberi binari di ricerca

Lezione 6: 12 Novembre 2013

Albero di Riscorsione

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT)

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D:

Algoritmi e Strutture Dati

Quick Sort. PARTITION(A,p,r) risistema il sottoarray A[p...r] e riporta l indice q:

Esercizi su ABR. Prof. E. Fachini - Intr. Alg.!1

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Insert sort. Considero il primo elemento a 1. cerco il minimo tra gli elementi 3...N. scambio il minimo trovato con il primo e- lemento

Dati e Algoritmi 1: A. Pietracaprina. Alberi Binari

Algoritmi e strutture dati

QuickSort Università degli Studi di Milano

Algoritmi e Strutture Dati. Alberi

Alberi. Se x è il genitore di y, allora y è un figlio di x. Un albero binario è un albero in cui ogni nodo ha al massimo due figli.

Problem Set 3 docente: Luciano Gualà

Algoritmi e Strutture Dati Laboratorio 15/12/2008. Daniele Loiacono

Algoritmi e Strutture Dati

Strutture dati - Parte 3

Alberi Binari di Ricerca e Alberi Rosso-Neri

Ordinamento per inserzione e per fusione

Complessità algoritmi su strutture dati (riassunto)

Memorizzazione di una relazione

Alberi binari di ricerca

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006

Algoritmi di ordinamento

Transcript:

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 tutte le profondità sono completamente piene Albero binario quasi completo: Albero binario completo tranne che per il livello inferiore, che è pieno da sinistra verso destra solo parzialmente Vittorio Maniezzo - Università di Bologna 2 1

Alberi binari quasi completi Si consideri un albero binario quasi completo si altezza h Se il livello inferiore contiene 1 elemento: num. di elementi n= (1 + 2 +... + 2 h 1 ) + 1 = (2 h 1) + 1 = 2 h Se il livello inferiore è pieno: numero di elementi n= 1 + 2 +... + 2 h = 2 h+1 1 Quindi in ogni caso: 2 h n 2 h+1 1 < 2 h+1 h log n< h+ 1 log n-1 < h log n h= log n Sarà importante per heap sort Vittorio Maniezzo - Università di Bologna 3 Heap: definizione formale Una Heapè un albero binario quasi completo. Quasi significa che possono mancare alcune foglie consecutive a partire dall ultima foglia di destra. Per ogni nodo i: value(i) value(parent(i)) Nota 1: il massimo si trova nella radice (max-heap) Nota 2: non c è nessuna relazione tra il valore di un nodo e quello di un suo fratello Vittorio Maniezzo - Università di Bologna 4 2

heap in un vettore 128 64 72 8 7 12 30 1 6 3 Vittorio Maniezzo - Università di Bologna 5 Heap binarie 128 64 72 8 7 12 30 1 6 3 A={128, 64, 72, 8, 7, 12, 30, 1, 6, 3} 1 2 3 4 5 6 7 8 9 10 A(6) = 12 Vittorio Maniezzo - Università di Bologna 6 3

heap in un vettore Radice posizione 1 Per ogninodo in posizionei: left-child(i) posizione 2i right-child(i) posizione 2i+1 parent(i) = i/2 Vittorio Maniezzo - Università di Bologna 7 Aggiunta di un elemento: heapify i Heaps A B Heap i 2i 2i+1 parte del vettore già heapizzato elemento da aggiungere alla sotto heap (verde) Vittorio Maniezzo - Università di Bologna 8/30 4

Heapify IDEA: facciamo scendere il nodo i nell albero fino a trovare la sua posizione. i? A B A B i Vittorio Maniezzo - Università di Bologna 9 Heapify(A,i) HEAPIFY(A,i) l = left(i) r = right(i) if (l heap-size(a) and A[l]>A[i]) then largest=l else largest=i if (r heap-size(a) and A[r]>A[largest]) then largest=r if (largest i) then SWAP(A[i],A[largest]) HEAPIFY(A,largest) Vittorio Maniezzo - Università di Bologna 10 5

Heapify: costo computazionale Caso pessimo: il nodo si sposta fino ad arrivare alle foglie. Heapifyimpiega tempo costante ad ogni livello per sistemare A[i], A[left(i)] e A[right(i)]. Esegue aggiustamenti locali al massimo height(i) volte dove height(i) = O(log(n)) Vittorio Maniezzo - Università di Bologna 11 Build heap Idea: si trasforma in una heapun albero binario con radice in posizione i. I dati sono contenuti in un array a, con a[i] = h Si assume che gli alberi binari con radice in 2ie 2i+ 1siano già delle heap. a[2i]=k e a[2i+1]=l Se necessario si fa uno scambio per garantire che in posizione ici sia il più grande fra h, ke l. i 2i 2i+1 h k l h l k A B (k>h) A B Vittorio Maniezzo - Università di Bologna 12 6

Build heap) BUILD-HEAP(A) heap-size(a)=length(a) for i= length(a)/2 downto 1 do HEAPIFY(A,i) Gli elementi in posizione da length(a)/2 a length(a) sono già heap unitarie. Analisi approssimativa: ogni chiamata a heapify costa O(log(n)). chiamiamo heapifyo(n)volte, quindi build-heap = O(n log(n)) Domanda (esercizio): build-heap = Θ(n log(n))? Vittorio Maniezzo - Università di Bologna 13 Priority Queue:(Code a Priorità Dati: un insieme di elementi, ognuno dei quali ha una chiave (un intero per esempio). Operazioni: inserimento, trova il massimo, estrazione del massimo (massima chiave). Applicazioni delle PQ: Job scheduling, Event-driven simulations, Vittorio Maniezzo - Università di Bologna 14 7

Implementazione facile ) usando vettori Prima soluzione: vettore ordinato. Ricerca massimo: Θ(1) operazioni estrazione massimo: Θ(1) operazioni inserimento: Θ(n) operazioni Seconda soluzione vettore non ordinato. Ricerca massimo: Θ(n) operazioni estrazione massimo: Θ(n) operazioni inserimento: Θ(1) operazioni Si può fare meglio??? Vittorio Maniezzo - Università di Bologna 15 PQ implementate con Heap EXTRACT-MAX(A) max=a[1] A[1]=A[heapsize(A)] heapsize(a)=heapsize(a)-1 HEAPIFY(A,1) return max O(log(n)) Vittorio Maniezzo - Università di Bologna 16 8

PQ implementate con Heap max =?? max = max = Heapify( ) Vittorio Maniezzo - Università di Bologna 17 PQ implementate con Heap INSERT(A,x) heapsize(a)=heapsize(a)+1 i=heapsize(a) while (i>1 and A[parent(i)]<x) do A[i]=A[parent(i)] i=parent(i) A[i]=x O(log(n)) Vittorio Maniezzo - Università di Bologna 18 9

Heap Sort: l idea. Per ordinare in senso crescente. Prima parte: si trasforma l'array in input in una max-heap Seconda parte: si scambia il dato nella radice con il dato dell'ultimo nodo si esclude l'ultimo nodo dalla heap(non lo si tocca più) si ricostruisce la heap Vittorio Maniezzo - Università di Bologna 19 Heap Sort: l idea. Heap Heapify Heap Heapify... avanti così... Vittorio Maniezzo - Università di Bologna 20 10

Heap Sort HEAPSORT(A) BUILDHEAP(A) for i=length(a) downto 2 do EXCHANGE(A[1],A[i]) heap-size[a] = heap-size(a)-1 Oppure (meglio) HEAPIFY(A,1) HEAPSORT(A) BUILDHEAP(A) for i=length(a) downto 2 A[i] = EXTRACTMAX(); Vittorio Maniezzo - Università di Bologna 21 Heap sort, complessità Complessità nel caso pessimo di heapsort. buildheap O(n) Si fanno n 1 chiamate a Heapify Ogni chiamata costa O(log n) Quindi heapsort O(n log n) Domanda: heapsort è in-place? Vittorio Maniezzo - Università di Bologna 22 11

Heapsort, esempio (da wikipedia) Dati: 6, 5, 3, 1, 8, 7, 2, 4 Heap: 8, 6, 7, 4, 5, 3, 2, 1 Heap: 7, 6, 3, 4, 5, 1, 2 8 Heap: 6, 5, 3, 4, 2, 1 7, 8 Heap: 5, 4, 3, 1, 2 6, 7, 8 Heap: 4, 2, 3, 1 5, 6, 7, 8 Heap: 3, 2, 1 4, 5, 6, 7, 8 Heap: 2, 1 3, 4, 5, 6, 7, 8 Heap: 1 2, 3, 4, 5, 6, 7, 8 Heap: 1, 2, 3, 4, 5, 6, 7, 8 Vittorio Maniezzo - Università di Bologna 23 Ordinamenti, proprietà = in place Vittorio Maniezzo - Università di Bologna 24 12