Heap di Fibonacci.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Strutture dati per insiemi disgiunti
Ordinamento ottimo Ricerca
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
RB-alberi (Red-Black trees)
Code a priorità (Heap) Definizione
Strutture dati elementari
Alberi binari di ricerca
Code con priorità Ordinamento
Heap binomiali.
Insiemi disgiunti.
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.
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.
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
Esercizi su alberi binari
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
1 Strutture dati avanzate Vedremo alcune strutture dati che permettono di eseguire in modo particolarmente efficiente un determinato insieme di operazioni.
Algoritmi e strutture Dati - Lezione 7
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
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
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.
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati
Programmazione Mod. B - Alberi - prof. E. Burattini
Dizionari alberi bilanciati.
Algoritmi e Strutture Dati 20 aprile 2001
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
Heap binari e HeapSort.
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
Alberi di ricerca binari
Fibonacci Heaps e il loro utilizzo nell’algoritmo di Prim
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.
Strutture dati per insiemi disgiunti
Vediamo cos’è di preciso l’Heap (in italiano Pila) di Fibonacci.
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.
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Heap Ordinamento e code di priorità Ugo de Liguoro.
Algoritmi e Strutture Dati
B trees.
Esercizi su alberi binari di ricerca
Cammini minimi da un sorgente
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.
1/32 Algoritmi e Strutture Dati HEAP Anno accademico
alberi completamente sbilanciati
AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Algoritmi e Strutture Dati Strutture Dati Elementari.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Prof.ssa Rossella Petreschi Lezione del 15 /10/2012 del Corso di Algoritmica B-alberi Lezione n°5.
Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
Insiemi disgiunti.
Transcript della presentazione:

heap di Fibonacci

heap di Fibonacci Una heap di Fibonacci é un insieme di alberi (non necessariamente binomiali) con l’ordinamento parziale a heap. Gli alberi hanno una radice ma non sono ordinati. Hanno una struttura meno vincolata delle heap binomiali, permettendo di differire il lavoro di riorganizzazione della struttura.

heap di Fibonacci - Esempio min(H) 23 7 3 17 24 18 52 38 30 26 46 39 41 35 I nodi rossi sono nodi marcati, cioè nodi che hanno perso un figlio dall’ultima volta in cui erano diventati loro stessi figli di un altro nodo. Si accede all’albero da un puntatore al nodo con chiave minima (il nodo minimo)

heap di Fibonacci - Esempio Campi di ogni nodo: key data deg p child left right min(H) 23 7 3 17 24 18 52 38 30 26 46 39 41 35

heap di Fibonacci – creazione Make-Fib-Heap alloca e restituisce una heap di Fibonacci H, per la quale n[H]=0 e min[H]=NIL.

inserimento di un nuovo nodo inserisce un nodo x nella heap H Fib-Heap-Insert(H,x) deg[x]=0 p[x]=NIL child[x]=NIL left[x]=x right[x]=x mark[x]=FALSE concatena la lista delle radici contenente x con la lista delle radici di H if min[H] == NIL or key[x]<key[min[H]] then min[H] = x n[H]=n[H]+1

heap di Fibonacci - Insert - Esempio 2 min(H) 23 7 3 17 24 18 52 38 30 26 46 39 41 35

heap di Fibonacci - Insert - Esempio min(H) 23 7 2 3 17 24 18 52 38 30 26 46 39 41 35

heap di Fibonacci - Insert - Esempio min(H) 23 7 2 3 17 24 18 52 38 30 26 46 39 41 35

Estrazione del nodo minimo E’ un’operazione complicata. Realizza la ristrutturazione dell’albero. Utilizza una procedure Consolidate per ristrutturare la lista delle radici di H, che itera i due passi seguenti fino a quando ogni radice nella lista delle radici ha grado diverso: 1) trova due radici x e y nella lista delle radici con lo stesso grado, dove key[x] ≤ key[y] 2) collega y a x: togli y dalla lista delle radici e fallo diventare figlio di x. deg[x] cresce e mark[y] va a false.

Estrazione del nodo minimo Fib-Heap-Extract-Min(H) z = min[H] if z ≠ NIL then foreach figlio x di z do aggiungi x alla lista delle radici di H p[x]=NIL togli z dalla lista delle radici di H if z == right[z] then min[H]=NIL else min[H] = right[z] Consolidate(H) n[H] = n[H]-1 return z

heap di Fibonacci - ExtractMin - Esempio min(H) 23 7 21 3 17 24 18 52 38 30 26 46 39 41 35

heap di Fibonacci - ExtractMin - Esempio min(H) 23 7 21 18 52 38 17 24 39 41 30 26 46 35

