Binary Search Trees (BST)

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Binary Search Trees (BST)"

Transcript

1 Università degli Studi di Bologna Facoltà di Ingegneria Fondamenti di Informatica T2 Modulo 2 Corso di Laurea in Ingegneria Informatica Anno accademico 200/2009 Binary Search Trees (BST) Also Known As Alberi Binari di Ricerca Un BST è un particolare tipo di albero binario in cui: I nodi contengono elementi appartenenti ad un insieme munito di un ordine totale (insieme totalmente ordinato) Per ogni nodo: i sottoalberi sinistro e destro sono BST; il sottoalbero sinistro contiene solo elementi minori (o uguali) dell elemento contenuto nel nodo; il sottoalbero destro contiene solo elementi maggiori (o uguali) dell elemento contenuto nel nodo. 2

2 Binary Search Trees (BST) I BST servono per gestire insiemi ordinati in modo ottimizzato consentendo di avere maggiore velocità in : Ricerche (se alberi ben bilanciati) Inserimenti e cancellazioni Può valere la pena di bilanciare un albero sbilanciato dopo vari inserimenti/cancellazioni per ottenere maggiore velocità nella ricerca In qualche caso, necessità di iterare su tutti gli elementi contenuti 3 Algoritmi sui BST Alcuni algoritmi interessanti Ricerca Inserimento Cancellazione Le operazioni che modificano l albero devono lasciare inalterate le proprietà di ordinamento 4

3 Algoritmi - Ricerca Per le proprietà dei Binary Search Trees, è possibile decidere, per ogni nodo, se proseguire la ricerca a sinistra o a destra Ricerca di 13 Nota: il numero di passi/confronti da compiere è, al più, pari all altezza dell albero! Algoritmi - Ricerca Versione ricorsiva 1. Se l elemento da cercare è minore dell elemento contenuto nella radice del sotto-albero corrente a. Cercare nel sottoalbero di sinistra b. Altrimenti, cercare nel sottoalbero di destra Versone iterativa 1. Sia x un nodo temporaneo ed, a questo, sia inizialmente assegnata la radice dell albero 2. Finché x non è nullo e non contiene il nodo cercato Confrontare il valore contenuto in x con il nodo cercato a. Se è uguale, restituire il valore trovato b. Se è minore, assegnare ad x il figlio destro e procedere con 2 c. Se è maggiore, assegnare ad x il figlio sinistro e procedere con 2 6

4 Algoritmi - Inserimento L algoritmo di inserimento è simile a quello di ricerca Cerca, nell albero, la posizione corretta di inserimento, ovvero il nodo che diventerà il padre di quello da inserire Una volta trovato il nodo, appende il nuovo nodo come figlio sinistro/destro in modo da mantenere la proprietà di ordinamento dell albero Inserimento di Algoritmi Inserimento Versione Ricorsiva 1. Sia x il nodo che identifica il sotto-albero in cui inserire l elemento e 2. Se x è nullo (albero vuoto), restituire un nuovo nodo contenente l elemento da inserire e terminare 3. Se e è minore dell elemento contenuto in x 1. Assegnare al sotto-albero sinistro di x il risultato dell inserimento di e nel sotto-albero sinistro corrente 2. Altrimenti, assegnare al sotto-albero destro di x il risultato dell inserimento di e nel sotto-albero destro corrente 4. Restituire x Versione Iterativa Fatelo da voi! Hints Scrivere un algoritmo di ricerca che restituisca l ipotetico nodo padre del nodo da inserire (non fallisce mai!) Inserire nel nodo trovato mantenendo le proprietà dell albero di ricerca

5 Algoritmi - Rimozione Caso 1: il nodo da rimuovere è una foglia (1) Ricerca del nodo Rimozione dal padre Algoritmi Rimozione Caso 2: il nodo da rimuovere ha un solo figlio Ricerca del nodo Rimozione dal padre e il padre punta ora all unico figlio del nodo rimosso

6 Algoritmi Rimozione Caso 3: il nodo da rimuovere ha due figli Ricerca del nodo Sostituzione del valore del nodo da rimuovere con il valore del più piccolo fra i valori maggiori (il nodo più a sinistra del sotto-albero di destra) Realizzazione Fra gli elementi contenuti nei nodi dell albero deve essere definita una relazione d ordine totale Tale relazione può essere realizzata in Java facendo in modo che questo elementi siano Comparable Le operazioni sul BST lavoreranno su oggetti Comparable

7 Realizzazione Il Nodo Il nodo dell albero sarà realizzato tramite la classe generica BinaryNode<T extends Comparable<T>> (il tipo su cui si può istanziare il generico DEVE implementare Comparable) caratterizzata da: un elemento Comparable<T>; un BinaryNode radice del sottoalbero di sinistra: un BinaryNode radice del sottoalbero di destra. UML Parametro generico e sue caratteristiche 13 Realizzazione L Albero Per una questione di praticità una classe di front-end verso la struttura ad albero Se non ci fosse, l albero vuoto sarebbe BynaryNode<X> emptytree = null In tal caso è impossibile effettuare operazioni sull albero vuoto: impossibile collocare il metodo isempty() impossibile invocare i metodi di visita che possono dare un output anche in caso di albero vuoto (es. rapprentazione stringa dell albero con visita pre/in/post fissa) 14

8 Realizzazione UML BinarySearchTree<T extends Comparable<T>> è la classe di front-end BinaryNode fa parte dello stato interno del sotto-sistema albero e non è visibile da fuori 15 Quali operazioni? Già riportate nel diagramma UML Tutte le operazioni di modifica preservano l ordinamento Inserimento insert Cancellazione remove rimuove un elemento specificato Svuotamento makeempty Ricerca find ricerca un elemento findmin ricerca l elemento minimo findmax ricerca l elemento massimo L albero è vuoto? isempty 16

9 Il codice Note L inserimento (insert), accetta duplicati La ricerca (find*), in presenza di duplicati, restituisce il primo elemento che corrisponde L eliminazione di un elemento (remove) pretende che l elemento sia presente (altrimenti eccezione) Alcuni metodi realizzati in modo iterativo; Semplici anche in versione iterativa ricerche Altri realizzati in modo ricorsivo; in versione iterativa sarebbero stati troppo complicati Inserimento, cancellazione 17 Codice BinarySearchTree - Inserimento public void insert(t x) root = insert(x, root); protected BinaryNode<T> insert(t x, BinaryNode<T> t) if (t == null) t = new BinaryNode<T>(x); else if (x.compareto(t.getelement()) < 0) t.setleft(insert(x, t.getleft())); else if (x.compareto(t.getelement()) > 0) t.setright(insert(x, t.getright())); return t; 1

