Alberi di ricerca binari



Documenti analoghi
Algoritmi e Strutture Dati

Alberi binari di ricerca

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

Alberi binari di ricerca

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

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

Alberi Binari di Ricerca

Alberi Binari di Ricerca

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca

Lezione 15. Algoritmi su gli alberi binari: visite

Algoritmi e Strutture Dati

Alberi Binari di Ricerca

Alberi Binari di Ricerca e Alberi Rosso-Neri

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

Strutture dati Alberi binari

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

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

Alberi binari di ricerca

Algoritmi e strutture dati

Alberi Binari di Ricerca

Multi-way search trees

Esercitazione 6. Alberi binari di ricerca

ricerca di un elemento, verifica dell appartenenza di un elemento

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

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

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

ricerca di un elemento, verifica dell appartenenza di un elemento

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

Algoritmi e Strutture Dati

Algoritmi e Strutture di Dati

23/10/2016. gli alberi. alcune definizioni. un esempio. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica.

algoritmi e strutture di dati

Alberi binari di ricerca

Alberi rosso neri. API a.a. 2013/2014 Gennaio 23, 2014 Flavio Mutti, PhD

Alberi rosso-neri. Oltre ad essere alberi binari di ricerca, gli alberi rosso-neri soddisfano le seguenti proprietà:

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

Alberi Rosso-Neri: definizione

Algoritmi e Strutture Dati

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

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

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

Alberi ed Alberi Binari di Ricerca

Alberi Binari di Ricerca: Definizione. Ricerca, inserimento, cancellazione, min, max, predecessore, successore.

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

In questa lezione Alberi binari di ricerca

Heap e code di priorità

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

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

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

Alberi rosso-neri. Le operazioni sugli alberi binari di ricerca hanno complessità proporzionale all altezza h dell albero.

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

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

Algoritmi e Strutture Dati

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

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

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

In questa lezione Alberi binari di ricerca: la cancellazione

Algoritmi e Strutture Dati

Esempi. Albero di interi. Struttura che non è un albero!

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

alberi binari di ricerca (BST)

Algoritmi e strutture dati

Indici con gli alberi

ADT Coda con priorità

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.

QuickSort Università degli Studi di Milano

Problemi di ordinamento

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

In questa lezione. Alberi binari: [CLRS09] cap. 12 per la visita inorder. visite e esercizi su alberi binari. Prof. E. Fachini - Intr. Alg.

Alberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati

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

Spesso sono definite anche le seguenti operazioni:

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

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

Introduzione Implementazione (1)

dizionari alberi bilanciati

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

Algoritmi e Strutture Dati

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

Algoritmi, Strutture Dati e Programmi. UD 3.d: Strutture Dati Dinamiche Alberi

Struttura dati Dizionario

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

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

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati

Alberi Bilanciati di Ricerca

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis

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

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

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

Alberi binari. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Algoritmi e Strutture Dati. Lezione 3

Transcript:

Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Introduzione Gli alberi di ricerca binari (Binary Search Tree, o BST) sono una struttura di dati che supporta in modo efficiente le operazioni SEARCH, MINIMUM, MAXIMUM, PREDECESSOR, SUCCESSOR, INSERT, DELETE. Sono utili come implementazione di dizionari o di code prioritarie. A.A. 2001/2002 APA-bst 2 1

Obiettivi I BST sono definiti in modo tale che le operazioni abbiano una complessità proporzionale all altezza h dell albero. Per un albero completo e bilanciato con n nodi, la complessità è quindi Θ(log n) nel caso peggiore. Per un albero totalmente sbilanciato, invece, si ricade nel caso peggiore O(n). Per un albero casuale ci si aspetta Θ(log n). A.A. 2001/2002 APA-bst 3 Definizione Albero binario di ricerca:! Albero: struttura gerarchica con una radice. Esiste un solo percorso dalla radice a ciascun nodo. Tale percorso definisce delle relazioni padre-figlio! Binario: ogni nodo ha al più 2 figli (left e right) e (salvo la radice) esattamente un padre (p)! Ricerca: i nodi hanno un campo chiave key, e sono ordinati in base ad esso A.A. 2001/2002 APA-bst 4 2

