algoritmi e strutture dati alberi binari di ricerca (BST)

Documenti analoghi
albero binario di ricerca Algoritmi e strutture dati albero binario di ricerca/3 albero binario di ricerca/2

Alberi ed Alberi Binari di Ricerca

Alberi binari di ricerca

Implementare un'interfaccia

Heap e Code di Priorità

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

Implementazione ADT: Alberi

Alberi binari di ricerca

Alberi Binario in Java

alberi tipo astratto, implementazione, algoritmi

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

argomenti alberi terminologia tipo di dato astratto albero tipo astratto, implementazione, algoritmi es.: radice R con n sottoalberi radice

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre

Albero Binario GT 7.3. interfacce di Positio<E>, Tree<E>, e BinaryTree<E>; il file TestLinkedBinaryTree.java

Alberi Binari di Ricerca (ABR)

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

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

Alberi binari e alberi binari di ricerca

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola

Esercitazione su Albero Binario

Alberi binari e alberi binari di ricerca

dizionari alberi bilanciati

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

heap concetti ed applicazioni

Alberi binari e alberi binari di ricerca

ricerca di un elemento, verifica dell appartenenza di un elemento

Per semplicità eliminiamo le ripetizioni nell'albero.

Alberi ( GT. 7 ) In informatica, un albero è un modello astratto con cui viene rappresentata una struttura gerarchica

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

Algoritmi e Strutture Dati

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

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Alberi. Albero binario. Un albero binario è un albero (ordinato) in cui ciascun nodo può avere al massimo due figli (figlio destro e figlio sinistro)

Albero in cui ogni nodo ha al più due figli. I figli di un nodo costituiscono una coppia ordinata

Alberi Binari di Ricerca

Introduzione Implementazione (1)

Strutture dati Alberi binari

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica

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

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

lezione 9 min-heap binario Heap e Alberi posizionali generali

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Alberi. Alberi: Esempio di utilizzo

Esercitazione 6. Alberi binari di ricerca

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

ADT albero binario completo

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

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.

Binari di Ricerca Binary. Alberi. Trees. Search. Damiano Macedonio Università Ca' Foscari di Venezia.

Struttura dati Dizionario

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi ed Alberi Binari

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z 28 giugno 2005 tempo a disposizione: 2 ore

Alberi binari di ricerca

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

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

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei

Algoritmi e strutture dati

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

Alberi Binari di Ricerca e Alberi Rosso-Neri

Espressioni aritmetiche

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

Algoritmi e Strutture Dati. Lezione 3

Algoritmi e strutture dati

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

Esercizi su alberi binari

Alberi binari e di ricerca. Parte 1 BST e GUI. Introduzione. 1. Minimo Antenato Comune. 2. Vistita in ampiezza

Problemi di ordinamento

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

Multi-way search trees

ricerca di un elemento, verifica dell appartenenza di un elemento

Laboratorio di Algoritmi e Strutture Dati

Esercitazione 5 Alberi Binari di Ricerca

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2

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

Alberi Binari di Ricerca

Alberi due-tre e alberi B

Alberi Binari di Ricerca

Lezione 12 Tabelle Hash

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

ALBERI. Angelo Di Iorio Università di Bologna

Liste concatenate. Collezione ordinata di nodi. Carlo Paolo Simona. Anna. ciascun nodo contiene due riferimenti:

Dati e Algoritmi 1: A. Pietracaprina. Alberi Binari

Note per la Lezione 4 Ugo Vaccaro

IMPLEMENTAZIONE DI UN ALBERO AVL

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

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

Algoritmi e Strutture di Dati

In questa lezione Alberi binari di ricerca

Alberi di ricerca binari

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

Alberi binari ( 7.3)

Le liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5

In questa lezione Alberi binari di ricerca: la cancellazione

Transcript:

algoritmi e strutture dati alberi binari di ricerca (BST)

