dizionari dizionari introduzione al bilanciamento dizionari/2 alberi bilanciati ! ADT che supportano le seguenti operazioni

Documenti analoghi
dizionari alberi bilanciati

Algoritmi e Strutture Dati

Algoritmi e strutture dati

Alberi di ricerca. Dizionari. Definizione. Alberi binari di ricerca (BST = binary search tree) Algoritmi e Strutture Dati

Alberi di ricerca. Alberi binari di ricerca. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Un esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Alberi di Ricerca Alberi Bilanciati I (Alberi AVL)

Alberi ed Alberi Binari di Ricerca

Algoritmi e Strutture Dati

Alberi Bilanciati di Ricerca

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

ABR di altezza logaritmica

ALBERI BINARI DI RICERCA

La cancellazione in un AVL

Esercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre.

Algoritmi e Strutture Dati. Alberi di Ricerca Alberi Bilanciati I (Alberi AVL)

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI

Un esempio di mutua ricorsione

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1.

Heap e Code di Priorità

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Esercizi BST - AVL. E. Fachini

heap concetti ed applicazioni

In questa lezione Alberi binari di ricerca: la cancellazione

Esercizi su alberi binari

Implementazione ADT: Alberi

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

Indici con gli alberi

Informatica 3. LEZIONE 27: Strutture ad albero avanzate. Modulo 1: Trie Modulo 2: Alberi bilanciati Modulo 3: Strutture dati spaziali

Albero binario. Alberi binari (introduzione) Terminologia. Alberi di ricerca binaria (BST)

ricerca di un elemento, verifica dell appartenenza di un elemento

Alberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Alberi Binari di Ricerca e Alberi Rosso-Neri

Per semplicità eliminiamo le ripetizioni nell'albero.

Alberi. Alberi: Esempio di utilizzo

Fondamenti teorici e programmazione

Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità

Università degli Studi di L Aquila Facoltà di Scienze M.F.N. Corso di Laurea in Informatica. Modulo di Laboratorio di Algoritmi e Strutture Dati

Alberi di ricerca binari

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

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

Bilanciamento Alberi Binari di Ricerca

In questa lezione Alberi binari di ricerca

Algoritmi e Strutture Dati. Alberi Bilanciati: Alberi Red-Black

d. Cancellazione del valore 5 e. Inserimento del valore 1

Alberi due-tre e alberi B

Lezione 12 Tabelle Hash

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

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

Algoritmi e Strutture di Dati

Alberi e alberi binari I Un albero è un caso particolare di grafo

Alberi e alberi binari I Un albero è un caso particolare di grafo

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.

Alberi binari: definizione e alcune proprietà

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

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Alberi binari di ricerca

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

algoritmi e strutture di dati

Dizionari. Realizzazione con alberi binari di ricerca. Alberi rosso-neri. Ugo de' Liguoro - Algoritmi e Seprimentazioni 03/04 Lez.

Problemi di ordinamento

ALBERI. Un Albero. Un grafo aciclico che non è un albero: due archi entranti in uno stesso nodo

Heap e code di priorità

Algoritmi e Strutture Dati. Alberi binari di ricerca

Alberi binari. Alberi binari di ricerca

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Spesso sono definite anche le seguenti operazioni:

Strutture dati Alberi binari

Prossime lezioni e tutorato!

Dizionari. Dizionari con gli alberi. Alberi binari di ricerca. Realizzazione con alberi binari di ricerca. Alberi rosso-neri.

Introduzione agli algoritmi Prova di esame del 30/6/2016 Prof.sse E. Fachini - R. Petreschi

QuickSort Università degli Studi di Milano

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

ADT ALBERO BINARIO (tree)) ADT ALBERO BINARIO

