Binary Search Trees (BST) Algoritmi sui BST. Algoritmi - Ricerca. Fondamenti di Informatica T2 Modulo 2. Università di Bologna A.A.
|
|
- Paolo Fede
- 6 anni fa
- Visualizzazioni
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 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
DettagliProssime 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
DettagliADT 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
DettagliALBERI : 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
DettagliAlberi. 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
DettagliAlberi 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
DettagliAlberi 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
DettagliUn 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
DettagliIndice 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
DettagliLezione 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
DettagliAlgoritmi 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]
DettagliAlberi 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
DettagliEsercizio 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
DettagliLE 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
DettagliAlbero 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
DettagliAlberi 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
DettagliADT 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:
DettagliImplementazione 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
DettagliAlberi 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
DettagliHeap 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
Dettaglidizionari 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
DettagliMetodi 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
DettagliAlberi 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,
DettagliAlberi 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
DettagliOrganigramma 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
DettagliImplementazione 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
DettagliSul 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.
DettagliGLI 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
DettagliIl 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
DettagliAlgoritmi 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
DettagliAlberi 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
DettagliAlberi 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,
DettagliAlberi. 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
DettagliAlberi 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
DettagliIn 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
DettagliAlberi ( 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,
DettagliLaboratorio 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
DettagliAlberi 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
DettagliEsercitazione 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)
DettagliArray 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
DettagliUn 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
DettagliPer 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
DettagliPolitecnico 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
DettagliAlbero 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
DettagliAlberi 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
DettagliAlberi. 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
DettagliEspressioni 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:
DettagliDivide 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):
Dettagliheap 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
Dettaglilezione 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
DettagliSTRUTTURE 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
DettagliEspressioni: 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
DettagliIndici 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
DettagliAlgoritmi 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
DettagliAlgoritmi 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
DettagliEsercizi 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
DettagliNote 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
DettagliAlberi. 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
DettagliAppunti 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
DettagliAlberi. 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
DettagliEsercizi 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
DettagliAlgoritmi 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
DettagliAlgoritmi 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
DettagliFondamenti 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
DettagliStrutture 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
DettagliTipi 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
Dettagliricerca 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,
DettagliInformatica 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
DettagliSOLUZIONE. 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
DettagliAlberi. 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;
DettagliDati 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
DettagliAlgoritmi 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
DettagliInformatica 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
DettagliADT 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
DettagliLe 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
DettagliCapitolo 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
DettagliQuesta 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
DettagliEsercizi 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
DettagliLaboratorio 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
DettagliAlberi 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
DettagliAlberi 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)
DettagliProgrammazione 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
DettagliAlgoritmi 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
DettagliCapitolo 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
DettagliADT 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
DettagliLaboratorio 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
DettagliListe 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
Dettaglialberi 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
DettagliLezione 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
DettagliLaboratorio 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)
Dettaglitype 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
DettagliFondamenti 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
DettagliAlgoritmi 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
DettagliGrafi: 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
DettagliLaboratorio 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
DettagliArgomenti 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
DettagliEsercizi 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,
DettagliIl 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