heap di Fibonacci - ExtractMin - Esempio 1 2 3 4 23 7 21 18 52 38 17 24 39 41 30 26 46 35

heap di Fibonacci - ExtractMin - Esempio 1 2 3 4 23 7 21 18 52 38 17 24 39 41 30 26 46 35

heap di Fibonacci - ExtractMin - Esempio 1 2 3 4 23 7 21 18 52 38 17 24 39 41 30 26 46 35

heap di Fibonacci - ExtractMin - Esempio 1 2 3 4 7 21 18 52 38 17 24 23 39 41 30 26 46 35

heap di Fibonacci - ExtractMin - Esempio 1 2 3 4 7 21 18 52 38 24 17 23 39 41 26 46 30 35

heap di Fibonacci - ExtractMin - Esempio 1 2 3 4 7 21 18 52 38 24 17 23 39 41 26 46 30 35

heap di Fibonacci - ExtractMin - Esempio 1 2 3 4 7 21 18 52 38 24 17 23 39 41 26 46 30 35

heap di Fibonacci - ExtractMin - Esempio 1 2 3 4 7 21 18 52 38 24 17 23 39 41 26 46 30 35

heap di Fibonacci - ExtractMin - Esempio 1 2 3 4 7 18 38 24 17 23 21 39 41 26 46 30 52 35

heap di Fibonacci - ExtractMin - Esempio min(H) 7 18 38 24 17 23 21 39 41 26 46 30 52 35

Decremento di una chiave Viene decrementata al valore k la chiave del nodo x della heap H. Fib-Heap-Decrease-Key(H,x,k) key[x] = k; y = p[x] if y ≠ NIL and key[x] < key[y] then Cut(H,x,y), Cascading-Cut(H,y) if key[x] < key[min[H]] then min[H]=x Cut(H,x,y) togli x dalla lista dei figli di y, decrementando deg[y] aggiungi x alla lista delle radici di H p[x] = NIL; mark[x] = FALSE Cascading-Cut(H,y) z = p[y] if z≠NIL then if not(mark[y]) then mark[y]=TRUE else Cut(H,y,z),Cascading-Cut(H,z)

Decremento di una chiave: Esempio min(H) 7 18 38 24 17 23 21 39 41 26 46 30 52 35 15

Decremento di una chiave: Esempio min(H) 15 7 18 38 24 17 23 21 39 41 26 30 52 35

Decremento di una chiave: Esempio 2 min(H) 15 7 18 38 24 17 23 21 39 41 26 30 52 35 5

Decremento di una chiave: Esempio 2 min(H) 15 5 7 18 38 24 17 23 21 39 41 26 30 52

Decremento di una chiave: Esempio 2 min(H) 15 5 26 7 18 38 24 17 23 21 39 41 30 52

Decremento di una chiave: Esempio 2 min(H) 15 5 26 24 7 18 38 17 23 21 39 41 30 52

Limitazione al grado massimo Sia D(n) il massimo grado possibile per un nodo in una heap di Fibonacci con n elementi Se D(n) è O(lgn) allora il tempo ammortizzato di ExtractMin e Delete è O(lgn). Per mostrarlo, l’idea è mostrare che size(x) – num. nodi contenuti nel sottoalbero radicato in x – cresce esponenzialmente in deg(x).

Limitazione al grado massimo Lemma Sia x un nodo di una heap di Fibonacci con deg(x) = k. Siano y1, ..., yk i figli di x nell’ordine in cui erano stati collegati a x, dal meno recente al più recente. Quindi deg(y1)  0 e deg(yi)  i – 2 per i = 2, 3, ..., k.

Limitazione al grado massimo Numeri di Fibonacci F0 = 0 F1 = 1 Fk = Fk – 1 + Fk – 2 Lemma Per ogni k  0: Fk + 2 = 1 + i = 0...k Fi

Limitazione al grado massimo Lemma Sia x un nodo in una heap di Fibonacci con deg(x) = k. Allora size(x)  Fk + 2  k, dove  = (1 + 5)/2.

Limitazione al grado massimo Corollario Il massimo grado D(n) di qualsiasi nodo in una heap di Fibonacci con n nodi è O(lgn). Dimostrazione Sia x un nodo in una heap H con n nodi e sia k=deg[x]. Dal Lemma prec. si ha che n ≥ size[x] ≥ k. Utilizzando i logaritmi in base  si ha k ≤ logn. Il grado massimo di un qualunque nodo è quindi O(lgn).

heap di Fibonacci - Sommario heap binomiali Heap Min (1) (log n) ExtractMin DecreaseKey Union (n) Insert Delete MakeEmpty IsEmpty