Binary Search Trees ( 10.1)

Documenti analoghi
Implementazione con alberi binari di ricerca

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

Multi-way search trees

ADT albero binario completo

Bilanciamento Alberi Binari di Ricerca

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

IMPLEMENTAZIONE DI UN ALBERO AVL

Esercizio. Strutture Dati

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

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

Alberi binari di ricerca

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

Esercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati

Alberi binari ( 7.3)

Implementazione ADT: Alberi

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

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

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

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

Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree

Alberi binari di ricerca

Corso: Strutture Dati Docente: Annalisa De Bonis

Alberi binari e alberi binari di ricerca

Dati e Algoritmi 1: A. Pietracaprina. Alberi Binari

Alberi binari e alberi binari di ricerca

Informatica 3. LEZIONE 17: Alberi generici. Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza

Alberi Binari di Ricerca

L ADT Priority Queues Implementazione di PQ mediante Sequenza Alberi Heap Heap Sort Adaptable Priority Queues

Alberi binari e alberi binari di ricerca

Problemi di ordinamento

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

Alberi. Alberi: Esempio di utilizzo

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

lezione 9 min-heap binario Heap e Alberi posizionali generali

Alberi binari di ricerca

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

Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Templates C++ ed Alberi di Ricerca

Algoritmi e Strutture Dati

ADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati

Introduzione Implementazione (1)

Algoritmi e Strutture Dati

Dati e Algoritmi 1: A. Pietracaprina. Mappa/Dizionario (I parte)

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

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

Informatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico.

Esercitazione 6. Alberi binari di ricerca

Il TDA BinaryTree. Albero Binario. Albero sintattico. Applicazioni. Albero delle decisioni binario. Albero binario di ricerca

Algoritmi e Strutture Dati. Alberi

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

Binary Search Trees (BST)

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

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.

Algoritmi e Strutture Dati

Espressioni aritmetiche

Alberi di ricerca binari

Informatica 3. Informatica 3. LEZIONE 14: Alberi binari: introduzione. Lezione 14 - Modulo 1. Definizioni. Introduzione. Definizioni e proprietà

Il TDA Map. Tabelle hash

Definizione informale. Il TDA Map memorizza coppie formate da una chiave k e da un valore v. La coppia è chiamata entry. Ogni chiave deve essere unica

Il TDA Map. Definizione informale. I metodi del TDA Map 2. I metodi del TDA Map 1. Interfaccia Map 1 NO_SUCH_KEY. Tabelle hash

Algoritmi e strutture dati

Attraversamento di un albero (binario)

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

Alberi Binari di Ricerca

Struttura dati Dizionario

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

Strutture dati Alberi binari

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

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

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

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)

ALBERI BINARI DI RICERCA

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 Binario in Java

In questa lezione Alberi binari di ricerca: la cancellazione

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Laboratorio di algoritmi e strutture dati

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

Alberi binari di ricerca

heap concetti ed applicazioni

Algoritmi e Strutture Dati. Alberi

come segue: data una collezione C di elementi e una un elemento che verifica la proprietà P

Algoritmi e Strutture Dati Laboratorio 20/10/2008. Prof. Pier Luca Lanzi

Esercizi Capitolo 6 - Alberi binari di ricerca

Per semplicità eliminiamo le ripetizioni nell'albero.

Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi. Parte prima

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

Lezione 12 Tabelle Hash

Alberto Montresor Università di Trento

Alberi Binari di Ricerca e Alberi Rosso-Neri

QuickSort Università degli Studi di Milano

Heap e code di priorità

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Transcript:

Binary Search Trees ( 10.1) Binary Search Trees AVL Trees Multy-ay Search Trees < > 1 4 = (,4) Trees External Searching Red-Black Trees 1 Dictionary ADT (.3) L ADT dizionario (Dictionary ADT) modella una collezione di coppie (key, element), dette entry, su cui sono possibili operazioni di ricerca Le operazioni principali di un dizionario sono la ricerca, l inserimento e la rimozione di entry Sono consentiti più entry distinte con lo stesso valore della key Due tipi dizionari: Unordered Ordered 1

Dictionary ADT (.3) Metodi dell ADT Dictionary: find (k): ritorna l entry con il valore di chiave k, se esiste, altrimenti ritorna null findall (k): ritorna una collezione iterable su tutte le entry con chiave k insert (k, v): inserisce e ritorna l entry (k, v) remove (e): rimuove l entry e dal dizionario entries (): ritorna una collezione iterable di entries size () isempty () 3 Ordered Dictionaries (.5.) Si suppone che sia definito un ordinamento totale sulle chiavi Nuove operazioni basate sull ordinamento: first (): la prima entry nel dizionario rispetto all ordinamento last (): l ultima entry nel dizionario rispetto all ordinamento successors (k): ritorna un iteratore sulle entries con chiavi maggiori_di od eguali a k: ordinamento non decrescente predecessors (k): ritorna un iteratore sulle entries con chiavi minori di o eguali a k: ordinamento non crescente 4