Relazione di ordinamento (I) Per ciascun nodo x vale che:! Per tutti i nodi y nel sottoalbero sinistro di x, key[y] key[x]! Per tutti i nodi y nel sottoalbero destro di x, key[y] key[x] A.A. 2001/2002 APA-bst 5 Relazione di ordinamento (II) x x x A.A. 2001/2002 APA-bst 6 3

Esempio 5 3 7 2 5 8 A.A. 2001/2002 APA-bst 7 Esempio (meno efficiente) 2 3 7 5 8 5 A.A. 2001/2002 APA-bst 8 4

Attraversamenti Dato un BST, è possibile definire delle operazioni di attraversamento, ossia di visita di tutti i nodi, secondo 3 ordini diversi:! Preorder: prima il nodo, poi i due sottoalberi! Inorder: prima il sottoalbero sinistro, poi il nodo, poi il sottoalbero destro! Postorder: prima i due sottoalberi, poi il nodo A.A. 2001/2002 APA-bst Attraversamento Preorder Preorder-Tree-Walk(x) 1 if x NIL 2 then print key[x] 3 Preorder-Tree-Walk(left[x]) 4 Preorder-Tree-Walk(right[x]) A.A. 2001/2002 APA-bst 10 5

Attraversamento Inorder Inorder-Tree-Walk(x) 1 if x NIL 2 then Inorder-Tree-Walk(left[x]) 3 print key[x] 4 Inorder-Tree-Walk(right[x]) A.A. 2001/2002 APA-bst 11 Attraversamento Postorder Postorder-Tree-Walk(x) 1 if x NIL 2 then Postorder-Tree-Walk(left[x]) 3 Postorder-Tree-Walk(right[x]) 4 print key[x] A.A. 2001/2002 APA-bst 12 6

Osservazioni Nel caso di un BST T, l attraversamento Inorder (ottenuto chiamando Inorder-Tree- Walk(root[T])) stampa gli elementi nell ordine crescente del campo key. Tutti gli attraversamenti hanno complessità Θ(n), in quanto ciascun nodo viene considerato esattamente una volta. A.A. 2001/2002 APA-bst 13 Esempio 15 6 18 3 7 17 20 2 4 13 A.A. 2001/2002 APA-bst 14 7

Esercizio Si fornisca il risultato della visita in Preorder, Inorder, Postorder sul BST visto in precedenza. A.A. 2001/2002 APA-bst 15 Soluzione (Inorder) 15 8 6 18 4 10 3 7 17 20 2 5 11 2 4 13 1 3 7 6 A.A. 2001/2002 APA-bst 16 8

3 Soluzione (Preorder) 1 15 2 6 18 3 6 7 17 20 10 11 7 2 4 13 4 5 8 A.A. 2001/2002 APA-bst 17 Soluzione (Postorder) 11 15 10 6 7 18 6 3 3 7 17 8 20 2 2 1 5 4 13 4 A.A. 2001/2002 APA-bst 18

Esercizio proposto Si definiscano le strutture dati per la rappresentazione di un BST. Si definiscano i prototipi e si implementino le funzioni di visita dell albero. A.A. 2001/2002 APA-bst 1 Operazioni di ricerca nei BST I BST sono particolarmente ottimizzati per le funzioni di ricerca: Search, Minimum/Maximum, Predecessor/Successor. La loro complessità è O(h), in funzione dell altezza h dell albero. A.A. 2001/2002 APA-bst 20 10

Tree-Search Tree-Search(x, k) 1 if x = NIL or k = key[x] 2 then return x 3 if k < key[x] 4 then return Tree-Search(left[x], k) 5 else return Tree-Search(right[x], k) A.A. 2001/2002 APA-bst 21 Esempio 15 6 18 3 7 17 20 2 4 13 Tree-Search(13) A.A. 2001/2002 APA-bst 22 11

Tree-Search iterativa Tree-Search-iterativa(x, k) 1 while x NIL and k key[x] 2 do if k < key[x] 3 then x left[x] 4 else x right[x] 5 return x A.A. 2001/2002 APA-bst 23 Esempio 15 6 18 3 7 17 20 2 4 13 Tree-Search-iterativa(13) A.A. 2001/2002 APA-bst 24 12

