Alberi binari ( 7.3)

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

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

Attraversamento di un albero (binario)

Implementazione ADT: Alberi

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

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

alberi tipo astratto, implementazione, algoritmi

Alberi binari e alberi binari di ricerca

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati

Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo

Alberi. Definizioni principali

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati

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

Algoritmi e Strutture Dati

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

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

Il tipo astratto di dati Node List

Divide et impera su alberi

Implementazione con alberi binari di ricerca

Alberi ed Alberi Binari

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

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

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

Alberi Binario in Java

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

Metodi di una Collection

Problemi di ordinamento

Esercitazione 6. Alberi binari di ricerca

Espressioni aritmetiche

Lezione 7 Alberi binari: visite e alberi di ricerca

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

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

Esempi in Java di program.ne O-O

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

Astrazioni sul controllo. Iteratori

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

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

Per semplicità eliminiamo le ripetizioni nell'albero.

Prossime lezioni e tutorato!

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. In informatica, un albero è un modello astratto di una struttura dati gerarchica

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.

Algoritmi e Strutture Dati. HeapSort

lezione 9 min-heap binario Heap e Alberi posizionali generali

Algoritmi e Strutture Dati. Alberi

Alberi Binari di Ricerca

Corso: Strutture Dati Docente: Annalisa De Bonis

Alberto Montresor Università di Trento

Note per la Lezione 4 Ugo Vaccaro

Implementazione della coda con liste concatenate. x v. il front della coda è memorizzato nel primo nodo (head) della lista

Alberi Binari di Ricerca e Alberi Rosso-Neri

ALGORITMI E STRUTTURE DATI

ADT Coda con priorità

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

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Indice come albero binario di ricerca!

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Corso di Algoritmi e Strutture Dati con Laboratorio. The JCF(continua): L interfaccia Map

Dati e Algoritmi 1: A. Pietracaprina. Alberi Generali

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

Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi

Capitolo 17. Introduzione alle strutture di dati. Capitolo 17 Introduzione alle strutture di dati

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

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

Struttura di dati che può essere usata sia come dizionario, sia come 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.

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

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

Algoritmi e Strutture Dati

Programmazione a oggetti

Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

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

Alberi di ricerca binari

Informatica 3. LEZIONE 12: Liste. Modulo 1: ADT lista e implementazione basata su array Modulo 2: Lista concatenata

Alberi Binari di Ricerca

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

ALBERI DI RICERCA BINARI (O ALBERI BINARI DI RICERCA)

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

ADT ALBERO BINARIO (tree)) ADT ALBERO BINARIO

Capitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125

Liste doppie. Doubly Linked Lists. GT: 6.2 (e 3.3) Argomenti della lezione

Esercizi su alberi binari

Programmazione ad Oggetti

Capitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73

Lezione 12 Tabelle Hash

Marco Faella I pattern Template Method e Factory Method

La classe java.lang.object

Polimorfismo parametrico vs polimorfismo per inclusione

Implementazione Java di un ADT

Esonero del corso di Programmazione a Oggetti

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

Programmazione II Compitino (Vers. B)

Main System Monitor Keyboard

Generics & Collections

Algoritmi e Strutture Dati

Esercizi Capitolo 6 - Alberi binari di ricerca

Il TDA Tree. Alberi. Esempio. Alberi. Applicazioni. Definizione di albero

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari

Transcript:

Alberi binari ( 7.3) + a 3 b Albero Binario ( 7.3) DEFINIZIONE Albero Binario è un albero ordinato in cui ogni nodo ha al più due figli. Un albero binario si dice proprio se ogni nodo ha o zero o figli DEFINIZIONE RICORSIVA Albero Binario (proprio) : o è l'insieme vuoto o è un elemento (nodo radice) con un sottoalbero sinistro e un sottoalbero destro r Sin Des

Albero Binario rappresentazione nodo radice 44 7 nodi interni 78 3 50 88 nodi esterni 48 6 3 Arithmetic Expression Tree Albero binario che rappresenta una espressione aritmetica nodi interni operatori nodi esterni operandi Esempio: albero binario per l espressione : ( (a - ) + (3 b)) + a 3 b 4

Decision Tree Albero binario associato ad un processo decisionale nodi interni: domande con risposta si/no nodi esterni: decisioni Esempio: decidere come fare il pranzo Want a fast meal? Yes How about coffee? No On expense account? Yes No Yes No Starbucks Spike s Al Forno Café Paragon 5 BinaryTree ADT ( 7.3.) L ADT BinaryTree ADT estende l ADT Tree, i.e., eredita tutti i metodi dell ADT Tree, più ne aggiunge di nuovi: Metodi addizionali : position left (p) position right (p) boolean hasleft (p) boolean hasright (p) Ulteriori metodi di modifica (update) possono essere definiti dalle strutture dati che implementano il BinaryTree ADT 6 3