Binary Search (.3.3) L algoritmo di Ricerca Binaria può essere utilizzato per l operazione find(k) se il dizionario è implementato come una sequenza basata su array ordinata rispetto alle chiavi: ad ogni passo, la cardinalità dell insieme su cui effettuare la ricerca è dimezzata l algoritmo termina dopo O(log n) passi Esempio: find(7) 0 l 0 l 0 0 1 3 4 5 7 11 14 1 1 1 m h 1 3 4 5 7 11 14 1 1 1 m h 1 3 4 5 7 11 14 1 1 1 l m h 1 3 4 5 7 11 14 1 1 1 l=m =h 5 Search Tables (.3.3) Una search table è un dizionario implementato mediante una sequenza ordinata Le entries del dizionario vengono memorizzate in una sequenza basata su array e ordinata rispetto ai valori delle chiavi per confrontare le chiavi viene usato un comparator esterno Performance: find richiede O(log n) time, usando la ricerca binaria insert richiede O(n) time, poiché mediamente è necessario spostare n/ items per far posto alla nuova entry remove richiede O(n) time, poiché mediamente è necessario spostare n/ entry per compattare le entries dopo la rimozione 3

Binary Search Trees ( 10.1) Un binary search tree è un binary tree in cui i nodi interni contengono le entries (key, value) e che soddisfa alle seguente proprietà d ordine totale: se u, v, e sono tre nodi dell albero tali che u è nel sottoalbero sinistro di v e è nel sottoalbero destro di v risulta key(u) key(v) key() I nodi esterni non contengono entries Un attraversamento nell in-ordine di un albero binario di ricerca visita le chiavi in ordine non decrescente v u 1 4 7 Algoritmo di Search ( 10.1.1) Per cercare una chiave k, si percorre un cammino che inizia nella radice e scende verso i nodi esterni dell albero Il nodo successivo da visitare è determinato dall esito del confronto della chiave k con la chiave del nodo corrente Se la chiave non è presente nell albero la ricerca ha termine in un nodo esterno, Esempio: find(4): TreeSearch(4,root) Algorithm TreeSearch(k, v) if T.isExternal (v) return v if k < key(v) return TreeSearch(k, T.left(v)) 1 4 else if k > key(v) return TreeSearch(k, T.right(v)) else // k = key(v) return v 4

Algoritmo di Search iterativo ( 10.1.1) Equivalente algoritmo iterativo per la ricerca: Algorithm TreeSearch(k, v) hile (! T.isExternal (v) ) if k < key(v) v= T.left(v) else if k > key(v) v= T.right(v) else break; // k = key(v) return v 1 4 Analisi complessità di Search Nel caso più sfavorevole (chiave non trovata) la lunghezza del cammino percorso è pari all altezza h dell albero il numero di operazioni primitive effettuate in corrispondenza ad ogni chiamata ricorsiva (ad ogni nodo visitato) è costante, O(1) il cammino di ricerca più lungo ha al massimo h+1 nodi per cui il costo totale è O(h) con O(log n) < h < O(n) Height h Tree T Time per level O(1) O(1) O(1) Total time: O(h) 10 5

Inserimento ( 10.1.) Per eseguire insert(k, e), si cerca la chiave k usando TreeSearch Si assume che la chiave k non sia già nell albero, e che sia il nodo esterno in cui ha termine la ricerca Si inserisce k nel nodo e si trasforma in nodo interno Esempio: insert 5 < > 1 4 > 1 4 5 11 Algoritmo di Inserimento Algorithm TreeInsert( k, x, v ) Input: k chiave di ricerca, x valore associato a k, v un nodo di T Output: un nuovo nodo nel sottoalbero T(v) contenente l entry (k,x) TreeSearch(k,v) if k = key() then return TreeInsert(k, x, T.left(v)) T.insertAtExternal (, (k, x) ) return insertatexternal (v, e) : trasforma il nodo esterno v in un nodo interno contenente l entry e 1

Rimozione ( 10.1.) Per poter effettuare l operazione di remove(k), dobbiamo prima cercare la chiave k nell albero Supponiamo che la chiave k sia nell albero e che v sia il nodo contenente k Se il nodo v ha come figlio sinistro (destro) un nodo esterno, rimuoviamo v e dall albero con il metodo removeexternal() Esempio: remove 4 < > 1 4 v 5 1 5 13 Rimozione (cont.) Consideriamo il caso in cui la chiave k da rimuovere è contenuta in un nodo v i cui figli sono entrambi nodi interni: cerchiamo il nodo successore nell inordine del nodo v copiamo key() nel nodo v rimuoviamo il nodo e il suo figlio sinistro z (che deve essere un nodo esterno) mediante l operazione removeexternal(z) Esempio: remove 3 1 3 v 1 5 v z 5 14 7

