Heap binomiali.

Slides:



Advertisements
Presentazioni simili
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
Advertisements

Strutture dati per insiemi disgiunti
Algoritmi e Strutture Dati
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
/ fax
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Frontespizio Economia Monetaria Anno Accademico
1 la competenza alfabetica della popolazione italiana CEDE distribuzione percentuale per livelli.
1 Tavolo del Patto per la crescita intelligente, sostenibile e inclusiva Il ricorso agli ammortizzatori sociali nei territori colpiti dagli eventi sismici.
RB-alberi (Red-Black trees)
Code a priorità (Heap) Definizione
Strutture dati elementari
Alberi binari di ricerca
Cammini minimi con sorgente singola
Dipartimento di Ricerca Sociale - Università del Piemonte Orientale 1 Castelli Aperti giugno 2005 Castello di Camino (AL) IL PUBBLICO DI CASTELLI.
PROGRAMMI DI COOPERAZIONE TERRITORIALE I controlli di primo livello in azione Un caso pratico Programma Interreg IV C Progetto B3 Regions Regione Piemonte.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Esercizi su alberi binari
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Il problema del dizionario
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
Programmazione 1 9CFU – TANTE ore
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Algoritmi e Strutture Dati 20 aprile 2001
Esercizi su alberi binari
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
DHTML: Modello degli Eventi 1. 2 Sommario Introduzione Evento onclick Evento onload Gestione errori con onerror Gestione mouse con levento onmousemove.
Alberi di ricerca binari
2 3 4 RISERVATEZZA INTEGRITA DISPONIBILITA 5 6.
Anche la RB-Delete ha due fasi: Nella prima viene tolto un nodo y avente uno dei sottoalberi vuoto sostituendolo con la radice dellaltro sottoalbero. Per.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
1 Questionario di soddisfazione ATA - a. sc. 2008/09 Il questionario è stato somministrato nel mese di aprile Sono stati restituiti 29 questionari.
RB-insert(T, z) // z.left = z.right = T.nil Insert(T, z) z.color = RED // z è rosso. Lunica violazione // possibile delle proprietà degli alberi // rosso-neri.
1101 = x 10 x 10 x x 10 x = CORRISPONDENZE
1 Questionario di soddisfazione Studenti - a. sc. 2008/09 Il questionario è stato somministrato dal mese di aprile al mese di maggio Sono stati restituiti.
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Bando di Residenza Cap Scheda ENTE 3ROL - Richieste On Line.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
-17 Aspettative economiche – Europa Settembre 2013 Indicatore > +20 Indicatore 0 a +20 Indicatore 0 a -20 Indicatore < -20 Unione Europea Totale: +6 Indicatore.
Alberi di copertura minimi. Dato un grafo pesato G = (V,E), si richiede di trovare un albero T = (V,E’), E’  E, tale che la somma dei pesi associati.
lun mar mer gio ven SAB DOM FEBBRAIO.
Soluzione: Algoritmo Heap-Sort Un array A[1..n] può essere interpretato come un albero binario: A[1] è la radice, A[2i] e A[2i+1] sono i figli di A[i]
AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Heap di Fibonacci.
Transcript della presentazione:

heap binomiali

Heap binomiale Una heap binomiale è un insieme di alberi binomiali. Un albero binomiale Bk è un albero ordinato definito ricorsivamente per cui valgono le seguenti proprietà: I nodi dell’albero sono 2k L’altezza dell’albero è k I nodi a profondità i sono esattamente , con i=0, 1, ... , k La radice dell’albero ha grado k. Il grado della radice è maggiore del grado di ogni altro nodo. Enumerando con k-1, k- 2, ..., o i figli della radice, il figlio numero i è la radice del sottoalbero binomiale Bi.

Alberi Binomiali: esempi Bk-1 Bk-1 Bk

Alberi Binomiali: esempi

Alberi Binomiali: esempi

Alberi Binomiali: esempi  B0 B1 B2 Bk-2 Bk-1 Bk

Heap Binomiali - Definizione Una heap binomiale H è un insieme di alberi binomiali che soddisfa le seguenti proprietà: Ogni albero binomiale è ordinato come una heap, cioè per ogni nodo si ha che la sua chiave è maggiore o uguale alla chiave dei suoi genitori Non esistono due alberi binomiali in H le cui radici hanno lo stesso grado

Heap Binomiali - Esempio head[H] 10 1 6 12 25 8 14 29 18 11 17 38 27

Heap Binomiali - Esempio head[H] 1 2 6 3 10 0 12 1 25 0 8 2 14 1 29 0 p key deg child sibling 11 1 18 0 17 0 38 0 27 0

Heap Binomiali - Min Ricerca della chiave minima input: una heap binomiale H con n nodi output: puntatore al nodo con chiave minima (è in una radice!) Binomial-Heap-Minimum(H): y=NIL x=head[H] min =  while x  NIL do if key[x] < min then min = key[x]; y=x x = sibling[x] return y

Unione Collega tutti gli alberi binomiali le cui radici hanno lo stesso grado. Subroutine Binomial-Link(y,z) che collega gli alberi binomiali y e z le cui radici hanno lo stesso grado: z diventa padre di y. Binomial-Link(y,z) p[y] = z sibling[y] = child[z] child[z] = y degree[z] = degree[z]+1

