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

Dimensione: px
Iniziare la visualizzazioe della pagina:

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

Transcript

1 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 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. 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 Algoritmi sui BST Alcuni algoritmi interessanti Ricerca Inserimento Cancellazione Le operazioni che modificano l albero devono lasciare inalterate le proprietà di ordinamento 4 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 Nota: il numero di passi/confronti da compiere è, al più, pari all altezza dell albero! 1 5 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. 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 c. Se è maggiore, assegnare ad x il figlio sinistro e procedere con 6 Università di Bologna A.A. 00/009

2 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 16 Algoritmi Inserimento Versione Ricorsiva 1. Sia x il nodo che identifica il sotto-albero in cui inserire l elemento e. Se x è nullo (albero vuoto), restituire un nuovo nodo contenente l elemento da inserire e terminare. 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. 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 Algoritmi - Rimozione Caso 1: il nodo da rimuovere è una foglia (1) Ricerca del nodo Rimozione dal padre Algoritmi Rimozione Caso : 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 Algoritmi Rimozione Caso : 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 11 Università di Bologna A.A. 00/009

3 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 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) 1 14 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 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 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 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; 17 1 Università di Bologna A.A. 00/009

4 Codice BinarySearchTree - Cancellazione public void remove(t x) root = remove(x, root); 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; 19 0 Codice BinarySearchTree - Svuotamento public void makeempty() root = null; 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(); 1 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; 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(); return t; Ricerca la foglia più a sinistra 4 Università di Bologna A.A. 00/009

5 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 Codice BinarySearchTree - Test Albero Vuoto public boolean isempty() return root == null; return t; 5 6 Due dimensioni: Visite Visite Esempio 5 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. 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 Visita in-order, leftmost Visita in-order, rightmost Visita post-order, rightmost 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 Realizzazione UML 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) 9 0 Università di Bologna A.A. 00/009

6 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); 1 Codice BinarySearchTree - Visite public void postordernavigation( BinarySearchTreeNavigator<T> nav, NavigationType type) if (root!= null) root.postordernavigation(nav, type); 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 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); if (last!= null) last.inordernavigation(nav, type); poi la radice Prima il primo nodo figlio ed infine il secondo nodo figlio 4 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); if (last!= null) last.postordernavigation(nav, type); nav.doaction(element); poi la radice Prima i due nodi figli 5 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(); 6 Università di Bologna A.A. 00/009

7 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(); 7 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; Codice Test - Visita Albero public void testprefixnavigation() ListBSTNavigator<Integer> nav = new ListBSTNavigator<Integer>(); BinarySearchTree<Integer> t = new BinarySearchTree<Integer>(); t.insert(5); t.insert(); t.insert(); t.insert(4); t.insert(7); t.insert(); Creazione dell albero binario t.preordernavigation(nav, NavigationType.LEFTMOST); Codice Test - Visita Albero List<Integer> result = nav.getlist(); assertequals(5, result.get(0)); assertequals(, result.get(1)); assertequals(, result.get()); assertequals(4, result.get()); 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 Viene effettuata una visita di tipo pre-order, leftmost 9 40 Codice Test - Visita Albero public void testinfixnavigation() ListBSTNavigator<Integer> nav = new ListBSTNavigator<Integer>(); BinarySearchTree<Integer> t = new BinarySearchTree<Integer>(); t.insert(5); t.insert(); t.insert(); t.insert(4); t.insert(7); t.insert(); Creazione dell albero binario Codice Test - Visita Albero List<Integer> result = nav.getlist(); assertequals(, result.get(0)); assertequals(4, result.get(1)); assertequals(, result.get()); assertequals(, result.get()); 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 t.inordernavigation(nav, NavigationType.LEFTMOST); Viene effettuata una visita di tipo in-order, leftmost 41 4 Università di Bologna A.A. 00/009

8 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(); t.insert(); 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 4 Codice Test - Visita Albero List<Integer> result = nav.getlist(); assertequals(, result.get(0)); assertequals(7, result.get(1)); assertequals(5, result.get()); assertequals(4, result.get()); assertequals(, 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, rightmost 44 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 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 Rotazioni Si supponga di disporre di un albero sbilanciato è possibile bilanciarlo tramite opportune rotazioni Ruotare il nodo verso sinistra in modo che diventi la radice dell albero il padre di () diventa il suo sotto-albero sinistro 15 Rotazioni Rotazione 1: il nodo diventa la radice 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 (1) diventa il sotto-albero destro di Università di Bologna A.A. 00/009

9 Rotazioni Rotazione : il nodo 15 diventa la radice e l albero risulta bilanciato 15 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! 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) 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? 51 5 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 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 5 54 Università di Bologna A.A. 00/009