10 Codice BinarySearchTree - Cancellazione public void remove(t x) root = remove(x, root); 19 Codice BinarySearchTree - Cancellazione protected BinaryNode<T> remove(comparable<t> x, BinaryNode<T> t) if (t == null) throw new ItemNotFoundException(x.toString()); if (x.compareto(t.getelement()) < 0) t.setleft(remove(x, t.getleft())); Rimozione di un else if (x.compareto(t.getelement()) > 0) nodo con due figli t.setright(remove(x, t.getright())); else if (t.getleft()!= null && t.getright()!= null) t.setelement(findmin(t.getright()).getelement()); t.setright(removemin(t.getright())); Rimozione di una foglia o di un nodo con un solo figlio else t = (t.getleft()!= null)? t.getleft() : t.getright(); return t; 20

11 Codice BinarySearchTree - Svuotamento public void makeempty() root = null; 21 Codice BinarySearchTree - Ricerca public T find(t x) return elementat(find(x, root)); private T elementat(binarynode<t> t) return t == null? null : t.getelement(); 22

12 Codice BinarySearchTree - Ricerca private BinaryNode<T> find(comparable<t> x, BinaryNode<T> t) while (t!= null) if (x.compareto(t.getelement()) < 0) t = t.getleft(); else if (x.compareto(t.getelement()) > 0) t = t.getright(); else return t; return null; 23 Codice BinarySearchTree - Ricerca Minimo public T findmin() return elementat(findmin(root)); protected BinaryNode<T> findmin(binarynode<t> t) if (t!= null) while (t.getleft()!= null) t = t.getleft(); Ricerca la foglia più a sinistra return t; 24

13 Codice BinarySearchTree - Ricerca Massimo public T findmax() return elementat(findmax(root)); protected BinaryNode<T> findmax(binarynode<t> t) if (t!= null) while (t.getright()!= null) t = t.getright(); Ricerca la foglia più a destra return t; 25 Codice BinarySearchTree - Test Albero Vuoto public boolean isempty() return root == null; 26

14 Visite Due dimensioni: 1. Ordine di lettura in verticale Pre-order: prima la radice poi i nodi figli In-order: prima il primo nodo figlio, poi la radice, poi il secondo nodo figlio Post-order: prima il primo nodo figlio, poi il secondo nodo figlio, poi la radice 2. Ordine di lettura in orizzontale Leftmost: il primo nodo figlio è il sotto-nodo di sinistra Rightmost: il primo nodo figlio è il sotto-nodo di destra 27 Visite Esempio Visita in-order, leftmost Visita in-order, rightmost Visita post-order, rightmost

15 Visite Implementazione Metodi ricorsivi su BinaryNode i metodi omonimi su BinarySearchTree delegano ai corrispondenti metodi su BinaryNode Un metodo per ogni ordine di visita in verticale (pre/in/post-order) Un parametro per indicare l ordine di visita in orizzontale (leftmost, rightmost) class trees public enum NavigationType LEFTMOST, RIGHTMOST, «interface» BinarySearchTreeNavigator + doaction(t) : void pre/in/post public void YorderNavigation (BinarySearchTreeNavigator nav, NavigationType type) Decide che cosa fare dell elemento contenuto nel nodo che si sta navigando metodo void doonelement(comparable) 29 Realizzazione UML 30

16 Codice BinarySearchTree - Visite Metodi per visitare l albero: ciascun metodo delega al corrispondente metodo su BinaryNode public void preordernavigation( BinarySearchTreeNavigator<T> nav, NavigationType type) if (root!= null) root.preordernavigation(nav, type); public void inordernavigation( BinarySearchTreeNavigator<T> nav, NavigationType type) if (root!= null) root.inordernavigation(nav, type); 31 Codice BinarySearchTree - Visite public void postordernavigation( BinarySearchTreeNavigator<T> nav, NavigationType type) if (root!= null) root.postordernavigation(nav, type); 32

17 Codice BinaryNode - Pre-order public void preordernavigation(binarysearchtreenavigator<t> nav, NavigationType type) nav.doaction(element); Prima la radice BinaryNode<T> first = getfirst(type); BinaryNode<T> last = getlast(type); if (first!= null) first.preordernavigation(nav, type); if (last!= null) last.preordernavigation(nav, type); poi i nodi figli nell ordine indicato da type 33 Codice BinaryNode - In-order public void inordernavigation(binarysearchtreenavigator<t> nav, NavigationType type) BinaryNode<T> first = getfirst(type); BinaryNode<T> last = getlast(type); if (first!= null) first.inordernavigation(nav, type); nav.doaction(element); poi la radice Prima il primo nodo figlio if (last!= null) last.inordernavigation(nav, type); ed infine il secondo nodo figlio 34

18 Codice BinaryNode - Post-order public void postordernavigation(binarysearchtreenavigator<t> nav, NavigationType type) BinaryNode<T> first = getfirst(type); BinaryNode<T> last = getlast(type); if (first!= null) first.postordernavigation(nav, type); Prima i due nodi figli if (last!= null) last.postordernavigation(nav, type); nav.doaction(element); poi la radice 35 Codice BinaryNode - Leftmost / Rightmost private BinaryNode<T> getfirst(navigationtype type) switch (type) Fornisce il primo nodo da case LEFTMOST: navigare a seconda del return left; tipo di navigazione case RIGHTMOST: scelto return right; default: throw new IllegalStateException(); 36

19 Codice BinaryNode - Leftmost / Rightmost private BinaryNode<T> getlast(navigationtype type) switch (type) Fornisce il secondo nodo case LEFTMOST: da navigare a seconda del return right; tipo di navigazione case RIGHTMOST: scelto return left; default: throw new IllegalStateException(); 37 Codice Test - ListBSTNavigator package trees.tests; public class ListBSTNavigator<T> implements BinarySearchTreeNavigator<T> ArrayList<T> list = new ArrayList<T>(); public void doaction(t c) list.add(c); public List<T> getlist() ArrayList<T> result = new ArrayList<T>(); result.addall(list); return result; 3