Binomial-Heap-Union Unisce H1 e H2, distruggendole. Binomial-Heap-Union(H1,H2): H = Make-Binomial-Heap() P = Head[H]; P1 = Head[H1]; P2 = Head[H2] while P1  NIL and P2  NIL do if Deg[P1] < Deg[P2] then Sibling[P] = P1; P1 = Sibling[P1] else Sibling[P] = P2; P2 = Sibling[P2] while P1  NIL do while P2  NIL do

Binomial-Heap-Union (cont.) prev_x=NIL; x = head[H]; next_x = sibling[x] while next_x ≠ NIL do if deg[x] ≠ deg[next_x] or (sibling[next_x] ≠ NIL and deg[sibling[next_x]] == deg[x]) then prev_x = x; x = next_x else if key[x] ≤ key[next_x] then sibling[x] = sibling[next_x]; Binomial-Link(next_x,x) else if prev_x == NIL then head[H] = next_x else sibling[prev_x] = next_x BinomialLink(x,next_x) x = next_x next_x = sibling[x] return H

Heap binomiale - Unione - Esempio head[H2] 18 3 6 H2 37 8 29 10 44 head[H1] 12 7 15 30 23 22 48 31 17 H1 25 28 33 45 32 24 50 41 55

Heap Binomiali - Unione - esempio head[H] 12 18 7 3 15 6 H1H2 25 37 28 33 8 29 10 44 41 30 23 22 48 31 17 45 32 24 50 55

Heap Binomiali - Unione - esempio head[H1] H1H2 12 7 3 15 6 18 25 37 28 33 8 29 10 44 41 30 23 22 48 31 17 45 32 24 50 55

Heap Binomiali - Unione - Esempio head[H1] H1H2 12 3 15 6 18 7 37 28 33 8 29 10 44 25 41 30 23 22 48 31 17 45 32 24 50 55

Heap Binomiali - Unione - Esempio head[H1] H1H2 12 3 6 18 15 7 37 8 29 10 44 28 33 25 30 23 22 48 31 17 41 45 32 24 50 55

Heap Binomiali - Inserimento Inserisce un nodo in una heap binomiale Binomial-Heap-Insert(H, x): H’ = Make-Binomial-Heap() p[x] = NIL child[x] = NIL sibling[x] = NIL deg[x] = 0 Head[H’] = x H = Binomial-Heap-Union(H,H’)

Heap Binomiali - ExtractMin Elimina da una heap binomiale H il nodo con chiave minima e restituisce il puntatore a quel nodo Binomial-Heap-Extract-Min(H) min = ; MinKey = NIL; MKP = NIL P = Head[H]; PP = Head[H] while P  NIL do if key[P] < min then min = Key[P]; MinKey = P; MKP = PP PP = P; P = Sibling[P] if MinKey == NIL then return fail (cont…)

Heap Binomiali - ExtractMin (cont.) H1 = Make-Binomial-Heap() if MKP  head[H] then sibling[MKP] = sibling[MinKey] else head[H] = sibling[MinKey] P = left[MinKey] while P  0 do S = sibling[P] sibling[P] = head[H1] head[H1] = P p[P] = 0 P = S H = Binomial-Heap-Union(H,H1)

Heap Binomiali - ExtractMin - Esempio head[H] 37 10 1 41 28 13 6 16 12 25 77 8 14 29 26 23 18 11 17 38 42 27

Heap Binomiali - ExtractMin - Esempio head[H] x 37 10 1 41 28 13 6 16 12 25 77 8 14 29 26 23 18 11 17 38 42 27

Heap Binomiali - ExtractMin - Esempio head[H] head[H’] 37 10 25 12 16 6 41 28 13 18 26 23 8 14 29 77 42 11 17 38 27

Heap Binomiali - ExtractMin - Esempio head[H] 25 37 12 10 16 6 41 18 28 13 26 23 8 14 29 77 42 11 17 38 27

Heap Binomiali - ExtractMin - Esempio head[H] 25 12 6 37 18 10 8 14 29 41 16 28 13 11 17 38 27 26 23 77 42

Decremento di una chiave Si assegna un nuovo valore k alla chiave di un nodo x di una heap binomiale H. Errore se k > key[x] Binomial-Heap-Decrease-Key(H,x,k) if k>key[x] then error key[x]=k, y=x; z=p[x] while z  NIL and key[y] < key[z] do key[y]  key[z] y = z z = p[y]

Decremento di una chiave - Esempio head[H] 25 12 6 37 18 10 8 14 29 z 41 16 28 13 11 17 38 y 27 7 23 77 42

Decremento di una chiave - Esempio head[H] 25 12 6 37 18 z 10 8 14 29 41 y 7 28 13 11 17 38 27 16 23 77 42

Decremento di una chiave - Esempio head[H] 25 12 6 z 37 18 y 7 8 14 29 41 10 28 13 11 17 38 27 16 23 77 42

Eliminazione di una chiave Elimina un nodo x da uno heap binomiale H Binomial-Heap-Delete(H,x): Binomial-Heap-Decrease-Key(H,x, ) Binomial-Heap-Extract-Min(H)

Heap Binomiali - Sommario Min (log n) or (1) (1) Extract-Min (log n) Decrease-Key Union (n) Insert Delete Make-Empty Is-Empty