Ricerca con una chiave k Assumiamo l esistenza di un descrittore albero con i campi: albero.radice (=null per l albero vuoto) albero.dimensione (=0 pe

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Informatica 3. LEZIONE 15: Implementazione di alberi binari - BST. Modulo 1: Implementazione degli alberi binari Modulo 2: BST

ricerca di un elemento, verifica dell appartenenza di un elemento

Alberi Binari di Ricerca

Struttura dati Dizionario

Introduzione Implementazione (1)

Algoritmi e Strutture Dati. Alberi Bilanciati: Alberi Red-Black

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

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

Algoritmi e Strutture Dati

Informatica 3. Informatica 3. LEZIONE 27: Strutture ad albero avanzate. Lezione 27 - Modulo 1. Trie (1) Trie binario

Algoritmi e strutture dati

Alberi ed Alberi Binari

Alberi binari di ricerca

algoritmi e strutture dati alberi binari di ricerca (BST)

Informatica 3. Informatica 3. LEZIONE 23: Indicizzazione. Lezione 23 - Modulo 1. Indicizzazione. Introduzione. Indicizzazione:

Alberi binari di ricerca

Binary Search Trees (BST) Algoritmi sui BST. Algoritmi - Ricerca. Fondamenti di Informatica T2 Modulo 2. Università di Bologna A.A.

Alberi Binari di Ricerca

Transcript:

dizionari dizionari alberi bilanciati! ADT ce supportano le seguenti operazioni! membersip! ance detta searc! insert! delete! o remove! le liste e i BST sono dizionari maggio 2002 ASD2002 - Alberi bilanciati 2 dizionari/2 introduzione al bilanciamento! tutte le implementazioni finora considerate anno almeno un operazione di costo lineare w.c.t. (worst case time, tempo nel caso peggiore)! in molti casi un costo lineare è giudicato inaccettabile! strutture più efficienti?! alberi bilanciati! tavole as! nozione intuitiva di bilanciamento! tutti i rami di un albero anno approssimativamente la stessa lungezza! ciascun nodo interno a molti figli! caso ideale per un albero k-ario! ciascun nodo a 0 o k figli! la lungezza di due rami qualsiasi differisce di al più una unità maggio 2002 ASD2002 - Alberi bilanciati 3 maggio 2002 ASD2002 - Alberi bilanciati 4

bilanciamento perfetto bilanciamento perfetto/2 foglie 34 21 63 16 30 6 18 28 32 43 72 37 52 foglia + 1 nodo interno! un albero binario perfettamente bilanciato di n nodi a altezza lg 2 n +! " 1 se ogni nodo a 0 o 2 figli n f = n i +1 n f = # foglie n i = # nodi interni n = n f + n i le foglie sono circa il 50% dei nodi! facilmente generalizzabile ad alberi di arità k! ( k! 1) n + 1 n = ( k! 1) ni + 1 " n = f f k! costo di ricerca/inserimento/eliminazione O(log n)! ripetuti inserimenti/eliminazioni possono distruggere il bilanciamento! degrado delle prestazioni maggio 2002 ASD2002 - Alberi bilanciati 5 maggio 2002 ASD2002 - Alberi bilanciati 6 bilanciamento in altezza fattore di bilanciamento! un albero è bilanciato in altezza se le altezze dei sottoalberi sinistro e destro di ogni nodo differiscono di al più un unità! gli alberi bilanciati in altezza sono detti alberi AVL! da Adel son-vel skii & Landis, primi proponenti 34 21 63 16 30 6 18 28 32 43 72 37 52 3 29 57 in un albero bilanciato in altezza FDB! 1, per ogni nodo 78 fattore di bilanciamento (FDB): altezza sottoalbero dx altezza sottoalbero sx +1 0 maggio 2002 ASD2002 - Alberi bilanciati 7 maggio 2002 ASD2002 - Alberi bilanciati 8

alberi AVL? alberi di Fibonacci maggio 2002 ASD2002 - Alberi bilanciati 9! alberi AVL col minimo numero di nodi (fissata l altezza) F AVL 0 0 0 1 2 1 1 1 4 2 1 2 3 2 4 4 3 7 5 5 12 7 6 8 20 12 7 13 33 maggio 2002 ASD2002 - Alberi bilanciati 10 alberi di Fibonacci/2 alberi di Fibonacci/3 AVL i AVL i +1 alberi di Fibonacci alberi bilanciati di altezza i col minimo numero di nodi AVL i Relazioni AVL i = AVL i + AVL i +1 + 1 F i = F i + F i +1 AVL i = F i 1! un albero di Fibonacci a tutti i fattori di bilanciamento dei nodi interni pari a ± 1! è l albero bilanciato più vicino alla condizione di non bilanciamento! un albero di Fibonacci con n nodi a altezza < 1.44 lg(n ) 0.328! dimostrato da Adel son-vel skii & Landis " # un AVL di n nodi a altezza $(lg n) maggio 2002 ASD2002 - Alberi bilanciati 11 maggio 2002 ASD2002 - Alberi bilanciati 12

inserimento in AVL rotazioni negli AVL 1. inserire nuovo nodo come in un BST classico il nuovo nodo diviene una foglia 2. ricalcolare i fattori di bilanciamento ce sono mutati in seguito all inserimento solo nel ramo interessato all inserimento (gli altri fattori non possono mutare), dal basso verso l alto 3. se nel ramo appare un fattore di bilanciamento pari a ±2 occorre ribilanciare tramite rotazioni casi possibili! DD: inserimento nel sottoalbero destro di un figlio destro (del nodo ce si sbilancia)! SD: inserimento nel sottoalbero sinistro di un figlio destro (del nodo ce si sbilancia)! DS: inserimento nel sottoalbero destro di un figlio sinistro (del nodo ce si sbilancia)! SS: inserimento nel sottoalbero sinistro di un figlio sinistro (del nodo ce si sbilancia) maggio 2002 ASD2002 - Alberi bilanciati 13 maggio 2002 ASD2002 - Alberi bilanciati 14 rotazione semplice (caso DD)! gli antenati di non sono interessati all inserimento percé in seguito alla rotazione recuperano il loro fattore di bilanciamento precedente maggio 2002 ASD2002 - Alberi bilanciati 15 +1 rotazione doppia (caso SD) 0 0 R 0 +1 maggio 2002 ASD2002 - Alberi bilanciati 16 +1 R! gli antenati di non sono interessati all inserimento 0

rappresentazione nodo algoritmo inserimento /1 class AvlNode { Comparable element; AvlNode left; AvlNode rigt; int eigt; AvlNode(Comparable el) { tis(el, null, null); AvlNode(Comparable el, AvlNode lt,avlnode rt) { element = el; left = lt; rigt = rt; eigt = 0; maggio 2002 ASD2002 - Alberi bilanciati 17 AvlNode insert(comparable x, AvlNode t) { if(t == null) t = new AvlNode(x, null, null); else if(x.compareto(t.element) < 0) { t.left = insert(x, t.left); if(eigt(t.left) - eigt(t.rigt) == 2) if(x.compareto(t.left.element) < 0) t = rotatewitleftcild(t); // SS else t = doublewitleftcild(t); // DS else maggio 2002 ASD2002 - Alberi bilanciati 18 algoritmo inserimento /2 rotazione semplice (SS) else if(x.compareto(t.element) > 0) { t.rigt = insert(x, t.rigt); if(eigt(t.rigt) - eigt(t.left) == 2) if(x.compareto(t.rigt.element) > 0) t = rotatewitrigtcild(t); // DD else t = doublewitrigtcild(t); // SD else ; // Duplicate; do noting t.eigt=max(eigt(t.left),eigt(t.rigt))+1; return t; restituisce la nuova radice AvlNode rotatewitleftcild(avlnode k2) { AvlNode k1 = k2.left; k2.left = k1.rigt; k1.rigt = k2; k2.eigt = max(eigt(k2.left), eigt(k2.rigt)) + 1; k1.eigt = max(eigt(k1.left), k2.eigt ) + 1; return k1; maggio 2002 ASD2002 - Alberi bilanciati 19 maggio 2002 ASD2002 - Alberi bilanciati 20

rotazione doppia (SD) inserimento negli AVL/costo AvlNode doublewitrigtcild(avlnode k1){ k1.rigt=rotatewitleftcild(k1.rigt); return rotatewitrigtcild(k1);! passo 1: proporzionale all altezza dell albero $(lg n) " passo 2: proporzionale all altezza dell albero $(lg n) " passo 3: O(lg n) in totale: $(lg n) maggio 2002 ASD2002 - Alberi bilanciati 21 maggio 2002 ASD2002 - Alberi bilanciati 22 cancellazione negli AVL rotazione semplice 1. cancellare nodo come in un BST classico 2. ricalcolare i fattori di bilanciamento ce sono mutati in seguito alla cancellazione solo nel ramo interessato all inserimento (gli altri fattori non possono mutare), dal basso verso l alto 3. per ogni nodo con fattore di bilanciamento pari a ±2 occorre operare una rotazione semplice o doppia O(lg n) rotazioni nel caso peggiore! eliminazione foglia da sottoalbero sinistro di! il figlio destro a FDB +1; a), b) e c)! il figlio destro a FDB 0; d), e) ed f) maggio 2002 ASD2002 - Alberi bilanciati 23 maggio 2002 ASD2002 - Alberi bilanciati 24

rotazione doppia rotazione doppia/2! eliminazione foglia da sottoalbero sinistro di! FDB() = 1 e FDB(R)= 1; g), ) ed i)! rotazione R- ( resta a, R e vanno a +1) e rotazione -R! eliminazione foglia da sottoalbero sinistro di! FDB() =, FDB(R)=+1, j), k) ed l)! rotazione R- ( resta a, R va a e va a 0) e rotazione -R maggio 2002 ASD2002 - Alberi bilanciati 25 maggio 2002 ASD2002 - Alberi bilanciati 26 cancellazione negli AVL/costo cancellazione negli AVL/esempio! nel caso peggiore occorre effettuare rotazioni (semplici o doppie) lungo tutto il ramo! passo 1: proporzionale all altezza dell albero $(lg n) " passo 2: proporzionale all altezza dell albero $(lg n) animazione tratta dal sito Web ttp://www.seanet.com/users/arsen/avltree.tml " passo 3: $(lg n) $(1) in totale: $(lg n) maggio 2002 ASD2002 - Alberi bilanciati 27 maggio 2002 ASD2002 - Alberi bilanciati 28