20 Codice Test - Visita Albero public void testprefixnavigation() ListBSTNavigator<Integer> nav = new ListBSTNavigator<Integer>(); BinarySearchTree<Integer> t = new BinarySearchTree<Integer>(); t.insert(5); t.insert(3); t.insert(2); t.insert(4); t.insert(7); t.insert(); t.preordernavigation(nav, NavigationType.LEFTMOST); Creazione dell albero binario Viene effettuata una visita di tipo pre-order, leftmost 39 Codice Test - Visita Albero List<Integer> result = nav.getlist(); assertequals(5, result.get(0)); assertequals(3, result.get(1)); assertequals(2, result.get(2)); assertequals(4, result.get(3)); assertequals(7, result.get(4)); assertequals(, result.get(5)); Viene recuperata la lista dei nodi visitati dal navigator Viene effettuato un controllo sull ordine dei nodi visitati, per testare il funzionamento dell algoritmo pre-order, leftmost 40

21 Codice Test - Visita Albero public void testinfixnavigation() ListBSTNavigator<Integer> nav = new ListBSTNavigator<Integer>(); BinarySearchTree<Integer> t = new BinarySearchTree<Integer>(); t.insert(5); t.insert(3); t.insert(2); t.insert(4); t.insert(7); t.insert(); t.inordernavigation(nav, NavigationType.LEFTMOST); Creazione dell albero binario Viene effettuata una visita di tipo in-order, leftmost 41 Codice Test - Visita Albero List<Integer> result = nav.getlist(); assertequals(2, result.get(0)); assertequals(4, result.get(1)); assertequals(3, result.get(2)); assertequals(, result.get(3)); assertequals(7, result.get(4)); assertequals(5, result.get(5)); Viene recuperata la lista dei nodi visitati dal navigator Viene effettuato un controllo sull ordine dei nodi visitati, per testare il funzionamento dell algoritmo in-order, leftmost 42

22 Codice Test - Visita Albero public void testinfixnavigation_rightmost() ListBSTNavigator<Integer> nav = new ListBSTNavigator<Integer>(); BinarySearchTree<Integer> t = new BinarySearchTree<Integer>(); t.insert(5); t.insert(3); t.insert(2); t.insert(4); t.insert(7); t.insert(); t.inordernavigation(nav, NavigationType.RIGHTMOST); Creazione dell albero binario Viene effettuata una visita di tipo in-order, rightmost 43 Codice Test - Visita Albero List<Integer> result = nav.getlist(); assertequals(, result.get(0)); assertequals(7, result.get(1)); assertequals(5, result.get(2)); assertequals(4, result.get(3)); assertequals(3, result.get(4)); assertequals(2, result.get(5)); Viene recuperata la lista dei nodi visitati dal navigator Viene effettuato un controllo sull ordine dei nodi visitati, per testare il funzionamento dell algoritmo pre-order, rightmost 44

23 Altri Alberi Il problema di BST è che normalmente NON sono bilanciati: Inserimenti e cancellazioni sbilanciano l albero Se l albero non è correttamente bilanciato le operazioni (tutte) costano parecchio Soluzione: alberi che si autobilanciano AVL (Adel'son-Vel'skii-Landis) Red-Black 45 Alberi AVL Un albero AVL è un Albero Binario di Ricerca bilanciato Un nodo si dice bilanciato quando l altezza del sotto-albero sinistro differisce dall altezza sottoalbero destro di al più una unita Un albero si dice bilanciato quando tutti i nodi sono bilanciati Le operazioni sono le stesse che si possono eseguire su un albero binario di ricerca 46

24 Rotazioni Si supponga di disporre di un albero sbilanciato è possibile bilanciarlo tramite opportune rotazioni 15 Ruotare il nodo verso sinistra in modo che diventi la radice dell albero il padre di () diventa il suo sotto-albero sinistro Rotazioni Rotazione 1: il nodo diventa la radice 15 Ruotare il nodo 15 verso sinistra in modo che diventi la radice dell albero il padre di 15 () diventa il suo sotto-albero sinistro, il sottoalbero sinistro di 15 (13) diventa il sotto-albero destro di

25 Rotazioni Rotazione 2: il nodo 15 diventa la radice e l albero risulta bilanciato Alberi AVL Si supponga di partire con un albero bilanciato, secondo la definizione data in precedenza Una serie di inserimenti/cancellazioni può sbilanciare l albero Opportune rotazioni sono in grado di ribilanciare l albero Naturalmente i costi di inserimento/cancellazione crescono di molto ma la ricerca rimane sempre molto efficiente! 50

26 Per giocare un po Bellissima applet java (codice disponibile) per giocare con alberi di ricerca di vario tipo, con possibilità di inserire, cancellare, ruotare e vedere come si comportano i vari tipi di alberi supportati Esercizi MOLTO consigliati: Calcolare l altezza di un albero Calcolare il bilanciamento di un nodo (differenza fra le altezze dei sotto-alberi sinistro e destro) 51 Iterazione È fondamentale poter disporre della possibilità di iterare sull albero BinarySearchTree<MyType> mytree = new BinarySearchTree<MyType>(); for (MyType element : mytree) dosomething(element); Ma come si rende l albero iterabile? 52