concetto di chiave insieme di campi di un record che caratterizza l'intero record es.: {<nome>, <cognome>, <codicefiscale>, <datanascita>, <indirizzo>} il <codicefiscale> è una possibile chiave spesso in una struttura dati vengono memorizzate coppie (<chiave>, <riferimento>), in cui <riferimento> è un riferimento per l'accesso ad un insieme di informazioni maggio 2003 ASD 02-03 2

chiavi in Java le chiavi sono spesso realizzate come riferimenti Comparable solo se occorre poter stabilire ordinamenti fra chiavi talvolta, a scopo esemplificativo, si usano come chiavi stringhe o interi facilita la descrizione di una struttura dati maggio 2003 ASD 02-03 3

interface Comparable da: documentazione API JFC richiede metodo int compareto(object o) returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified Object o The implementor must ensure sgn(x.compareto(y)) == -sgn(y.compareto(x)) for all x and y. (This implies that x.compareto(y) must throw an exception iff y.compareto(x) throws an exception.) The implementor must also ensure that the relation is transitive: (x.compareto(y)>0 && y.compareto(z)>0) implies x.compareto(z)>0 Finally, the implementer must ensure that x.compareto(y)==0 implies that sgn(x.compareto(z)) == sgn(y.compareto(z)), for all z maggio 2003 ASD 02-03 4

interface Comparable /2 da: documentazione API JFC It is strongly recommended, but not strictly required that (x.compareto(y)==0) == (x.equals(y)). Generally speaking, any class that implements the Comparable interface and violates this condition should clearly indicate this fact. The recommended language is "Note: this class has a natural ordering that is inconsistent with equals" maggio 2003 ASD 02-03 5

albero binario di ricerca albero binario che soddisfa la seguente proprietà per ogni nodo, tutte le chiavi nel suo sottoalbero sinistro sono della chiave v associata al nodo e tutti le chiavi nel suo sottoalbero destro sono di v maggio 2003 ASD 02-03 6

albero binario di ricerca/2 49 49 22 82 22 82 17 57 88 17 47 88 20 ok 94 20 errato! 94 91 91 maggio 2003 ASD 02-03 7

albero binario di ricerca/3 indicato spesso come BST (binary search tree) utilizzabile quando le chiavi appartengono a un universo totalmente ordinato ipotesi semplificativa di lavoro: chiavi strettamente minori nei sottoalberi sinistri e strettamente maggiori nei sotto alberi destri maggio 2003 ASD 02-03 8

rappresentazione dei nodi in molti casi può essere la stessa usata negli alberi binari (classe BinaryNode) in alternativa, la si può estendere per le variabili membro possiamo usare lo specificatore di accesso private o protected le conseguenze sono differenti maggio 2003 ASD 02-03 9