Minimo e massimo (versioni iterative) Tree-Minimum(x) 1 while left[x] NIL 2 do x left[x] 3 return x 15 6 18 3 7 17 20 2 4 13 Tree-Maximum(x) 1 while right[x] NIL 2 do x right[x] 3 return x 15 6 18 3 7 17 20 2 4 13 A.A. 2001/2002 APA-bst 25 Successore Dato un nodo, determinare il nodo immediatamente successivo. Vi sono 2 casi: Il minimo del sottoalbero di destra p[x] p[x] x x Il primo padre di cui il nodo è nel sottoalbero sinistro A.A. 2001/2002 APA-bst 26 13

Successore Tree-Successor(x) 1 if right[x] NIL 2 then return Tree-Minimum(right[x]) 3 y p[x] 4 while y NIL and x = right[y] 5 do x y 6 y p[y] 7 return y A.A. 2001/2002 APA-bst 27 Esempio 15 6 18 3 7 17 20 2 4 13 Tree-Successor(7) A.A. 2001/2002 APA-bst 28 14

Esempio 15 6 18 3 7 17 20 2 4 13 Tree-Successor(7) A.A. 2001/2002 APA-bst 2 Esempio 15 6 18 3 7 17 20 2 4 13 Tree-Successor(4) A.A. 2001/2002 APA-bst 30 15

Esempio 15 6 18 3 7 17 20 2 4 13 Tree-Successor(4) A.A. 2001/2002 APA-bst 31 Predecessore Tree-Predecessor(x) 1 if left[x] NIL 2 then return Tree-Maximum(left[x]) 3 y p[x] 4 while y NIL and x = left[y] 5 do x y 6 y p[y] 7 return y A.A. 2001/2002 APA-bst 32 16

Complessità La complessità di tutte le procedure di ricerca è O(h). A.A. 2001/2002 APA-bst 33 Esercizio proposto Si implementino in C le procedure di ricerca nel BST precedentemente definito. A.A. 2001/2002 APA-bst 34 17

Inserimento e cancellazione Queste operazioni richiedono di modificare la struttura dati, aggiungendo o togliendo nodi, mantenendo la proprietà di ordinamento propria del BST. A.A. 2001/2002 APA-bst 35 Inserimento Dato un BST, inserire un nodo z di chiave v:! Si crea un nuovo nodo z, con left[z]=right[z]=nil! Si trova la posizione in cui inserirlo, simulando la ricerca di key[z]! Si aggiornano i puntatori Il nuovo nodo è sempre inserito come una nuova foglia. A.A. 2001/2002 APA-bst 36 18

Tree-Insert (I) Tree-Insert(T, z) 1 y NIL 2 x root[t] 3 while x NIL 4 do y x 5 if key[z]<key[x] 6 then x left[x] 7 else x right[x] Ricerca key[z] nell albero A.A. 2001/2002 APA-bst 37 y x=nil z Tree-Insert (II) Inserisce z 8 p[z] y come figlio di y if y = NIL 10 then root[t] z 11 else if key[z] < key[y] 12 then left[y] z 13 else right[y] z A.A. 2001/2002 APA-bst 38 y x=nil z 1

Esempio 12 5 18 2 15 20 17 Tree-Insert(13) 13 z A.A. 2001/2002 APA-bst 3 Esempio 12 5 18 y 2 15 20 x 13 17 Tree-Insert(13) 13 z A.A. 2001/2002 APA-bst 40 20

Esempio 12 5 18 y 2 15 20 17 Tree-Insert(13) 13 z A.A. 2001/2002 APA-bst 41 Esercizio proposto Si implementi la funzione di inserimento. Si testi il programma completo leggendo un insieme di elementi da file, e compiendo una serie di ricerche su di essi. A.A. 2001/2002 APA-bst 42 21

Cancellazione La cancellazione è l operazione più complessa sui BST, in quanto il nodo da cancellare potrebbe avere 0, 1 o 2 figli, e occorre ricollegare i nodi rimasti in assenza di quello cancellato. A.A. 2001/2002 APA-bst 43 Casi possibili: 0 figli 12 15 5 16 3 12 20 z 10 13 18 23 6 12 15 5 16 3 12 20 6 10 18 23 7 Se z non ha figli, è 7 sufficiente rimuoverlo A.A. 2001/2002 APA-bst 44 22