Prestazioni Consideriamo un dizionario con n items implementato mediante un albero binario di ricerca di altezza h lo spazio utilizzato è O(n) i metodi find, insert e remove richiedono O(h) time L altezza h è O(n) nel caso più sfavorevole e O(log n) nel caso più favorevole 15 Implementazione Binary Search Tree Richiamo: LocationAareEntry BSTEntry implements Entry BinarySearchTree extends LinkedBinaryTree Metodi di servizio: checkkey treesearch per find, findall, insert insertatexternal removeexternal 1

Estende la classe LinkedBinaryTree public class BinarySearchTree<K,V> extends LinkedBinaryTree<Entry<K,V>> implements Dictionary<K,V> { protected Comparator<K> C; //comparator // actionpos : insertion node or parent of removed node protected Position<Entry<K,V>> actionpos; protected int numentries = 0; //number of entries public BinarySearchTree ( Comparator<K> c ) { //costruttore C = c; addroot(null); 17 Estende la classe LinkedBinaryTree T (BinarySearchTree) BinarySearchTree extends LinkedBinaryTree actionpos numentries C root size LinkedBinaryTree ExternalNode Oggetto Comparator 1

Location-aare BSTEntry // Nested class for location-aare binary search tree entries protected static class BSTEntry<K,V> implements Entry<K,V> { protected Kkey; b protected Vvalue; protected Position<Entry<K,V>> pos; //....... public K getkey() { return key; public V getvalue() { return value; public Position<Entry<K,V>> position() { return pos; c 1 Metodi di accesso // Extract the key of the entry at a given node of the tree protected Kkey(Position<Entry<K,V>> position) { return position.element() ).getkey(); protected Vvalue(Position<Entry<K,V>> position) { return position.element() ).getvalue(); protected Entry<K,V> entry (Position<Entry<K,V>> position) { return position.element(); p protected void replaceentry( Position<Entry<K,V>> p, Entry<K,V> ent) { ( (BSTEntry<K,V>) ent).pos = p; replace(p, ent); g 5 e ent 0 10

Metodi ausiliari //Auxiliary method for inserting an entry at an external node protected Entry<K,V> insertatexternal ( Position<Entry<K,V>> v, Entry<K,V> e ) { expandexternal(v,null,null); //metodo ereditato replace(v, e); numentries++; return e; //Auxiliary method for removing an external node and its parent protected void removeexternal ( Position<Entry<K,V>> v ) { removeaboveexternal(v); //metodo ereditato numentries--; 1 Metodi ausiliari //Auxiliary method used by find, insert, and remove protected Position<Entry<K,V>> treesearch ( K key, Position<Entry<K,V>> pos ) { if ( isexternal(pos) ) return pos; //key not found else { K curkey = key( pos ); int comp = C.compare(key, curkey); if (comp < 0) return treesearch(key, left(pos)); //left subtree else if (comp > 0) return treesearch(key, right(pos)); //right subtree return pos; //return internal node here key is found 11

Metodo find public Entry<K,V> find (K key) thros InvalidKeyException { checkkey(key); //may thro an InvalidKeyException Position<Entry<K,V>> curpos = treesearch( key, root() ); actionpos = curpos; //node here the search ended if ( isinternal(curpos) ) return entry(curpos); return null; 3 Metodo insert public Entry<K,V> insert ( K k, V x ) thros InvalidKeyException { checkkey(k); //may thro an InvalidKeyException Position<Entry<K,V>> inspos = treesearch (k, root()); hile (! isexternal ( inspos ) ) // iterative search for insert pos inspos = treesearch (k, left(inspos)); actionpos = inspos; //node here the ne entry is being inserted return insertatexternal (inspos, ne BSTEntry (k, x, inspos) ); 4 1

Metodo remove (1/) public Entry<K,V> remove (Entry<K,V> ent) thros InvalidEntryException { checkentry(ent); //may thro an InvalidEntryException Position<Entry<K,V>> rempos = ((BSTEntry<K,V>) ent).position(); Entry<K,V> toreturn = entry(rempos); //entry to be returned if ( isexternal ( left(rempos) ) ) rempos = left(rempos); //left easy case else if ( isexternal ( right(rempos) ) ) rempos = right(rempos); //right easy case else { // entry is at a node ith internal children.......... 5 Metodo remove (/) else { // entry is at a node ith internal children //find node for moving entry Position<Entry<K,V>> sappos = rempos; rempos = right(sappos); do rempos = left(rempos); hile ( isinternal (rempos) ); replaceentry<k,v>( sappos, (Entry<K,V>) parent(rempos).element() ); actionpos = sibling (rempos); //sibling of the leaf to be removed removeexternal (rempos); return toreturn; 13