BinaryTree Interface ( 7.3.) public interface BinaryTree<E> extends Tree<E> { public Position<E> left (Position<E> v) throws InvalidPositionException, BoundaryViolationException; public Position<E> right (Position<E> v) throws InvalidPositionException, BoundaryViolationException; public boolean hasleft (Position<E> v) throws InvalidPositionException; public boolean hasright (Position<E> v) throws InvalidPositionException; 7 Albero Binario proprietà ( 7.3.3) Teorema: Un albero binario completo con n nodi ha altezza h = log n, infatti : limite inferiore: poichè vi sono i nodi alla profondità i = 0,, h - e almeno un nodo alla profondità h, risulta : n + + 4 + + h- + = ( - h ) / (-) = h così, n h, i.e., h log n depth 0 h h keys h 8 4

Albero Binario proprietà ( 7.3.3) Limite superiore: poichè vi sono al più h nodi alla profondità h, risulta: n + + 4 + + h- + h = h+ - così, n+ h+, i.e., log (n+)- h log (n+)- h log n h = log n depth 0 h h keys h 9 Albero Binario proprietà ( 7.3.3) Notazione n numero nodi n E numero nodi esterni n I numero nodi interni h altezza Proprietà n E = n I + n = n E h n I h (n )/ n E h h log n E h log (n + ) 0 5

Albero Binario proprietà ( 7.3.3) Teorema: in albero binario proprio risulta : n E = n I + removeaboveexternal A A B D D c c A A A c D D Albero Binario Algoritmi di attraversamento ( 7.3.6) 6 8 4 7 9 3 5 6

Albero Binario inorder ( 7.3.6) Algorithm inorder( T, v ) if hasleft (T, v) inorder (left (T, v)) visit(t, v) if hasright (T, v) inorder (right (T, v)) 6 8 4 7 9 3 5 3 Albero Binario postorder ( 7.3.6) Esempio di postorder: valutazione di una espressione il metodo ricorsivo ritorna il valore di un sotto_albero quando visita un nodo interno applica l operatore ai valori ottenuti visitando i sottoalberi sinistro e destro Algorithm evalexpr(t,v) + if isexternal (T,v) return v.element () else 5 3 x evalexpr(leftchild (T,v)) y evalexpr(rightchild (T,v)) operator stored at v return x y 4 7

Albero Binario Attraversamento Successore nell inordine di un dato nodo: il primo nodo dell albero visitato è il nodo g successore di b è h (il nodo più a sinistra nel sottoalbero destro) il successore di i è a (il padre del primo figlio sinistro risalendo) a b c d e f g h i l m 5 Albero Binario Inorder Iterator () Il primo nell inordine : il più a sinistra nel sottoalbero sinistro della radice x () () (3) Schema dell attraversamento : S D se sotto-albero destro non è vuoto, il successivo è il primo nel sotto-albero destro altrimenti, il successivo è il padre del primo figlio sinistro che si incontra risalendo di figlio in padre 6 8

Interfaccia Iterator<E> public interface Iterator<E> { boolean hasnext() // Returns true if the iteration has more elements Enext() // Returns the next element in the interation void remove() // Removes from the underlying collection the last element // returned by the iterator (optional operation) 7 Albero Binario Inorder Iterator () public class InorderPositionsIterator<E> implements Iterator<E> { posizione corrente private Position<E> cur; private BinaryTree<E> T; private Position<E> inorderfirst( Position<E> p ) { while ( T.hasLeft(p) ) p = T.left(p); return p; il costruttore il primo nell inordine nel sottoalbero p InorderPositionsIterator( BinaryTree<E> T ) { this.t = T; cur = inorderfirst(t.root()); l albero su cui iterare attuale posizione corrente 8 9

Albero Binario Inorder Iterator (3) public boolean hasnext() { return cur!= null; prima ritorna la posizione public E next() { corrente e poi la aggiorna if ( cur == null ) throw new NoSuchElementException(); Position<E> pos = cur; if ( T.isInternal(cur) ) cur = inorderfirst(t.right(cur)); else { while (! T.isRoot(cur) && cur == T.right(T.parent(cur)) ) cur = T.parent(cur); if ( cur == T.root() ) cur = null; else cur = T.parent(cur); return pos; risale sino al primo figlio sinistro risale di figlio in padre il successore è il padre del primo figlio sinistro 9 Albero Binario Inorder Iterator (4) public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException("remove"); //fine InorderIterator 0 0

Utilizzo di Inorder Iterator LinkedBinaryTree<Integer> T = new LinkedBinaryTree<Integer>(); //.............. Un albero binario T //.............. //.............. Un iteratore sull albero binario T Iterator<Position<Integer>> itp; itp = new InorderPositionsIterator<Integer>(T); while ( itp.hasnext() ) { Position<Integer> x = itp.next(); if ( T.isInternal(x) ) System.out.println("--> " + x.element() ); Albero Binario Tour di Eulero ( 7.3.6) 44 Eulero tour sin 7 des 78 sot 3 50 88 sin preordine sot inordine des postordine 48 6

Tour di Eulero pseudocodice Algorithm eulertour( T, v) //Albero binario action for visiting node v on left if T.hasLeft( T, v ) then eulertour( T, T.left(T, v ) ) action for visiting node v from below if T.hasRight(v) then eulertour( T, T.right(T, v ) ) action for visiting node v on right 3 Albero Binario EuleroTour ( 7.3.6) Algorithm printexpression(t, v) //Albero binario proprio if T.isExternal (v) print( v.element () ) else print( ( ) //PRE printexpression( T, T.left(v) ) print( v.element () ) //OPERATOR printexpression( T, T.right(v) ) print ( ) ) //POST + (( (a )) + (3 b)) 3 b a 4

Template Method Pattern ( 7.3.7) Algoritmo generico che può essere specializzato con la ridefinizione (overloading) di alcuni metodi Realizzato mediante una classe astratta Java I metodi di visita possono essere ridefiniti da sottoclassi Il Template method eulertour<e,r> viene ricorsivamente invocato sul figlio sinistro e sul figlio destro un oggetto TourResult con i campi left, right e out tiene traccia dell output delle chiamate ricorsive al metodo EulerTour 5 Template Method Pattern ( 7.3.7) public abstract class EulerTour <E,R> { protected BinaryTree<E> tree; Classe astratta metodo astratto public abstract R execute( BinaryTree<E> T ); protected void init( BinaryTree<E> T ) { tree = T; //........ metodo concreto 6 3

Template Method Pattern ( 7.3.7) protected R eulertour ( Position<E> v ) { TourResult<R> r = new TourResult<R>(); visitleft(v, r ); if ( tree.hasleft(v) ) r.left = eulertour(tree.left(v) ); visitbelow(v,r); if ( tree.hasright(v) ) r.right = eulertour(tree.right(v) ); visitright(v,r); return r.out; Metodo concreto, il motore dell algoritmo, realizzato ricorsivamente 7 Template Method Pattern ( 7.3.7) protected void visitleft ( Position<E> v, TourResult<R> r ) { ; protected void visitright ( Position<E> v, TourResult<R> r ) { ; protected void visitbelow ( Position<E> v, TourResult<R> r ) { ; //class EulerTourTamassia Metodi che debbono essere ridefiniti dalla classe che specializza la classe astratta 8 4

Template Method Pattern public class PrintExpressionTour<E,R> extends EulerTour<E,R> { public R execute( BinaryTree<E> T ) { Specializzazione della classe init(t); astratta per la costruzione di System.out.println("Expression: "); eulertour(t.root()); un espressione parentizzata System.out.println(); return null; dell albero protected void visitleft ( Position<E> v ) { if (tree.isinternal(v) ) System.out.print( " ( ); protected void visitright ( Position<E> v ) { if (tree.isinternal(v) ) System.out.print( ") ); protected void visitbelow ( Position<E> v ) { if ( v.element()!= null ) System.out.print(v.element()); //class 9 Template Method Pattern public static void main( String argv[] ) throws Exception { BinaryTree T; //........ PrintExpressionTour pe = new PrintExpressionTour(); pe.execute(t); //main 30 5

Albero Binario Strutture dati per l implementazione di albero binario e ennario 3 Linked Structure for Binary Trees ( 7.3.4) Un nodo è rappresentato da un oggetto contenente : il rif. all Elemento il rif. al nodo Padre il rif. al nodo figlio Sin il rif. al nodo figlio Des B B A D A D C E C E L oggetto Nodo implementa l ADT Position 3 6

Array Rappresentation of Binary Trees ( 7.3.5) Parent(i) i/ a Left(i) *i Right(i) *i+ b 3 c 4 d 5 e 6 f 7 g 0 3 4 5 6 7 a b c d e f g 33 Rappresentazione albero ennario Un nodo è rappresentato da un oggetto contenente : il rif. all Elemento il rif. al nodo Padre B il rif. alla Sequenza dei nodi figli A D F B A D F C E C E 34 7

Rappresentazione albero binario 35 Rappresentazione di un albero (foresta) con un albero binario A A TRASFORMAZIONE B B C D E C E F G F D Il primo figlio diviene il figlio sinistro Il primo fratello destro diviene figlio destro G 36 8