27 Iterabili, Iteratori Per rendere una classe iterabile, è sufficiente che essa implementi l interfaccia generica Iterable<T> Iterable<T> contiene un metodo (iterator()) che restituisce un iteratore sulla struttura, ovvero un oggetto che implementa l interfaccia Iterator<T> Iterator<T> è dotata di tre metodi: boolean hasnext() indica se l iteratore è in grado di fornire un ulteriore elemento T next() restituisce l elemento successivo void remove() rimuove l elemento corrente (l ultimo restituito) metodo opzionale (eventualmente sollevare un eccezione di tipo UnsupportedOperationException 53 Iterazione ma sugli alberi ci sono diverse possibilità di iterazione, pre/in/post order Ognuna di queste iterazioni deve essere implementata da un iteratore diverso Quale di questi iteratori viene restituito dall albero quando viene invocato il metodo iterator()? Qual è il tipo di iterazione più sensata per un BST? Visita/Iterazione in-order/leftmost: Propone gli elementi dell albero mostrandoli in ordine ascendente rispetto alla loro relazione d ordine totale 54

28 Iterazione e le altre modalità di iterazione? Esporre metodi per ottenere un oggetto iterabile che restituisca l iteratore opportuno: Iterator<T> getpreorderiterable(); Iterator<T> getinorderiterable(); Iterator<T> getpostorderiterable(); 55 Iteratori Non è possibile lavorare con la ricorsione: ogni volta che si desidera far avanzare l iteratore, occorre invocare il metodo next() Occorre mantenere lo stato necessario per continuare l iterazione dal punto in cui si è arrivati Quale stato? Usando la ricorsione si ha a disposizione lo stack dei record di attivazione occorre, almeno, usare uno stack in cui inserire (in qualche modo) i nodi da visitare! 56

29 Inizializzazione Iteratore Pre-Order Inserire nello stack la radice dell albero Elemento successivo (next()) Attenzione all ordine! Estrarre un nodo dallo stack (pop) Inserire nello stack prima il figlio destro, poi il figlio sinistro (se esistono) Restituire l elemento contenuto nel nodo estratto Considerazioni Il top dello stack è il nodo che contiene il successivo elemento da analizzare (restituire) Se lo stack è vuoto, fine dell iterazione 57 Pre-Order GO!!! Situazione dopo l inizializzazione Stack: Stack Top

30 Pre-Order GO!!! Esecuzione next() una volta Stack: 3 Output: Stack Top Pre-Order GO!!! Esecuzione next() due volte Stack: 5 2 Output: 3 Stack Top

31 Pre-Order GO!!! Esecuzione next() tre volte Stack: 5 Output: 3 2 Stack Top Pre-Order GO!!! Esecuzione next() quattro volte Stack: 6 Output: Stack Top eccetera 62

32 package trees; Codice Iterable Pre-order class PreorderIterable<T extends Comparable<T>> implements Iterable<T> private BinaryNode<T> root; public PreorderIterable(BinaryNode<T> root) this.root = public Iterator<T> iterator() return new PreorderIterator<T>(root); 63 Codice Iterator Pre-order class PreorderIterator<T extends Comparable<T>> implements Iterator<T> private Stack<BinaryNode<T>> nodestovisit; public PreorderIterator(BinaryNode<T> root) this.nodestovisit = new Stack<BinaryNode<T>>(); public boolean hasnext() return!nodestovisit.isempty(); Inserisce nello stack la radice dell albero 64

33 Codice Iterator public T next() if (!hasnext()) throw new NoSuchElementException(); BinaryNode<T> currentnode = nodestovisit.pop(); T result = currentnode.getelement(); if (currentnode.getright()!= null) nodestovisit.push(currentnode.getright()); if (currentnode.getleft()!= null) nodestovisit.push(currentnode.getleft()); Estrae un nodo dallo stack return result; restituisce l elemento contenuto nel nodo estratto inserisce nello stack prima il figlio destro, poi quello sinistro 65 Codice Iterator public void remove() throw new UnsupportedOperationException(); Operazione non supportata 66

34 Inizializzazione Iteratore In-Order Inserire nello stack la sequenza composta dalla lista che parte dalla radice ed arriva al nodo più a sinistra dell albero Elemento successivo (next()) Estrarre un nodo dallo stack (pop) Inserire nello stack la sequenza composta dalla lista che parte dal figlio di destra termina al nodo più a sinistra del sottoalbero Restituire l elemento contenuto nel nodo estratto Considerazioni Il top dello stack è il nodo che contiene il successivo elemento da analizzare (restituire) Se lo stack è vuoto, fine dell iterazione 67 In-Order GO!!! Situazione dopo l inizializzazione Stack: 3 2 Stack Top

35 In-Order GO!!! Esecuzione next() una volta Stack: 3 Output: 2 Stack Top In-Order GO!!! Esecuzione next() due volte Stack: 5 Output: 2 3 Stack Top

36 In-Order GO!!! Esecuzione next() tre volte Stack: 6 Output: Stack Top In-Order GO!!! Esecuzione next() quattro volte Stack: Output: Stack Top eccetera 72

37 package trees; Codice Iterable In-order Class InorderIterable<T extends Comparable<T>> implements Iterable<T> private BinaryNode<T> root; public InorderIterable(BinaryNode<T> root) this.root = public Iterator<T> iterator() return new InorderIterator<T>(root); 73 Codice Iterator In-order Class InorderIterator<T extends Comparable<T>> implements Iterator<T> private Stack<BinaryNode<T>> nodestovisit; public InorderIterator(BinaryNode<T> root) this.nodestovisit = new Stack<BinaryNode<T>>(); pushleft(root); 74

38 Codice Iterator In-order private void pushleft(binarynode<t> node) while (node!= null) nodestovisit.push(node); node = node.getleft(); Inserisce nello stack la sequenza composta dalla lista che parte dalla radice ed arriva al nodo più a sinistra dell albero 75 Codice Iterator public boolean hasnext() public T next() if (!hasnext()) throw new NoSuchElementException(); BinaryNode<T> currentnode = nodestovisit.pop(); pushleft(currentnode.getright()); return currentnode.getelement(); Estrae un nodo dallo stack, restituisce l elemento contenuto nel nodo estratto inserisce nello stack la sequenza composta dalla lista che parte dal figlio di destra e termina al nodo più a sinistra del sotto-albero e 76

39 Codice Iterator public void remove() throw new UnsupportedOperationException(); Operazione non supportata 77 Iteratore Post-Order Inizializzazione Inserire nello stack la sequenza composta dalla lista che parte dalla radice ed arriva alla foglia più a sinistra dell albero Per trovare la foglia più a sinistra, non è detto che si debba andare solo a sinistra! 7

40 La foglia più a sinistra Qual è la foglia più a sinistra? Questa! Se il nodo corrente è null, terminare 2. Inserire il nodo corrente nello stack 3. Se il nodo corrente ha un figlio sinistro, tale figlio diventa il nodo corrente ripartire da Se il nodo corrente ha un figlio destro, tale figlio diventa il nodo corrente Perché la foglia più a sinistra? Navigazione leftmost post-order: prima i nodi figli (più a sinistra), poi i nodi padre 79 Iteratore Post-Order Elemento successivo (next()) Sia il nodo corrente, il nodo contenente l ultimo valore restituito Ottenere un riferimento al nodo in cima allo stack (peek) Se il figlio destro del nodo prelevato dallo stack è diverso dal nodo corrente Inserire nello stack la sequenza composta dalla lista che parte dal figlio di destra ed arriva alla foglia più a sinistra del sotto-albero relativo Estrarre il nuovo nodo corrente dallo stack (pop) e restituire l elemento contenuto Considerazioni Il top dello stack è il nodo che contiene la radice del sotto-albero che si sta analizzando Se lo stack è vuoto, fine dell iterazione 0

41 Post-Order GO!!! Situazione dopo l inizializzazione Stack: 3 2 Stack Top Nodo Corrente: null Post-Order GO!!! Esecuzione next() una volta Vecchio Nodo Corrente: null Stack Peek: 2 Stack: 3 Stack Top Output: 2 Nodo Corrente:

42 Post-Order GO!!! Esecuzione next() due volte Vecchio Nodo Corrente: 2 Stack Peek: 3 Stack: 3 5 Output: 2 6 Nodo Corrente: 6 Stack Top [6 entra ed esce dallo stack] Post-Order GO!!! Esecuzione next() tre volte Vecchio Nodo Corrente: 6 Stack Peek: 5 Stack: 3 Output: Nodo Corrente: 5 Stack Top

43 Post-Order GO!!! Esecuzione next() quattro volte Vecchio Nodo Corrente: 5 Stack Peek: 3 Stack: Output: Nodo Corrente: 3 Stack Top Post-Order GO!!! Esecuzione next() cinque volte Vecchio Nodo Corrente: 3 Stack Peek: Stack: 15 Output: Nodo Corrente: 13 Stack Top [13 entra ed esce dallo stack] eccetera 6

44 package trees; Codice Iterable Post-order Class PostorderIterable<T extends Comparable<T>> implements Iterable<T> private BinaryNode<T> root; public PostorderIterable(BinaryNode<T> root) this.root = public Iterator<T> iterator() return new PostorderIterator<T>(root); 7 Codice Iterator Post-order Class InorderIterator<T extends Comparable<T>> implements Iterator<T> private Stack<BinaryNode<T>> nodestovisit; private BinaryNode<T> currentnode; public PostorderIterator(BinaryNode<T> root) this.currentnode = null; this.nodestovisit = new Stack<BinaryNode<T>>(); pushleftorright(root);

45 Codice Iterator Post-order private void pushleftorright(binarynode<t> node) while (node!= null) nodestovisit.push(node); if (node.getleft()!= null) node = node.getleft(); else node = node.getright(); Inserisce nello stack la sequenza composta dalla lista che parte dalla radice ed arriva alla foglia più a sinistra dell albero 9 Codice Iterator public boolean hasnext() public T next() if (!hasnext()) throw new NoSuchElementException(); BinaryNode<T> nextnode = nodestovisit.peek(); if (nextnode.getright()!= currentnode) pushleftorright(nextnode.getright()); currentnode = nodestovisit.pop(); return currentnode.getelement(); Ottiene un riferimen to al nodo in cima allo stack, inserisce nello stack la sequenza composta dalla lista che parte dal figlio di destra ed arriva alla foglia più a sinistra del sotto-albero relativo e estrae il nuovo nodo corrente dallo stack e restituisce l elemento contenuto in esso 90

46 Codice Iterator public void remove() throw new UnsupportedOperationException(); Operazione non supportata 91 Codice BinarySearchTree Oggetti Iterable public Iterable<T> getpreorderiterable() return new PreorderIterable<T>(root); public Iterable<T> getinorderiterable() return new InorderIterable<T>(root); Metodi che restituiscono i tre oggetti di tipo Iterable public Iterable<T> getpostorderiterable() return new PostorderIterable<T>(root); 92

47 Per giocare un po Esercizi MOLTO consigliati Realizzare gli iteratori rightmost 93

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

Binary Search Trees (BST) Algoritmi sui BST. Algoritmi - Ricerca. Fondamenti di Informatica T2 Modulo 2. Università di Bologna A.A. Università degli Studi di Bologna Facoltà di Ingegneria Fondamenti di Informatica T Modulo Corso di Laurea in Ingegneria Informatica Anno accademico 00/009 Binary Search Trees (BST) Also Known As Alberi

Dettagli

Implementazione ADT: Alberi

Implementazione ADT: Alberi Implementazione ADT: Alberi Livelli di astrazione 2001/2002 1 Esercitazione 5 (E6): alberi (tree) albero struttura dati fondamentale, soprattutto per le operazioni di ricerca tipi di albero con radice

Dettagli

Prossime lezioni e tutorato!

Prossime lezioni e tutorato! Prossime lezioni e tutorato! n 15 Aprile h. 11 Lezione in laboratorio n 20 Aprile (lunedi ) h. 8.45 lezione in Aula 1 (Java) n 22 Aprile h. 11 Lezione in laboratorio Tutorato: n 13 Aprile h. 8.45 n 16

Dettagli

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

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI SOMMARIO ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI Dimensione e Altezza ALBERI BINARI DI RICERCA (BST) Introduzione Ricerca, inserimento e cancellazione Implementazione

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Un albero si dice albero binario di ricerca è un albero binario in cui: - Ogni nodo è caratterizzato un valore chiamato chiave - L insieme delle chiavi è totalmente

Dettagli

ADT ALBERO BINARIO (tree)) ADT ALBERO BINARIO