10 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(); 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! Iteratore Pre-Order Pre-Order GO!!! Inizializzazione 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 Situazione dopo l inizializzazione Stack: Stack Top Considerazioni Il top dello stack è il nodo che contiene il successivo elemento da analizzare (restituire) Se lo stack è vuoto, fine dell iterazione Pre-Order GO!!! Pre-Order GO!!! Esecuzione next() una volta Stack: Output: Stack Top Esecuzione next() due volte Stack: 5 Output: Stack Top Università di Bologna A.A. 00/009

11 Pre-Order GO!!! Esecuzione next() tre volte Stack: 5 Output: Stack Top Pre-Order GO!!! Esecuzione next() quattro volte Stack: 6 Output: 5 Stack Top eccetera 6 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 = root; 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>>(); this.nodestovisit.push(root); public Iterator<T> iterator() public boolean hasnext() return new PreorderIterator<T>(root); return!nodestovisit.isempty(); 6 64 Inserisce nello stack la radice dell albero Codice Iterator Pre-order 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 Codice Iterator Pre-order public void remove() throw new UnsupportedOperationException(); Operazione non supportata return result; restituisce l elemento contenuto nel nodo estratto inserisce nello stack prima il figlio destro, poi quello sinistro Università di Bologna A.A. 00/009

12 Iteratore In-Order Inizializzazione 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 In-Order GO!!! Situazione dopo l inizializzazione Stack: Stack Top In-Order GO!!! Esecuzione next() una volta Stack: Output: Stack Top In-Order GO!!! Esecuzione next() due volte Stack: 5 Output: Stack Top In-Order GO!!! Esecuzione next() tre volte Stack: 6 Output: 5 Stack Top In-Order GO!!! Esecuzione next() quattro volte Stack: Output: 5 6 Stack Top eccetera 7 Università di Bologna A.A. 00/009

13 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 = root; public Iterator<T> iterator() return new InorderIterator<T>(root); 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); 7 74 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 In-order public boolean hasnext() return!nodestovisit.isempty(); public T next() if (!hasnext()) throw new NoSuchElementException(); Estrae un nodo dallo stack, BinaryNode<T> currentnode = nodestovisit.pop(); 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 pushleft(currentnode.getright()); restituisce return currentnode.getelement(); l elemento contenuto nel nodo estratto 76 Codice Iterator In-order Iteratore Post-Order public void remove() throw new UnsupportedOperationException(); Operazione non supportata 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! 77 7 Università di Bologna A.A. 00/009

14 La foglia più a sinistra Qual è la foglia più a sinistra? Questa! Se il nodo corrente è null, terminare. Inserire il nodo corrente nello stack. 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 Post-Order GO!!! Situazione dopo l inizializzazione Stack: Stack Top Nodo Corrente: null Post-Order GO!!! Esecuzione next() una volta Vecchio Nodo Corrente: null Stack Peek: Stack: Stack Top Output: Nodo Corrente: Post-Order GO!!! Esecuzione next() due volte Vecchio Nodo Corrente: Stack Peek: Stack: 5 Stack Top Output: 6 Nodo Corrente: 6 [6 entra ed esce dallo stack] Post-Order GO!!! Esecuzione next() tre volte Vecchio Nodo Corrente: 6 Stack Peek: 5 Stack: Stack Top Output: 6 5 Nodo Corrente: Università di Bologna A.A. 00/009

15 Post-Order GO!!! Esecuzione next() quattro volte Vecchio Nodo Corrente: 5 Stack Peek: Stack: Stack Top Output: 6 5 Nodo Corrente: Post-Order GO!!! Esecuzione next() cinque volte Vecchio Nodo Corrente: Stack Peek: Stack: 15 Stack Top Output: Nodo Corrente: 1 [1 entra ed esce dallo stack] eccetera 6 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 = root; 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); public Iterator<T> iterator() return new PostorderIterator<T>(root); 7 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 Post-order public boolean hasnext() return!nodestovisit.isempty(); public T next() if (!hasnext()) throw new NoSuchElementException(); Ottiene un riferimen to al nodo in cima allo stack, BinaryNode<T> nextnode = nodestovisit.peek(); if (nextnode.getright()!= currentnode) pushleftorright(nextnode.getright()); 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 currentnode = nodestovisit.pop(); estrae il nuovo nodo return currentnode.getelement(); corrente dallo stack e restituisce l elemento contenuto in esso 90 Università di Bologna A.A. 00/009