rappresentazione collegata dei nodi public class BSTNode { protected Comparable key; BSTNode leftchild, rightchild; // rappr. minima public BSTNode() { } public BSTNode(Object el) { } public BSTNode(Object el, BSTNode lt, BSTNode rt) { } public void visit() { key.visit(); } public boolean isleaf() { } } maggio 2003 ASD 02-03 10

operazioni sui BST public interface BST { void clear(); boolean isempty(); BSTNode search(bstnode p, Comparable el); void insert(bstnode node); void remove(bstnode node); boolean isintree(comparable el); int getsize(); void inorder(bstnode p); void preorder(bstnode p); void postorder(bstnode p); void breadthfirst(); int treeheight(bstnode radice); } maggio 2003 ASD 02-03 11

altre operazioni sui BST BSTNode minimum(bstnode v); BSTNode maximum(bstnode v); BSTNode successor(bstnode v); BSTNode predecessor(bstnode v); maggio 2003 ASD 02-03 12

elementi o nodi? il metodo che implementa l operazione search può restituire elementi (Object) o nodi (BSTNode) Object viene rafforzato l incapsulamento variabili membro protected BSTNode operazioni su sottoalberi variabili membro private e metodi accessori/modificatori il dilemma vale anche per altri metodi successor, delete (parametro formale), maggio 2003 ASD 02-03 13

ricerca in un BST k(v) = chiave (tipo scalare) associata a nodo v rt(v) = figlio destro di v lt(v) = figlio sinistro di v algorithm search (key k, BSTNode root) if(root == null) return null; if(k == k(root)) return root; if (k < k(root)) return search(k, lt(root)); else return search(k, rt(root)); maggio 2003 ASD 02-03 14

ricerca in un BST/2 versione iterativa algorithm search (key k, BSTNode root) t = root; while(t!= null) if(k(t) > k) t = lt(t); else if(k(t) < k) t = rt(t); else return t; return null; in questo caso, la versione iterativa non richiede l'uso di una pila: perché? maggio 2003 ASD 02-03 15

costo della ricerca in un BST BST di n nodi caso peggiore O(n) caso medio dipende dalla distribuzione caso migliore O(1) (poco interessante) 49 21 52 56 54 67 77 75 83 maggio 2003 ASD 02-03 16

costo della ricerca in un BST/2 nel caso di distribuzione uniforme delle chiavi il valore atteso dell'altezza dell'albero è O(lg n) N.B. L'altezza di un albero binario di n nodi varia in { lg 2 n + 1,, n} un BST con chiavi uniformemente distribuite ha un costo atteso di ricerca O(lg n) maggio 2003 ASD 02-03 17

analisi del caso medio IPL (internal path length): somma lungh. percorsi radice-nodo, per tutti i nodi lungh. media percorso radice-nodo: IPL/(#nodi) maggio 2003 ASD 02-03 18

analisi del caso medio/2 supp. chiavi 1,,n presenti in un BST di n nodi (senza perdita di generalità) P n (i): lungh. percorso medio in BST di n nodi avente chiave i in radice (IPL/#nodi) P n : percorso medio in BST di n nodi (IPL/#nodi) se k(radice) = i allora sottoalbero sx ha i 1 chiavi sottoalbero dx ha n i chiavi P ( i ) n P n = = n i = (Pi 1 + 1)( i 1) + (Pn i + n P ( i ) 1 n =... = O(lgn) n 1)( n i ) maggio 2003 ASD 02-03 19

ricerca predecessore in BST data una chiave a, trovare la chiave b = pred(a), ovvero la più grande fra le chiavi < a operazione sfruttata nell'algoritmo di eliminazione dove si trova b rispetto a? se esiste sottoalbero sinistro si trova in tale sottoalbero se non esiste sottoalbero sinistro si trova sul percorso radice nodo contenente a maggio 2003 ASD 02-03 20

ricerca predecessore in BST /2 cerchiamo pred(k(u)) nel sottoalbero di radice u non può essere nel sottoalbero del figlio destro (chiavi > k(u)) il max nel sottoalbero del figlio sinistro è un candidato si tratta del "nodo più a destra", individuabile scendendo sempre a destra in tale sottoalbero, fino a trovare un nodo senza figlio destro x u w v non qui maggio 2003 ASD 02-03 21

ricerca predecessore in BST /3 cerchiamo pred(k(u)) "altrove" non può essere fuori dal percorso radice u (per le proprietà del BST) il miglior candidato di tale percorso è < del candidato nel sottoalbero sinistro di u (per le proprietà del BST) u maggio 2003 ASD 02-03 22

ricerca predecessore in BST /4 algorithm predecessor (key a, BSTNode root) t = root; pred = - ; while(t!= null) if(k(t) >= a) t = lt(t); else if(k(t) < a) { // discese a destra aumentano chiave pred = k(t); t = rt(t); } return pred; // se non esiste maggio 2003 ASD 02-03 23

ricerca predecessore in BST /5 costo ricerca predecessore proporzionale all'altezza dell'albero nel caso peggiore O(n) la ricerca del successore può essere gestita "simmetricamente" costo O(n) maggio 2003 ASD 02-03 24

inserimento in un BST nuovo nodo u viene inserito come foglia fase 1: cerca il nodo genitore v fase 2: inserisci u come figlio di v maggio 2003 ASD 02-03 25

inserimento in un BST/2 Algorithm insert(key r) p = root; while (p!= null) { prev = p; if (k(p) < r) p = rt(p); else p = lt(p); } if (root == null) // BST vuoto root = new BSTNode(r); else if (k(prev) < r) rt(prev) = new BSTNode(r); else lt(prev) = new BSTNode(r); fase 1 fase 2 maggio 2003 ASD 02-03 26

inserimento in un BST/3 la fase 1 termina quando si raggiunge un nodo del BST privo del figlio in cui avrebbe avuto senso continuare la ricerca non necessariamente una foglia è il nodo inserito che diviene foglia la fase 2 si limita a collegare una nuova foglia 60 49 21 52 56 54 67 60 77 75 83 maggio 2003 ASD 02-03 27

inserimento in un BST/4 caso peggiore costo fase 1: O(n ) costo fase 2: O(1) costo totale: O(n ) caso medio (distrib. unif.) costo fase 1: O(lg n ) costo fase 2: O(1) costo totale: O(lg n ) 49 21 52 56 54 67 60 77 75 83 maggio 2003 ASD 02-03 28

costo dell'inserimento in un BST ogni inserimento introduce una nuova foglia il costo è (proporzionale a) la lunghezza del ramo radice-foglia nteressato all'operazione nel caso peggiore: O(n) maggio 2003 ASD 02-03 29

cancellazione da un BST tre casi 1. cancellazione di una foglia 2. cancellazione di un nodo con un solo figlio 3. cancellazione di un nodo con due figli maggio 2003 ASD 02-03 30

cancellazione da un BST/2 1. cancellazione di una foglia individuare nodo genitore e metterne a null la variabile membro opportuna (leftchild o rightchild); se foglia = radice (unico nodo) mettere a null il riferimento alla radice individuare genitore significa effettuare una ricerca (come nella fase 1 dell'inserimento) un approccio alternativo è basato sulla tramatura dell'albero (i nodi contengono altri riferimenti, ad es., al genitore) maggio 2003 ASD 02-03 31

cancellazione da un BST/3 cancellazione di 83 49 49 49 21 52 21 52 21 52 56 56 56 54 67 54 67 54 67 60 77 60 77 60 77 75 83 75 83 75 maggio 2003 ASD 02-03 32

cancellazione da un BST/4 2. cancellazione di un nodo u con un solo figlio v individuare genitore w di u; se u è radice v diviene la nuova radice se esiste w, sostituire al collegamento (w,u) il collegamento (w,v) w w w w v u v u v u v u maggio 2003 ASD 02-03 33

cancellazione da un BST/5 cancellazione di 52 49 49 49 21 52 21 52 21 56 56 56 54 67 54 67 54 67 60 77 60 77 60 77 75 75 75 maggio 2003 ASD 02-03 34

cancellazione da un BST/6 3. cancellazione di un nodo u con due figli (ci si riconduce ad uno dei casi precedenti) individuare predecessore v (o successore) di u v non può avere due figli, altrimenti non sarebbe predecessore (successore) copiare la chiave di v al posto di quella di u cancellare nodo v v è foglia oppure ha un solo figlio: caso già trattato maggio 2003 ASD 02-03 35

copia chiave cancellazione da un BST/7 u u u u w v w v cancella v w v w maggio 2003 ASD 02-03 36

costo della cancellazione in un BST la cancellazione di un nodo interno richiede l'individuazione del nodo da cancellare nonché del suo predecessore (o successore) nel caso peggiore entrambi i costi sono lineari: O(n) + O(n) = O(n) da cancellare u v n/2 n/2 predecessore maggio 2003 ASD 02-03 37