ADT ALBERO BINARIO (tree)) ADT ALBERO BINARIO ADT ALBERO BINARIO (tree)) Rappresentazione collegata (puntatori a strutture) 1 ADT ALBERO BINARIO OPERAZIONI O PRIMITIVE DA REALIZZARE Operazione cons_tree: D x tree -> tree root: tree -> D left: tree

Dettagli

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

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico

Dettagli

Esercitazione su Albero Binario

Esercitazione su Albero Binario Esercitazione su Albero Binario Costruzione iteratore nel preordine Costruzione albero simmetrico Attraversamento per livelli dell albero Costruttore di copia dell albero Esercitazione su Albero Binario

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Un albero si dice albero binario di ricerca è un albero binario in cui: - Ogni nodo è caratterizzato un valore chiamato chiave - L insieme delle chiavi è totalmente

Dettagli

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello del 24 Gennaio 2007 Esercizio 1 (ASD) 1. Sia T (n) = T (n/6) + T (n/3) + Θ(n). Considerare ciascuna delle seguenti affermazioni

Dettagli

ADT ALBERO BINARIO (tree)! n Rappresentazione collegata (puntatori a strutture)

ADT ALBERO BINARIO (tree)! n Rappresentazione collegata (puntatori a strutture) ADT ALBERO BINARIO (tree)! n Rappresentazione collegata (puntatori a strutture) 1 ADT ALBERO BINARIO OPERAZIONI PRIMITIVE DA REALIZZARE Operazione! cons_tree: D x tree x tree -> tree! root: tree -> D!

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e Strutture Dati Alberi di ricerca Dizionari Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato dizionario 2 Alberi binari di ricerca (BST = binary search tree)

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Alberi di ricerca Domenico Fabio Savo 1 Dizionari Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato Dizionario 2 Alberi binari di ricerca (BST

Dettagli

tipi di dato astratti

tipi di dato astratti tipi di dato astratti A. FERRARI ADT Un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità che dipendono esclusivamente dalla semantica

Dettagli

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

Alberi di ricerca. Dizionari. Definizione. Alberi binari di ricerca (BST = binary search tree) Algoritmi e Strutture Dati Algoritmi e Strutture Dati Dizionari Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato dizionario Alberi di ricerca Basato su materiale di C. Demetrescu, I. Finocchi, G.F.

Dettagli

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

Esercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre. Esercizi parte 3 RAPPRESENTAZIONE DI ALBERI BINARI 1. Definire una classe LinkedBinTree che implementa alberi binari in modo collegato, con nodi implementati come oggetti di classe BinNode. La classe dovra

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010

Dettagli

Esercitazione 5 Alberi Binari di Ricerca

Esercitazione 5 Alberi Binari di Ricerca Esercitazione 5 Alberi Binari di Ricerca Corso di Fondamenti di Informatica II Algoritmi e strutture dati A.A. 2015/2016 11 Maggio 2016 Sommario Scopo di questa esercitazione è realizzare una struttura

Dettagli

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

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 8 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

Indice come albero binario di ricerca!

Indice come albero binario di ricerca! Indice come albero binario di ricerca! n Obiettivo: Utilizzare una struttura dati del tipo albero binario di ricerca per realizzare un indice su file Ricerca sull indice in memoria centrale, poi accesso

Dettagli

Alberi Binari Alberi Binari

Alberi Binari Alberi Binari Alberi Binari Alberi Binari Un albero binario è una collezione di elementi organizzati in modo non sequenziale secondo un grafo aciclico caratterizzato da Radice Due sotto-alberi (il sotto-albero destro

Dettagli

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

Alberi di ricerca. Alberi binari di ricerca. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill) Alberi di ricerca Alberi binari di ricerca Un esempio: l ADT Dizionario (mutabile) Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato astratto dizionario Alberi binari di

Dettagli

Algoritmi e Strutture Dati. Lezione 3

Algoritmi e Strutture Dati. Lezione 3 Algoritmi e Strutture Dati Lezione 3 www.iet.unipi.it/a.virdis Antonio Virdis antonio.virdis@unipi.it 1 Sommario Alberi Binari di Ricerca Gestione Stringhe Progettazione Esercizi 2 3 4 Alberi Binari 10

Dettagli

Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona

Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona Lezione 15 programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Approfondimenti della programmazione OO Il modificatore abstract Le classi

Dettagli

Alberi ed Alberi Binari di Ricerca

Alberi ed Alberi Binari di Ricerca Alberi ed Alberi Binari di Ricerca Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell

Dettagli

Lezione 12 Tabelle Hash

Lezione 12 Tabelle Hash Lezione 12 Tabelle Hash Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 2 ABR: Visita Scrivere un programma che legga

Dettagli

Alberi Binario in Java

Alberi Binario in Java Alberi Binario in Java Realizzare un albero binario di ricerca. L albero binario è di ricerca se esiste una relazione di ordinamento tra i valori dei nodi (valori comparabili). In particolare, dato un

Dettagli

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

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Anno Accademico 2002-2003 9 luglio 2002-03 Domanda 1, punti 6 Si consideri la seguente classe Java, in cui,

Dettagli

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

Un esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem Un esempio: l ADT Dizionario (mutabile) Algoritmi e Laboratorio a.a. 2006-07 Lezioni Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato astratto dizionario Parte 19-D Alberi

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli

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.

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. 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 FB = -1 livello 1 FB = -1 livello 2 livello 3 L altezza è 3, il minimo si trova nel

Dettagli

Multi-way search trees

Multi-way search trees Multi-way search trees GT. 10.4 1 Argomenti Multi-way search trees Multi-way searching 9 (2,4) Trees 2 5 7 10 14 2 1 Alberi Binari di Ricerca Bilanciati n numero di chiavi (entry(key,elem)) AVL tree log(

Dettagli

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

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09) ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 0/0) DISPENSA N. 6 Esercizi su alberi di ricerca e AVL Notazione: Per un albero T scriviamo T per indicare il numero dei nodi di T e h(t ) per indicare