16 Codice Iterator Post-order public void remove() throw new UnsupportedOperationException(); Operazione non supportata 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); 91 9 Per giocare un po Esercizi MOLTO consigliati Realizzare gli iteratori rightmost 9 Università di Bologna A.A. 00/009

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

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 : 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. 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

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

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

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

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

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

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

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

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

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

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

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

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

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

Heap e code di priorità

Heap e code di priorità Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010

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

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

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 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

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

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

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

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

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

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 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

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

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

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

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

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

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

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

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario Implementazione con Vettori Implementazione con Strutture Collegate Concetti

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

Esercitazione 6. Alberi binari di ricerca

Esercitazione 6. Alberi binari di ricerca Esercitazione 6 Alberi binari di ricerca Struttura base Rappresentabile attraverso una struttura dati concatenata in cui ogni nodo è un oggetto di tipo struttura Ogni nodo contiene: campo chiave (key)

Dettagli

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 12 Array e Oggetti A. Miola Dicembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Array e Oggetti 1 Contenuti Array paralleli

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

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

Politecnico di Milano

Politecnico di Milano Politecnico di Milano Anno accademico 2011-2012 Ingegneria del Software Appello del 29 giugno 2012 Cognome: Nome: Matricola: Sezione (segnarne una): Baresi Ghezzi San Pietro Istruzioni 1. La mancata indicazione

Dettagli

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

Albero Binario GT 7.3. interfacce di Positio<E>, Tree<E>, e BinaryTree<E>; il file TestLinkedBinaryTree.java Laboratorio Java Albero Binario GT 7.3 Esercitazione Sono dati : interfacce di Positio, Tree, e BinaryTree; il file TestLinkedBinaryTree.java e i file.class che implementano le interfacce www.dei.unipd.it/corsi/fi2ae

Dettagli

Alberi di ricerca binari

Alberi di ricerca binari Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Introduzione Gli alberi di ricerca binari (Binary Search Tree, o BST) sono una struttura di dati che supporta in modo

Dettagli

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

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

Dettagli

Espressioni aritmetiche

Espressioni aritmetiche Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:

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

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

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata heap heap concetti ed applicazioni heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. tutte le foglie sono a sinistra ma non è un BST!! 3. ogni nodo contiene una chiave maggiore

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

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

STRUTTURE DATI: OLTRE GLI ARRAY LISTE STRUTTURE DATI: OLTRE GLI ARRAY le strutture dati progettate per ospitare una collezione di elementi, sono variazioni di array Ma l'array ha dimensione fissa anche in Java determinata a priori, in linguaggi

Dettagli

Espressioni: da dove si parte. Critiche al modello. Critiche al modello. Critiche al modello. Risultato. Fondamenti di Informatica T2 Modulo 2

Espressioni: da dove si parte. Critiche al modello. Critiche al modello. Critiche al modello. Risultato. Fondamenti di Informatica T2 Modulo 2 Università degli Studi di Bologna Facoltà di Ingegneria Espressioni: da dove si parte Fondamenti di Informatica T2 Modulo 2 Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009 La struttura

Dettagli

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

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2 INDICI MULTILIVELLO DINAMICI Indici multilivello dinamici (B-alberi e B + -alberi) Gli indici multilivello dinamici (B-alberi e B + -alberi) sono casi speciali di strutture ad albero. Un albero è formato

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 dell 8 Febbraio 2005 Esercizio 1 (ASD) 1. Dire quale delle seguenti affermazioni è vera giustificando la risposta. (a) lg

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Esercizi su alberi binari

Esercizi su alberi binari Esercizi su alberi binari Esercizi svolti: Determinazione nodi contenti verifica completezza verifica quasi completezza lunghezza del cammino interno determinazione ultima foglia in un quasi completo verifica

Dettagli

Note per la Lezione 4 Ugo Vaccaro

Note per la Lezione 4 Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che

Dettagli

Alberi. In informatica, un albero è un modello astratto di una struttura dati gerarchica

Alberi. In informatica, un albero è un modello astratto di una struttura dati gerarchica Il TDA Tree Alberi In informatica, un albero è un modello astratto di una struttura dati gerarchica Struttura dati non lineare Si pensi al file system di un sistema operativo Le relazioni in un albero