Casi possibili: 1 figlio 12 15 5 16 z 5 12 15 3 12 20 6 10 13 18 23 3 12 20 10 13 18 23 6 7 Se z ha un figlio, questo diviene il nuovo figlio del padre di z A.A. 2001/2002 APA-bst 45 7 Casi possibili: 2 figli (I) z 12 15 5 16 z 12 15 5 16 3 12 20 6 10 13 18 23 3 12 20 10 13 18 23 6 7 7 Se z ha 2 figli, si elimina il suo successore e si copia il successore nella posizione di z A.A. 2001/2002 APA-bst 46 23

Tree-Delete (I) 12 y x Tree-Delete(T, z) 1 if left[z]=nil or right[z]=nil 2 then y z 3 else y Tree-Successor(z) 4 if left[y] NIL 5 then x left[y] 6 else x right[y] y: nodo da eliminare x: unico figlio di y A.A. 2001/2002 APA-bst 47 Tree-Delete (II) 12 y x 7 if x NIL 8 then p[x] p[y] if p[y] = NIL 10 then root[t] = x 11 else if y = left[p[y]] 12 then left[p[y]] x 13 else right[p[y]] x Aggiorna padre di x y è la radice? x diviene radice Se no, collega x al padre di y A.A. 2001/2002 APA-bst 48 24

Tree-Delete (III) 14 if y z 15 then key[z] key[y] 16 fields[z] fields[y] 17 return y Eventualmente, ricopia le informazioni del successore nel nodo da eliminare A.A. 2001/2002 APA-bst 4 Esercizio proposto (opzionale) Si implementi la funzione di cancellazione di un nodo da un BST. A.A. 2001/2002 APA-bst 50 25

Complessità La complessità di tutte le procedure di modifica dell albero (inserimento e cancellazione) è O(h). A.A. 2001/2002 APA-bst 51 Bilanciamento Le operazioni hanno complessità O(h):! Un albero completamente bilanciato ha! h = log 2 n! Un albero completamente sbilanciato ha! h = n! Le operazioni sui BST hanno complessità variabile tra O(log 2 n) e O(n) A.A. 2001/2002 APA-bst 52 26

Esercizio Si vuole costruire un BST contenente gli elementi interi da 0 a.! Si fornisca almeno una sequenza di chiamate alla funzione Insert che crei un BST bilanciato! Si fornisca almeno una sequenza di chiamate alla funzione Insert che crei un BST sbilanciato A.A. 2001/2002 APA-bst 53 Soluzione (I) 6 3 8 1 5 7 0 2 4 Insert() nell ordine: 6, 3, 0, 2, 5, 4, 8, 7, A.A. 2001/2002 APA-bst 54 27

Soluzione (II) 0 1 2 3 4 5 6 7 8 Insert() nell ordine:, 8, 7, 6, 5, 4, 3, 2, 1, 0 A.A. 2001/2002 APA-bst 55 Esercizio proposto Si sperimenti la costruzione di BST a partire da file diversamente ordinati, in modo da generare alberi bilanciati e sbilanciati, e si confrontino i tempi di esecuzione delle procedure di ricerca nei due casi. A.A. 2001/2002 APA-bst 56 28

Alberi bilanciati Le procedure Insert e Delete sono in grado di mantenere la proprietà di orientamento dei BST, ma non garantiscono affatto il bilanciamento. Esistono versioni più sofisticate degli alberi binari nelle quali viene garantito anche il bilanciamento. Esempio: alberi red-black. A.A. 2001/2002 APA-bst 57 Alberi red-black Soddisfano le seguenti proprietà:! Ogni nodo è red oppure black! Le foglie (NIL) sono tutte black! Se un nodo è red, i suoi figli sono black (ma non viceversa)! Ogni cammino tra un nodo ed una foglia ad esso discendente contiene lo stesso numero di nodi black Si dimostra che: h 2 log(n+1) A.A. 2001/2002 APA-bst 58 2