Dettagli

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

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

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]

Dettagli

LINKEDLIST: implementazione iteratore. LINKEDLIST: iteratore INNERITERATOR INNERITERATOR

LINKEDLIST: implementazione iteratore. LINKEDLIST: iteratore INNERITERATOR INNERITERATOR LINKEDLIST: iteratore Il metodo iterator() restituisce un oggetto iteratore sulla lista per scandire gli elementi in sequenza a partire dall inizio della lista. public Iterator iterator() { return new

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto

Dettagli

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

Albero binario. Alberi binari (introduzione) Terminologia. Alberi di ricerca binaria (BST) Albero binario 2 Alberi binari (introduzione) Struttura di dati bidimensionale formata da nodi costituiti ciascuno dai dati da memorizzare e da due link Ver. 2.4 20 - Claudio Fornaro - Corso di programmazione

Dettagli

Strutture dati Alberi binari

Strutture dati Alberi binari Strutture dati - 2 - Alberi binari Definizione L albero è un insieme di elementi (nodi), sui quali è definita una relazione di discendenza con due proprietà: esiste un solo nodo radice senza predecessori

Dettagli

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Liste doppie Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica semplice: doppia: Gli

Dettagli

tipi di dato astratti

tipi di dato astratti tipi di dato astratti liste pile code alberi grafi Alberto Ferrari Informatica ADT o un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità

Dettagli

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. Albero binario. Un albero binario è un albero (ordinato) in cui ciascun nodo può avere al massimo due figli (figlio destro e figlio sinistro) Albero binario Un albero binario è un albero (ordinato) in cui ciascun nodo può avere al massimo due figli (figlio destro e figlio sinistro) albero binario proprio: ogni nodo interno ha esattamente due

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto

Dettagli

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

dizionari dizionari introduzione al bilanciamento dizionari/2 alberi bilanciati ! ADT che supportano le seguenti operazioni 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

Dettagli

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

d. Cancellazione del valore 5 e. Inserimento del valore 1 Esercizio1 Si consideri un albero binario non vuoto in cui a ciascun nodo v è associato un numero reale v.val. Scrivere un algoritmo che, dato in input l'albero T e un numero reale x, restituisce true

Dettagli

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta

Dettagli

Alberi binari ( 7.3)

Alberi binari ( 7.3) 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

Dettagli

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

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: Ordered search table Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: possiamo memorizzare le entrate di D in un array list S in ordine non decrescente di chiavi:

Dettagli

Sul pattern Iterator

Sul pattern Iterator Sul pattern Iterator 1 Introduzione Capita spesso di aver a che fare con strutture dati complesse, come ad esempio, liste, code, ecc. È buona norma accedere a queste strutture senza esporre la loro organizzazione.

Dettagli

Introduzione Implementazione (1)

Introduzione Implementazione (1) Informatica 3 Informatica 3 LEZIONE 15: Implementazione di alberi binari - BST Modulo 1: Implementazione degli alberi binari Modulo 2: BST Lezione 15 - Modulo 1 Implementazione degli alberi binari Politecnico

Dettagli

Implementazione con alberi binari di ricerca

Implementazione con alberi binari di ricerca public class LinkedBinaryTree implements BinaryTree { /** Espande una foglia in un nodo interno con due foglie come figli */ public void expandexternal(position v, E l, E r) throws InvalidPositionException

Dettagli

Programmazione ad Oggetti Modulo A (Esame del 9/1/2015)

Programmazione ad Oggetti Modulo A (Esame del 9/1/2015) Programmazione ad Oggetti Modulo A (Esame del 9/1/2015) Esercizio 1 Considerate la seguente gerarchia di classi: class A public void m( int x ) System.out.println("A.m:" + x); public void m( double x )

Dettagli

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve GLI ALBERI BINARI DI RICERCA Cosimo Laneve argomenti 1. alberi binari di ricerca 2. la ricerca di elementi e la complessità computazionale 3. operazione di cancellazione di elementi 4. esempi/esercizi

Dettagli

Implementazione dell albero binario in linguaggio C++

Implementazione dell albero binario in linguaggio C++ Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve

Dettagli

dizionari alberi bilanciati

dizionari alberi bilanciati dizionari alberi bilanciati dizionari ADT che supportano le seguenti operazioni membership anche detta search insert delete o remove le liste e i BST sono dizionari maggio 2002 ASD2002 - Alberi bilanciati

Dettagli

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 e alberi binari I Un albero è un caso particolare di grafo I I I I È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine

Dettagli

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

Alberi ( GT. 7 ) In informatica, un albero è un modello astratto con cui viene rappresentata una struttura gerarchica Alberi ( GT. 7 ) Albero definizioni Albero ADT (Abstract Data Type) Algoritmi di base su alberi Alberi binari Strutture dati per rappresentare alberi Implementazione AlberoBinario 1 Alberi (GT. 7) In informatica,

Dettagli

Fondamenti di Informatica T-1

Fondamenti di Informatica T-1 Fondamenti di Informatica T-1 Interfaccia Comparable e Collezioni Tutor: Allegra De Filippo allegra.defilippo@unibo.it a.a. 2015/2016 Fondamenti di Informatica T-1 Allegra De Filippo 1 / 22 Interfaccia

Dettagli

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni

Dettagli

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

Un heap binario è un albero binario con le seguenti caratteristiche: Heap Un heap binario è un albero binario con le seguenti caratteristiche: È quasi completo: tutti i livelli, tranna al più l ultimo sono completi e le foglie dell ultimo livello sono tutte adossate a sinistra.

Dettagli

Metodi di una Collection

Metodi di una Collection Java Collections Introduzione Una java collection (a volte chiamata anche container) è un oggetto che raggruppa più elementi dello stesso tipo in una singola unità. Tipicamente è utilizzata per raggruppare

Dettagli

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

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola Algoritmi e strutture dati 16 Dicembre 04 Canali A L e M Z Cognome Nome Matricola Problema 1 (6 punti) Determinare la funzione calcolata dal metodo mistero e la sua complessità computazionale in funzione

Dettagli

Binary Search Trees ( 10.1)

Binary Search Trees ( 10.1) 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

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e strutture dati Roberto Cordone A. A. 2015-16 Capitolo 3 Implementazioni dei dizionari ordinati Nota: queste dispense sono un rapido riassunto delle lezioni svolte nel dicembre 2015 e gennaio

Dettagli

Alberi ed Alberi Binari

Alberi ed Alberi Binari Alberi ed Alberi Binari Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell informazione,

Dettagli

Alberi. Alberi: Esempio di utilizzo

Alberi. Alberi: Esempio di utilizzo Sono strutture dati del tipo: Alberi SOTTOALBERO n1 RADICE DELL ALBERO () n2 n n4 Profondità o Livello 0 1 n n n n n n 2 NODI FOGLIA (LEAF NODES) 1 Alberi: Esempio di utilizzo Rappresentazione di un file

Dettagli

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 e alberi binari Un albero è un caso particolare di grafo È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine ed entra

Dettagli

SET: specifica INTRODUZIONE. SET: esempio Si stampano i numeri casuali in ordine di generazione e il contenuto dell insieme.

SET: specifica INTRODUZIONE. SET: esempio Si stampano i numeri casuali in ordine di generazione e il contenuto dell insieme. INTRODUZIONE Il tipo di dati astratto insieme (set) definisce operazioni, quali inserimento e rimozione, su collezioni di oggetti che presentano molteplicità uno, cioè non sono ammessi duplicati. Una possibile

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Prof. G. M. Farinella gfarinella@dmi.unict.it www.dmi.unict.it/farinella Riferimenti Bibliografici Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms, Third Edition,

Dettagli

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmo di ordinamento sul posto che ha tempo di esecuzione : QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : O(n2 ) nel caso peggiore O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior algoritmo

Dettagli

In questa lezione Alberi binari di ricerca: la cancellazione

In questa lezione Alberi binari di ricerca: la cancellazione In questa leione Alberi binari di ricerca: la cancellaione 1 L algoritmo di Hibbard per cancellare (1962) Sia il nodo da cancellare: 1) è una foglia: si rimuove 2) ha un solo figlio x: si rende x figlio