Dettagli

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

Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato Alessandro Panconesi DSI, La Sapienza via Salaria 113, 00198, Roma Consideriamo un problema che ci consentirá di vedere un

Dettagli

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

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei Alberi Alberi: definizioni Alberi Binari Esercizi su alberi binari: metodi ricorsivi Struttura dati per alberi generici 1 Alberi Gli alberi sono strutture dati naturalmente ricorsive Un albero è un particolare

Dettagli

Esercizi Strutture dati di tipo astratto

Esercizi Strutture dati di tipo astratto Salvatore Cuomo Esercizi Strutture dati di tipo astratto Lezione n. 20 Parole chiave: Strutture dati, pile code, liste Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio

Dettagli

Algoritmi e Strutture Dati. Alberi

Algoritmi e Strutture Dati. Alberi Algoritmi e Strutture Dati Alberi Alberto Montresor Università di Trento 2017/10/19 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Sommario 1 Introduzione

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Alberi Rosso-Neri (RB-Trees) Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2007/08 Alberi Rosso-Neri: definizione Un albero rosso-nero

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario

Dettagli

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

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica

Dettagli

Tipi di dato e Strutture dati elementari

Tipi di dato e Strutture dati elementari Tipi di dato e Strutture dati elementari Ing. Paolo Craca Anno accademico 2007/2008 Tipi di dato e Strutture dati elementari 1 / 40 Cosa vedremo in questo seminario 1 Introduzione 2 Pile 3 Code 4 5 Bibliografia

Dettagli

ricerca di un elemento, verifica dell appartenenza di un elemento

ricerca di un elemento, verifica dell appartenenza di un elemento Alberi Binari di Ricerca Gli alberi binari di ricerca (o, alberi di ricerca binaria) sono strutture dati che consentono, su un insieme di elementi con un ordine totale le operazioni di: ricerca di un elemento,

Dettagli

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

Informatica 3. Informatica 3. LEZIONE 14: Alberi binari: introduzione. Lezione 14 - Modulo 1. Definizioni. Introduzione. Definizioni e proprietà Informatica 3 Informatica 3 LEZIONE 14: Alberi binari: introduzione Lezione 14 - Modulo 1 Modulo 1: Definizioni e proprietà Modulo 2: Attraversamento degli alberi binari Definizioni e proprietà Politecnico

Dettagli

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

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria Sapienza - Università di Roma Facoltà di Ingegneria Requisiti Corso di PROGETTAZIONE DEL SOFTWARE I (Corso di Laurea in Ingegneria Informatica) Prof. Giuseppe De Giacomo Canali A-L & M-Z A.A. 2006-07 Compito

Dettagli

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. 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 Un albero è un insieme di oggetti, chiamati nodi, su cui è definita una relazione binaria G(x, y) che leggiamo x è genitore di y tale che: 1. esiste un unico nodo, chiamato radice, che non ha genitori;

Dettagli

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

Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1 Si definisca Interval Tree un albero binario di ricerca le

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

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

Informatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico. Informatica 3 Informatica 3 LEZIONE 17: lberi generici Lezione 17 - Modulo 1 Modulo 1: Definizione e DT Modulo 2: Implementazione Modulo 3: lberi e classi di equivalenza Definizione e DT Politecnico di

Dettagli

ADT Coda con priorità

ADT Coda con priorità Code con priorità ADT Coda con priorità Una coda con priorità è una struttura dati dinamica che permette di gestire una collezione di dati con chiave numerica. Una coda con priorità offre le operazioni

Dettagli

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

Le liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5 Le liste ADT e strutture dati per la rappresentazione di sequenze L ADT delle liste Una lista di valori di tipo A è una sequenza finita: a1, a2, L, an dove ai A, per ogni i valore lunghezza posizione L

Dettagli

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

Capitolo 17. Introduzione alle strutture di dati. Capitolo 17 Introduzione alle strutture di dati Capitolo 17 Introduzione alle strutture di dati 1 Figura 1 Inserire un elemento in una lista concatenata 2 Figura 2 Un iteratore di lista 3 Figura 3 Una visione astratta dell iteratore di lista 4 File

Dettagli

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento. Un ulteriore semplificazione si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine (e l inizio) di una lista. Questa soluzione va contemplata

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 29 novembre 2010 1 Rotazioni semplici in ABR Si consideri l operazione di rotazione semplice applicata

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento

Dettagli

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

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Algoritmi e Strutture Dati + Lab A.A. / Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro ALBERO

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Damiano Macedonio Università Ca' Foscari di Venezia mace@unive.it Original work Copyright Alberto Montresor, University of Trento (http://www.dit.unitn.it/~montreso/asd/index.shtml)

Dettagli

Programmazione ad Oggetti

Programmazione ad Oggetti Programmazione ad Oggetti (Esercizi) Esercizio 5 Sia data la seguente classe che rappresenta un conto bancario class Conto private double saldo; public Conto(double saldo) throws IllegalArgumentException

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento! Selection Sort! Quick Sort! Lower bound alla complessità degli algoritmi di ordinamento Ordinamento 1 Selection Sort SelectionSort(dati[]) { for (i=0; idati.length-1; i++) { min

Dettagli

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

Capitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73 Capitolo 9 Tipi enumerativi, tipi generici e interfacce c 2005 Pearson Education Italia Capitolo 9-1 / 73 Sommario: Tipi enumerativi, tipi generici e interfacce 1 Definizione di tipi enumerativi La classe

Dettagli

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa: Come nella Mappa: un Dizionario è un contenitore di elementi del tipo (k,v) dove k è la chiave e v è il suo corrispondente valore. ogni elemento (k,v) viene detto entrata (entry) del Dizionario. chiavi

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità Laboratorio di Algoritmi e Strutture Dati Code con Priorità Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso

Dettagli

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

Liste concatenate. Collezione ordinata di nodi. Carlo Paolo Simona. Anna. ciascun nodo contiene due riferimenti: Liste concatenate Collezione ordinata di nodi head tail next next next next element element element element Ø Anna Carlo Paolo Simona ciascun nodo contiene due riferimenti: - un riferimento "element" a

Dettagli

alberi tipo astratto, implementazione, algoritmi

alberi tipo astratto, implementazione, algoritmi alberi tipo astratto, implementazione, algoritmi argomenti tipo astratto albero definizione implementazione in Java algoritmi di visita alberi binari implementazione di alberi binari in Java ASD - Alberi

Dettagli

Lezione 9 Alberi binari di ricerca

Lezione 9 Alberi binari di ricerca Lezione 9 Alberi binari di ricerca Rossano Venturini rossano.venturini@unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 1 Lista monodirezionale Scrivere

Dettagli

Laboratorio di Python

Laboratorio di Python Laboratorio di Python Alberi binari Lab15 12 Maggio 2017 Outline Correzione esercizi per oggi Alberi binari Teoria Esercizi Esercizi per casa Saluti Esercizio 1 per casa Scrivere una funzione palindroma(s)

Dettagli

type keytype: integer; Tree: "Node; record Node = key: keytype; parent: "Node ; left: Tree; right: Tree; Figure 1: Tipi di dato per rappresentare albe

type keytype: integer; Tree: Node; record Node = key: keytype; parent: Node ; left: Tree; right: Tree; Figure 1: Tipi di dato per rappresentare albe 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

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento

Dettagli

Algoritmi e Strutture Dati Laboratorio 15/12/2008. Daniele Loiacono

Algoritmi e Strutture Dati Laboratorio 15/12/2008. Daniele Loiacono Algoritmi e Strutture Dati Laboratorio 15/12/2008 Problema della compressione Rappresentare i dati in modo efficiente Impiegare il numero minore di bit per la rappresentazione Goal: risparmio spazio su

Dettagli

Grafi: visita generica

Grafi: visita generica .. Grafi: visita generica Una presentazione alternativa (con ulteriori dettagli) Algoritmi di visita Scopo: visitare tutti i vertici di un grafo (si osservi che per poter visitare un vertice occorre prima

Dettagli

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

Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo Laboratorio 9 ( Java ) Classe astratta per BFS su grafo Testo esercitazione Scaricare il file EseBFS.zip, scompattarlo ed analizzare le classi in esso contenute con particolare attenzione alla classe astratta

Dettagli

Argomenti della lezione. Tipo di dato astratto. Array. Tipo di dato Lista. Liste Implementazione di liste in Java Stack Code

Argomenti della lezione. Tipo di dato astratto. Array. Tipo di dato Lista. Liste Implementazione di liste in Java Stack Code Argomenti della lezione! Tipi di dato astratti! Strutture dati elementari Liste Implementazione di liste in Java Stack Code! Esempi di applicazione Tipo di dato astratto! Tipo di dato astratto o ADT (Abstract

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,

Dettagli

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

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro

Dettagli