AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Strutture dati per insiemi disgiunti
Ordinamento ottimo Ricerca
Alberi binari Definizione Sottoalberi Padre, figli
RB-alberi (Red-Black trees)
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Code a priorità (Heap) Definizione
Strutture dati elementari
Alberi binari di ricerca
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Code con priorità Ordinamento
Heap binomiali.
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.
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.
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.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
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.
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 8 Code con.
Capitolo 4 Ordinamento 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.
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati IV. Heap e Code di Priorità
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.
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.
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.
B trees.
Corso di Informatica 2 a.a. 2003/04 Lezione 6
Cammini minimi da un sorgente
Ordinamento topologico Cammino minimo dalla 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.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Alberi CORDA – Informatica A. Ferrari Testi da
alberi completamente sbilanciati
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
AlgoLab - MST code binomiali Algoritmi per il calcolo di MST: uso di code unificabili Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
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.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Alberi rosso-neri Le operazioni sugli alberi binari di ricerca hanno complessità proporzionale all’altezza h dell’albero. Gli alberi rosso-neri sono alberi.
Heap di Fibonacci.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Grafi: rappresentazione e visita
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.
Transcript della presentazione:

AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro

AlgoLab - Code unificabili ADT delle code unificabili Le code unificabili sono code di priorità che supportano le seguenti operazioni: MakeQueue(): crea una coda vuota; Enqueue(x,Q): aggiunge un elemento x alla coda Minimum(Q): ritorna l’elemento di chiave minima in Q (il minimo) Dequeue (Q): elimina da Q il minimo DecreaseKey(x,k,Q): ridefinisce la chiave di x in Q con il valore k, posto che essa fosse  k Union(Q,Q): costruisce una coda unificando distruttivamente Q e Q.

AlgoLab - Code unificabili Alberi binomiali Gli alberi binomiali sono alberi finiti ordinati definiti induttivamente: B 0 ha un solo nodo; B k+1 è formato da due alberi B k di cui la radice del primo sia il figlio più a sinistra della radice del secondo: B k+1 BkBk BkBk Gli alberi binomiali si chiamano cosi perché, tra le loro craratteristiche, vi è che il livello i dell’albero B k ha esattamente nodi.

AlgoLab - Code unificabili Esempi B4B4 BoBo B1B1 B2B2 B3B3

AlgoLab - Code unificabili Proprietà degli alberi binomiali Sia B k l’albero binomiale di ordine k: a)ha 2 k nodi, b)ha altezza k, c)vi sono nodi al livello i, d)la radice ha k figli i quali, se numerati da sinistra a destra con k  1, k  2, …, 0 allora il figlio i-esimo è un albero B i. Dim. Vedi Cormen, cap. 20.

AlgoLab - Code unificabili Heap binomiali Uno heap binomiale H è un insieme di alberi binomiali tale che: gli alberi siano degli heap minimi, ossia la chiave di un nodo è  di quella del padre (se esiste); per ogni k in H vi è al più un albero di grado k. Il grado di un nodo è il numero dei suoi figli; il grado (o arietà) di un albero è il massimo dei gradi dei suoi nodi. Si osservi che il grado della radice di B k è k.

AlgoLab - Code unificabili Esempio H =

AlgoLab - Code unificabili Rappresentazione H parent key degree childsibling Si osservi come la root-list sia ordinata in modo crescente rispetto al grado, mentre la lista dei fratelli di un nodo non radice sia decrescente sul grado. root-list

AlgoLab - Code unificabili Osservazioni Se H ha n nodi, allora H consta di al più  lg n  + 1 alberi binomiali:  lg n  + 1 è il numero dei bit nella rappresentazione binaria di n n 2 = b  lg n  b  lg n  -1 … b 0 Visto che e che B i ha 2 i nodi, l’albero B i occorre in H se e solo se b i = 1: quindi di questi alberi ve ne sono al massimo  lg n  + 1.

AlgoLab - Code unificabili Operazioni (1) MakeBinHeap (): BinHeap ritorna uno heap binomiale vuoto. BinHeapMin(BinHeap H): Node ritorna il puntatore al nodo con chiave minima in H: dato che gli alberi nella root- list di H sono heap, è sufficiente scandire la root-list (lunghezza   lg n  + 1). BinHeapInsert(Node x, BinHeap H): Void aggiunge un nodo precedentemente allocato x (di cui sia dunque definito il valore della chiave) allo heap binomiale H: crea uno heap vuoto, vi inserisce l’albero il cui unico nodo è x, quindi unisce H con il nuovo heap binomiale.

AlgoLab - Code unificabili Operazioni (2) BinHeapExtract(BinHeap H): Node ritorna il puntatore al nodo x con chiave minima in H, eliminandolo dalla coda: eliminato x dalla root-list di H, prima di deallocarlo forma uno heap binomiale H la cui root-list è la lista dei figli di x in ordine inverso (quindi con grado crescente); quindi unisce H ed H. BinHeapDecreaseKey(Node x, Key k, BinHeap H): Void ridefinisce la chiave del nodo x con il valore k (che si ipotizza sia minore del valore originario della chiave di x), ristrutturando la relativa componente di H: consiste nello scambio tra x e il padre di x ogni volta che quest’ultimo abbia chiave > k.

AlgoLab - Code unificabili Operazioni (3) BinLink(Node x, Node y): Void rende l’albero binomiale con radice in x figlio sinistro di quello con radice in y: funzione ausliaria di BinHeapUnion. BinHeapUnion(BinHeap H1,H2): BinHeap costruisce l’unione di H1 ed H2 distruttivamente ….

AlgoLab - Code unificabili Unione di heap binomiali BinHeapUnion (BinHeap H1, H2) H := la fusione ordinata sul grado delle root-list di H1 e H2 x := il puntatore al primo elemento della root-list di H while x ed il puntatore al fratello di x  NIL do if x ed il fratello hanno diverso grado or x è la prima di tre radici con lo stesso grado then x := il puntatore al successivo nella root-list else // x è la prima di due radici con lo stesso grado fondi l’albero con radice in x con quello successivo, facendo diventare radice del nuovo albero quella con la chiave minore x := il puntatore alla radice del nuovo albero return H

AlgoLab - Code unificabili BinHeapUnion(BinHeap H1, H2) H := MakeBinHeap(); root-list[H] := Merge(root-list[H1],root-list[H2]) // ordinando in modo non decrescente sul grado if root-list[H] = NIL then return H else prev := NIL; x := root-list[H]; next := sibling[x]; while next  NIL do if degree[x]  degree[next] or (sibling[next]  NIL and degree[sibling[next]] = degree[x]) then prev := x; x := next else if key[x]  key[next] then sibling[x] := sibling[next]; BinLink(next,x) else if prev = NIL then root-list[H] := next else sibling[prev] := next BinLink(x,next); x := next; next := sibling[x]; return H Unione (pseudocodice)

AlgoLab - Code unificabili Caso 1 abcd prevxnext sibling[next] BkBk BlBl abcd prevxnext BkBk BlBl

AlgoLab - Code unificabili Caso 2 abcd prevxnext sibling[next] BkBk BkBk BkBk abcd prevxnext BkBk BkBk BkBk

AlgoLab - Code unificabili Caso 3 abcd prevxnext sibling[next] BkBk BkBk BlBl b  c ab c d prev xnext BkBk BkBk B k+1 BlBl

AlgoLab - Code unificabili Caso 4 abcd prevxnext sibling[next] BkBk BkBk BlBl b > c ac b d prev xnext BkBk BkBk B k+1 BlBl