Dettagli

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.

Dettagli

Moltiplicazione veloce di interi

Moltiplicazione veloce di interi Moltiplicazione veloce di interi Ogni numero intero w di n cifre può essere scritto come 10 n/2 w s + w d w s indica il numero formato dalle n/2 cifre più significative di w w d denota il numero formato

Dettagli

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

Alberi binari e di ricerca. Parte 1 BST e GUI. Introduzione. 1. Minimo Antenato Comune. 2. Vistita in ampiezza Alberi binari e di ricerca Introduzione L esercitazione corrente riguarda problemi su alberi binari semplici e di ricerca. 1. Nella prima parte vengono proposti esercizi da svolgere mediante le classi

Dettagli

Appunti Senza Pretese di Programmazione II: Alberi di Ricerca

Appunti Senza Pretese di Programmazione II: Alberi di Ricerca Appunti Senza Pretese di Programmazione II: Alberi di Ricerca Alessandro Panconesi DSI, La Sapienza, Roma Vediamo adesso un altro modo di risolvere Il Problema del Dizionario, cioé quello di realizzare

Dettagli

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

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3 Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali

Dettagli

Definizione informale

Definizione informale Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali

Dettagli

Definizione informale. Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche

Definizione informale. Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali

Dettagli

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

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre Alberi Struttura dati Albero Organigramma Gerarchia (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre Esempio di un organigramma di un azienda Tree terminology

Dettagli

Correzione prima esercitazione: metodo distinct

Correzione prima esercitazione: metodo distinct Alberi binari lezione 7 Correzione prima esercitazione: metodo distinct // post: ritorna il numero di elementi distinti del multi insieme public int distinct( ) { int d = 0; int i = 0; int j; // INV1:

Dettagli

Esercizio. Strutture Dati

Esercizio. Strutture Dati Esercizio Si scriva un metodo public Position sibling(position v) che preso in input un nodo v restituisca il fratello di v. Il metodo dovrà lanciare una BoundaryViolationException nel caso in cui

Dettagli

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 17 A. Miola Gennaio 2012 1 Contenuti q Array paralleli q Array e oggetti q Ricerca sequenziale q Ricerca binaria q Fusione di sequenze

Dettagli

Alberi Binari di Ricerca e Alberi Rosso-Neri

Alberi Binari di Ricerca e Alberi Rosso-Neri Alberi Binari di Ricerca e Alberi Rosso-Neri Obiettivi Studiare strutture dati che consentano di effettuare in modo efficiente le operazioni di Minimo e massimo Successore Inserimento e cancellazione Ricerca

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Algoritmi su gli alberi binari: visite Dato un puntatore alla radice di un albero vogliamo scandire in modo sistematico tutti i nodi di tale albero In una lista abbiamo una unica

Dettagli

Struttura dati Dizionario

Struttura dati Dizionario Struttura dati Dizionario Un dizionario è : un insieme di coppie (elemento, chiave) Sul campo chiave è definita una relazione d'ordine totale Su cui definiamo le seguenti operazioni: insert(elem e, chiave

Dettagli

Heap e Code di Priorità

Heap e Code di Priorità Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non

Dettagli

Un esempio di mutua ricorsione

Un esempio di mutua ricorsione Inserimento in un ABR n-bilanciato Un esempio di mutua ricorsione con gli alberi bilanciati in altezza, proprietà più debole, si ottiene maggiore semplicità delle operazioni di ribilanciamento (niente

Dettagli

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 Bilanciamento negli alberi di ricerca @ G. Gini 2013 Dizionari Dizionario Insieme dinamico che implementa le seguenti funzionalità Cerca

Dettagli

lezione 9 min-heap binario Heap e Alberi posizionali generali

lezione 9 min-heap binario Heap e Alberi posizionali generali lezione 9 Heap e Alberi posizionali generali min-heap binario Un min-heap è un albero binario quasi completo in cui ogni nodo i diverso dalla radice soddisfa la seguente proprietà: il valore memorizzato

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Gli alberi binari di ricerca sono ottime strutture dati per memorizzare coppie di elementi (k, e) chiave elemento di un dizionario. Un albero binario di ricerca T è un albero binario

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

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

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE Prova di Algoritmi e s.d. (1o anno) 17 Settembre 2002 TESTO e RISPOSTE Esercizio 1 (punti 7 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali).

Dettagli

Liste concatenate. Violetta Lonati

Liste concatenate. Violetta Lonati Liste concatenate Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 2 novembre 2017 Violetta Lonati Liste

Dettagli

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari lgoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.

Dettagli

Divide et impera su alberi

Divide et impera su alberi Divide et impera su alberi Caso base: peru = null o una foglia Decomposizione: riformula il problema per i sottoalberi radicati nei figli di u. Ricombinazione: ottieniilrisultatoconricombina 1 Decomponibile(u):

Dettagli

Per semplicità eliminiamo le ripetizioni nell'albero.

Per semplicità eliminiamo le ripetizioni nell'albero. Albero binario di ricerca 20 40 100 95 Un albero binario di ricerca é un albero binario in cui ogni nodo ha un etichetta minore o uguale a quelle dei nodi nel sottoalbero radicato nel figlio destro e maggiore

Dettagli

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

Alberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati Alberi CORDA Informatica A. Ferrari Testi da Marco Bernardo Edoardo Bontà Dispense del Corso di Algoritmi e Strutture Dati Albero - definizione Albero Figli, fratelli, nodi, foglie Grado, livello, altezza,

Dettagli