Una definizione induttiva di albero binario astratto. Algoritmi e Laboratorio a.a Lezioni. Notazione lineare infissa per alberi binari.
|
|
- Clementina Castellani
- 5 anni fa
- Visualizzazioni
Transcript
1 Una definizione induttiva di albero binario astratto Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a Lezioni prof. Elio Giovannetti Parte 16 Alberi binari L'albero vuoto è un albero binario di elementi di tipo E: empty Se T1 e T2 sono due alberi binari di elementi di tipo E, ed el è un valore di tipo E: T1 T2 allora (T1 el T2) è un albero binario di elementi di tipo E: el el Quest' opera è pubblicata sotto una Licenza Creative Commons Attribution-NonCommercial-ShareAlike 2.5. T1 22/02/2007 E. Giovannetti - AlgELab Lez.16 2 T2 Notazione lineare infissa per alberi binari. Esempio: Notazioni prefissa e postfissa. Si noti che la scelta, nella rappresentazione lineare con parentesi, di scrivere la radice fra i due sottoalberi, è arbitraria; si può scegliere invece di scriverla prima dei due sottoalberi, oppure dopo; ad esempio, notazione prefissa: 12 (5 (8 ( ) ) (5 (4 ) (11 )) (20 (8 ) (16 (7 ) )) postfissa: ((( ) 8) (( 4) ( 11) 5) 5) per brevità, indichiamo qui l'albero vuoto con il simbolo, e omettiamo la coppia di parentesi più esterne: ((( ) 8 ) 5 (( 4 ) 5 ( 11 ))) 12 (( 8 ) 20 (( 7 ) 16 )) 22/02/2007 E. Giovannetti - AlgELab Lez Tuttavia la notazione infissa risulterà partcolarmente utile per gli alberi binari di ricerca. 7 4 Principio di induzione strutturale su alberi binari Se per una proprietà valgono i due fatti seguenti: essa vale per l'albero vuoto; quando vale per due alberi T1 e T2, in tal caso vale per l'albero (T1 el T2); allora essa vale per tutti gli alberi binari. Tuttavia, per dimostrare proprietà di alberi binari può essere necessario usare, invece del principio di induzione strutturale, il principio di induzione ordinario (ad es. sull'altezza dell'albero). 22/02/2007 E. Giovannetti - AlgELab Lez.16 5 Realizzazione di alberi binari "in stile C" Si rappresenta l'albero vuoto come null. Si rappresenta un albero non vuoto come una struttura. In Java (usato in stile C) ciò si realizza nel modo seguente: // in Java le strutture diventano oggetti protected String element; protected BinTree left, right; public BinTree(String element, BinTree left, BinTree right) { public BinTree(String element) { this(element, null, null); con metodi tutti statici (vedi slides successive). (Nota: il codice C vero e proprio sarà presentato direttamente nelle slides sugli alberi binari di ricerca) 22/02/2007 E. Giovannetti - AlgELab Lez
2 Alberi e ricorsione. Il tipo-albero, come il tipo-lista, è un tipo ricorsivo, perché è definito in termini di se stesso, in accordo con la definizione induttiva di albero in senso astratto. La programmazione ricorsiva è quindi particolarmente adatta a questo tipo di dato: in particolare, i problemi che richiedono una visita per profondità di tutto l'albero hanno soluzioni naturali con ricorsione ramificata, e quindi inerentemente ricorsive, cioè tali che le corrispondenti procedure iterative sono non banali e devono fare uso di uno stack esplicito; i problemi che invece richiedono di percorrere un solo cammino lineare nell'albero, ad esempio dalla radice a una foglia, e che quindi presentano una ricorsione lineare (anche se non di coda), possono essere risolti in modo naturale (e più efficiente) anche iterativamente (benché ciò risulti talvolta, come vedremo, un po' più complicato). 22/02/2007 E. Giovannetti - AlgELab Lez.16 7 Alberi binari alla C: visite in preordine e inordine. printpreorder(t.right); Eliminando la ricorsione di coda: while(t!= null) { t = t.right; Analoghe le due versioni della visita in inordine. 22/02/2007 E. Giovannetti - AlgELab Lez.16 8 Alberi binari alla C: visite in postordine. public static void printpostorder(bintree t) { printpostorder(t.left); printpostorder(t.right); Nessuna delle due chiamate ricorsive è di coda. Si noti che i tre generi di visita corrispondono alle tre notazioni lineari introdotte in precedenza. La sequenza che si ottiene dalla stampa in ciascun ordine è infatti la sequenza data dalla notazione corrispondente ove si tolgano le parentesi e i nodi vuoti. 22/02/2007 E. Giovannetti - AlgELab Lez.16 9 Alberi binari alla C: altri esempi. Si possono definire, per mezzo di metodi statici, tutte le procedure sugli alberi cui si è interessati. Esempi: altezza di un albero: import static java.lang.math.max; public static int height(bintree t) { if(t == null) return -1; (oppure 0, a seconda di come si conta) else return 1 + max(height(t.left), height(t.right)); numero dei nodi: ecc. 22/02/2007 E. Giovannetti - AlgELab Lez Alberi binari alla C: uso. Alberi e programmazione a oggetti Se la classe BinTree è definita in un package rectrees: import rectrees.*; import static rectrees.bintree.*; BinTree leaf1 = new BinTree("Ada"); BinTree leaf2 = new BinTree("Edo"); BinTree leaf = new BinTree("Ugo"); BinTree bt1 = new BinTree("Giorgio",leaf1,leaf2); BinTree bt2 = new BinTree("Paolo",leaf,null); BinTree bt = new BinTree("Eva",bt1,bt2); printpreorder(bt); System.out.println(); System.out.println(height(bt)); Nello stile di programmazione a oggetti, ovviamente, le procedure che agiscono sugli alberi non sono metodi statici che agiscono su alberi passati come argomenti, bensì metodi di istanza che agiscono sull'oggetto this. 22/02/2007 E. Giovannetti - AlgELab Lez /02/2007 E. Giovannetti - AlgELab Lez
3 Alberi e programmazione a oggetti. Analogamente al caso delle liste concatenate, nella realizzazione alla C l'albero vuoto non è un oggetto, e quindi non è possibile definire metodi di istanza che siano applicabili a qualunque albero. Due generi di soluzioni: mantenere l'albero come tipo ricorsivo, ma introdurre un oggetto esplicito per rappresentare l'albero vuoto; come nel caso delle liste, definire una classe (magari annidata) Nodo (o Node) ricorsiva, con una classe circondante Albero (o BinTree) che contiene solo il riferimento alla radice. La scelta più comune è la seconda, ma i due generi di soluzioni possono anche essere combinati, nel senso che si può decidere di rappresentare il nodo "vuoto" con un oggetto invece che con null (ciò ha vantaggi e svantaggi), come faremo nella implementazione degli alberi AVL. 22/02/2007 E. Giovannetti - AlgELab Lez ) Albero come tipo ricorsivo con albero vuoto come oggetto protected String element; protected BinTree left, right; public BinTree(String el, BinTree l, BinTree r) { element = el; left = l; right = r; public BinTree() { // rappresenta l'albero vuoto this(null,null,null); public BinTree(String element) { this(element, new BinTree(), new BinTree()); Svantaggi: occupazione di memoria; inoltre è possibile costruire alberi che hanno fisicamente in comune dei sottoalberi, e che quindi non sono, a rigore, dei veri alberi (ma piuttosto dei grafi). 22/02/2007 E. Giovannetti - AlgELab Lez Albero come tipo ricorsivo con albero vuoto come oggetto (continua) public boolean isempty() { \\ stabilisce se è vuoto return element == null && left == null && right == null; I metodi statici della realizzazione "alla C", che prendevano un albero come argomento, diventano metodi di istanza (aventi quindi come parametro implicito this). 22/02/2007 E. Giovannetti - AlgELab Lez Albero come tipo ric. con albero vuoto come oggetto: visite. La procedura alla C: printpreorder(t.right); diventa un metodo di istanza: if(!isempty()) { System.out.println(element); left.printpreorder(); right.printpreorder(); 22/02/2007 E. Giovannetti - AlgELab Lez Eliminazione della ricorsione di coda Naturalmente tale metodo ha una chiamata ricorsiva di coda. Come si elimina? Ricorda che un metodo di istanza è una procedura con un parametro implicito this, come se fosse: public static void printpreorder(bintree questo) { if(questo.isempty()) { System.out.println(questo.element); questo.left.printpreorder(); questo.printpreorder(); eliminandola si otterrebbe: public static void printpreorder(bintree questo) { while(!questo.isempty()) { questo.left.printpreorder(); questo = questo.right; 22/02/2007 E. Giovannetti - AlgELab Lez Eliminazione della ricorsione di coda (continua) Tuttavia, come sappiamo bene, il parametro implicito this non può essere modificato. Occorre quindi prima assegnarlo ad una variabile locale del metodo: BinTree t = this; while(!t.isempty()) { t.left.printpreorder(); t = t.right; Realizzazioni analoghe per la visita in inordine. 22/02/2007 E. Giovannetti - AlgELab Lez.16 18
4 Albero come tipo ric. con albero vuoto come oggetto: uso. BinTree empty = new BinTree(); BinTree leaf1 = new BinTree("Ada"); BinTree leaf2 = new BinTree("Edo"); BinTree leaf = new BinTree("Ugo"); BinTree bt1 = new BinTree("Aldo",leaf1,leaf2); BinTree bt2 = new BinTree("Luca",leaf, empty); BinTree bt = new BinTree("Eva",bt1,bt2); bt.printpreorder(); BinTree bt4 = new BinTree("Adamo",bt1,bt2); crea un albero che condivide con Eva tutti i discendenti. 2) Alberi binari con classe-nodo annidata nella classe-albero, e nodo vuoto rappresentato da null. In Java una classe annidata può essere dichiarata statica oppure no: a seconda della scelta, si possono avere delle lievi differenze di implementazione. (Lo studio preciso dei significati dei due generi di classi annidate esula dagli scopi del corso; chi è interessato può rivolgersi ai docenti). Nota. Nella terminologia ufficiale Java: una classe annidata non dichiarata statica viene detta classe interna (inner class). le classi annidate statiche non sono classi interne. 22/02/2007 E. Giovannetti - AlgELab Lez /02/2007 E. Giovannetti - AlgELab Lez Alberi binari con classe-nodo annidata: realizzazioni ricorsive dei metodi. Nella realizzazione con classe-nodo annidata, il tipo ricorsivo corrispondente al tipo-albero (BinTree) dell'esempio C è il tipo-nodo (Node) e non il tipo-albero. Pertanto un metodo pubblico richiamabile dall'esterno non può essere direttamente un metodo ricorsivo, bensì deve essere un semplice metodo che invoca un corrispondente metodo ricorsivo sui nodi. I metodi ricorsivi sui nodi possono essere in modo naturale definiti come metodi di istanza (= non statici) della classe nodo, oppure meno elegantemente come metodi statici della classe-albero. La classe-nodo non deve essere visibile dall'esterno: così non sarà possibile costruire alberi che condividano nodi, a meno che tale possibilità sia consapevolmente prevista, in modo controllato, dal realizzatore della classe-albero. 22/02/2007 E. Giovannetti - AlgELab Lez ) Alberi binari con classe Node annidata statica, e nodo vuoto rappresentato da null. private static class Node { String element; Node left, right; Node(String element, Node left, Node right) { 22/02/2007 E. Giovannetti - AlgELab Lez private static class Node { private Node root; // public BinTree() { root = null; 22/02/2007 E. Giovannetti - AlgELab Lez.16 2 Come nel caso delle liste, un metodo ricorsivo può essere definito nella classe Node: void printpreorder() { System.out.println(element); if(left!= null) left.printpreorder(); if(right!= null) right.printpreorder(); e richiamato sulla radice dal metodo omonimo della classe circondante: if(root!= null) root.printpreorder(); (attenzione: non è possibile eliminare la ricorsione di coda secondo il semplice schema illustrato in precedenza ) 22/02/2007 E. Giovannetti - AlgELab Lez
5 Alberi binari con classe Node annidata statica: esempi. Altezza dell'albero (vedi Prog. 2 corso A) Una possibile realizzazione Nella classe Node: int height() { int leftheight = -1; int rightheight = -1; if(left!= null) leftheight = left.height(); if(right!= null) rightheight = right.height(); return 1 + Math.max(leftHeight, rightheight); Nella classe BinTree: public int height() { return root.height(); Alberi binari con classe Node annidata statica: esempi. Altezza dell'albero (vedi Prog. 2 corso A) Un'altra realizzazione, meno object-oriented ma più facile: static int height(node nd) { if(nd == null) return -1; else return 1 + max(height(nd.left),height(nd.right)); Nella classe BinTree: public int height() { return Node.height(root); 22/02/2007 E. Giovannetti - AlgELab Lez /02/2007 E. Giovannetti - AlgELab Lez ) Alb. binari con classe Node interna (non statica). private class Node { String element; Node left, right; Node(String element, Node left, Node right) { private Node root; Esempio: altezza dell'albero Il metodo: int height(node nd) { if(nd == null) return -1; else return 1 + max(height(nd.left),height(nd.right)); non può essere statico, poiché la classe Node, tipo del parametro nd, non è statica; esso deve quindi essere dichiarato (come metodo di istanza) nella classe BinTree. L'altra realizzazione del metodo altezza (slide 25), invece, resta invariata. 22/02/2007 E. Giovannetti - AlgELab Lez /02/2007 E. Giovannetti - AlgELab Lez Esercizio Negli esempi precedenti di albero con classe-nodo interna privata non è descritto né specificato come si aggiungono (o tolgono) nodi ad un albero; non è quindi descritto come si fa a costruire un albero non vuoto. Negli alberi binari di ricerca verranno definiti gli opportuni metodi di inserimemto e cancellazione. Per sperimentare con alberi generici si definisca invece, nella classe BinTree richiamando un omonimo metodo ricorsivo di BinTree o di Node un metodo add il quale, dato un elemento (ad es. stringa, o intero, ecc.) e una stringa costituita da una sequenza di caratteri L (per Left) o R (per Right), scende nell'albero successivamente a destra o a sinistra e va a creare ed inserire una nuova foglia al fondo del cammino descritto. Se al fondo del cammino non c'è una foglia null in cui inserire un nuovo nodo, lancia un'eccezione. 22/02/2007 E. Giovannetti - AlgELab Lez Esercizio (continua) Se la foglia null viene raggiunta prima che la "stringa-path" sia terminata, il nuovo nodo viene creato ed inserito in quel punto, trascurando la parte restante della stringa-path. Esempio: BinTree bt = new BinTree(); bt.add("eva",""); bt.add("giorgio", "L"); bt.add("paolo", "RLLR"); // funziona, fermandosi alla prima R bt.add("ada", "LL"); bt.add("edo", "LR"); bt.add("ugo", "RR"); 22/02/2007 E. Giovannetti - AlgELab Lez
Una definizione induttiva di albero binario astratto. Algoritmi e Laboratorio a.a Lezioni. Notazioni prefissa e postfissa.
Una definizione induttiva di albero binario astratto Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2009-10 Lezioni
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
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,
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:
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
Alberi due-tre e alberi B
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Basi di Dati e Algoritmi, a.a. 2006-07 prof. Elio Giovannetti CREDITS Alcune slides con disegni
Alberi ed Alberi Binari di Ricerca
Alberi ed Alberi Binari di Ricerca Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell
Alberi e alberi binari I Un albero è un caso particolare di grafo
Alberi e alberi binari I Un albero è un caso particolare di grafo I I I I È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine
Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 8 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti
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
PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE
PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta
Algoritmi e Strutture di Dati
Algoritmi e Strutture di Dati Alberi radicati m.patrignani Nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi, ma non limitatamente,
Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE
Prova di Algoritmi e s.d. (1o anno) 17 Settembre 2002 TESTO e RISPOSTE Esercizio 1 (punti 7 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali).
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
Algoritmi e Laboratorio a.a Lezioni
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2009-10 Lezioni prof. Elio Giovannetti Lezione 34 Alberi di ricerca
Fondamenti teorici e programmazione
Fondamenti teorici e programmazione FTP(A) - modb Lezione 9 di ricerca binaria F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 1 liberi Un albero libero è un
Ripasso di programmazione ricorsiva
Ripasso di programmazione ricorsiva Ripasso di programmazione ricorsiva Algoritmo ricorsivo: algoritmo espresso in termini di se stesso. Programmazione iterativa e programmazione ricorsiva sono equivalenti.
Alberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati
Alberi CORDA Informatica A. Ferrari Testi da Marco Bernardo Edoardo Bontà Dispense del Corso di Algoritmi e Strutture Dati Albero - definizione Albero Figli, fratelli, nodi, foglie Grado, livello, altezza,
Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona
Lezione 15 programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Approfondimenti della programmazione OO Il modificatore abstract Le classi
Alberi binari di ricerca
Alberi binari di ricerca Definizione Un albero si dice albero binario di ricerca è un albero binario in cui: - Ogni nodo è caratterizzato un valore chiamato chiave - L insieme delle chiavi è totalmente
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,
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
Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 26-7 Lezioni prof. Elio Giovannetti Parte 21 Heapsort versione 2/2/27
d. Cancellazione del valore 5 e. Inserimento del valore 1
Esercizio1 Si consideri un albero binario non vuoto in cui a ciascun nodo v è associato un numero reale v.val. Scrivere un algoritmo che, dato in input l'albero T e un numero reale x, restituisce true
Esercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre.
Esercizi parte 3 RAPPRESENTAZIONE DI ALBERI BINARI 1. Definire una classe LinkedBinTree che implementa alberi binari in modo collegato, con nodi implementati come oggetti di classe BinNode. La classe dovra
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
L albero e un tipo astratto di dati usato per rappresentare relazioni gerarchiche.
Lezioni di C L albero e un tipo astratto di dati usato per rappresentare relazioni gerarchiche. qstruttura del file system qalbero genealogico qorganigramma qalbero di decisione q... s=6*8+((2+42)*(5+12)+987*7*123+15*54)
Laboratorio di Algoritmi
Laboratorio di Algoritmi Corso di Laurea in Matematica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Martedì 8.30-10.30 in aula 3 Mercoledì 10.30-13.30 in aula 2 Giovedì 15.30-18.30 in
Prova di Algoritmi e s.d. (1o anno) 7 Febbraio TESTO e RISPOSTE
Prova di Algoritmi e s.d. (1o anno) 7 Febbraio 2003 TESTO e RISPOSTE Esercizio 1 (punti 5 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali). Riportiamo
Alberi binari e alberi binari di ricerca
Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Alberi Un albero è una collezione non vuota di: nodi con nome e informazioni
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
Introduzione ai tipi parametrici (Generics) in Java. Algoritmi e Laboratorio a.a Lezioni. Nota linguistica
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR Algoritmi e Laboratorio a.a. 2009-10 Lezioni prof. Elio Giovannetti Lezione 18 Tipi generici in Java 5 e uso di void*
Alberi. Alberi: Esempio di utilizzo
Sono strutture dati del tipo: Alberi SOTTOALBERO n1 RADICE DELL ALBERO () n2 n n4 Profondità o Livello 0 1 n n n n n n 2 NODI FOGLIA (LEAF NODES) 1 Alberi: Esempio di utilizzo Rappresentazione di un file
Alberi binari e alberi binari di ricerca
Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica giovedì 9
Heap e Code di Priorità
Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non
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
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
Alberi Binari Alberi Binari
Alberi Binari Alberi Binari Un albero binario è una collezione di elementi organizzati in modo non sequenziale secondo un grafo aciclico caratterizzato da Radice Due sotto-alberi (il sotto-albero destro
Alberi binari di ricerca
Alberi binari di ricerca Definizione Un albero si dice albero binario di ricerca è un albero binario in cui: - Ogni nodo è caratterizzato un valore chiamato chiave - L insieme delle chiavi è totalmente
Esercizi su programmazione ricorsiva 3
su programmazione ricorsiva 3 Pericle Perazzo pericle.perazzo@iet.unipi.it http://www.iet.unipi.it/p.perazzo/teaching/ http://lettieri.iet.unipi.it/mailman/listinfo/algoritmi_e_basi 10 maggio 2013 Alberi
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]
Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z
Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Anno Accademico 2002-2003 9 luglio 2002-03 Domanda 1, punti 6 Si consideri la seguente classe Java, in cui,
In questa lezione. Alberi binari: [CLRS09] cap. 12 per la visita inorder. visite e esercizi su alberi binari. Prof. E. Fachini - Intr. Alg.
In questa lezione Alberi binari: visite e esercizi su alberi binari [CLRS09] cap. 12 per la visita inorder!1 Visita inordine di un albero binario visita inordine(x) se l albero x non è nullo allora visita
heap concetti ed applicazioni
heap concetti ed applicazioni ADT coda di priorità operazioni getfirst restituisce l'elemento nella struttura con massima priorità deletefirst cancella l'elemento nella struttura con massima priorità insert
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
Correzione prima esercitazione: metodo distinct
Alberi binari lezione 7 Correzione prima esercitazione: metodo distinct // post: ritorna il numero di elementi distinti del multi insieme public int distinct( ) { int d = 0; int i = 0; int j; // INV1:
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
23/10/2016. gli alberi. alcune definizioni. un esempio. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica.
gli alberi Un albero è una struttura dati NON LINEARE organizzata gerarchicamente. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica È costituito da un insieme di nodi collegati tra di loro:
Laboratorio di algoritmi e strutture dati
Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati mercoledì 25 novemb009 L esercitazione di oggi prevede di utilizzare gli alberi binari e in particolare gli alberi binari di ricerca.
Algoritmi e Strutture Dati
Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto
Algoritmi e Strutture Dati
Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto
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
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
Laboratorio di Python
, Esercizi su alberi Università di Bologna 16 maggio 2013 Sommario 1 2 Consegna non avvenuta Meno di 10 studenti hanno inviato l esercizio svolto. Definizione ricorsiva alberi binari Un albero binario
Strutture dati Alberi binari
Strutture dati - 2 - Alberi binari Definizione L albero è un insieme di elementi (nodi), sui quali è definita una relazione di discendenza con due proprietà: esiste un solo nodo radice senza predecessori
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello del 24 Gennaio 2007 Esercizio 1 (ASD) 1. Sia T (n) = T (n/6) + T (n/3) + Θ(n). Considerare ciascuna delle seguenti affermazioni
Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari
Algoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.
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
Informatica 3. LEZIONE 17: Alberi generici. Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza
Informatica 3 LEZIONE 17: Alberi generici Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza Informatica 3 Lezione 17 - Modulo 1 Definizione e ADT Introduzione
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
Spesso sono definite anche le seguenti operazioni:
Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una relazione d ordine. Sono definite almeno le seguenti operazioni:
Corso di Programmazione
II Accertamento del 27 Marzo 2001 / A Risolvi i seguenti esercizi, riporta le soluzioni in modo chiaro negli appositi riquadri e giustifica sinteticamente le risposte utilizzando i fogli protocollo. Cosa
algoritmi e strutture di dati
algoritmi e strutture di dati alberi radicati m.patrignani nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi, ma non limitatamente,
Laboratorio di algoritmi e strutture dati
Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati mercoledì 15 novemb017 L esercitazione di oggi prevede di utilizzare gli alberi binari e in particolare gli alberi binari di ricerca.
7. Settima esercitazione autoguidata: alberi binari
7. Settima esercitazione autoguidata: alberi binari 31 7.1. Costruzione di un albero (ALBERI1.C) Scrivere un programma che - riceve il nome di un file contenente la rappresentazione parentetica di un albero
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
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
In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.
In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni
Alberi binari: definizione e alcune proprietà
Alberi binari: definizione e alcune proprietà Alberi binari Un albero binario è un albero con radice in cui ogni nodo ha al più due figli. In maniera più formale: Definizione. (Alberi binari) Un albero
Esercizi proposti Risolvere i problemi seguenti su espressioni rappresentate come alberi binari, mediante la dichiarazione di tipo
Esercizi proposti 8 INDICZIONI DI CRTTERE GENERLE: Quando scrivete una funzione che ne utilizza una ausiliaria, chiedetevi sempre se l ausiliaria è necessaria, ricordando che è utile quando: (a) servono
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
Alberi. Definizione, realizzazione e algoritmi elementari. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 7
Alberi Definizione, realizzazione e algoritmi elementari Cosa sono gli alberi? Strutture gerarchiche di ogni tipo Generale Colonnello 1 Colonnello k Maggiore 1,1 Maggiore 1,m Capitano Maggiore k,1 Maggiore
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
Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari
lgoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.
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
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
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
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
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
Corso di Programmazione
Corso di Programmazione II Accertamento del 15 Marzo 2005 / A cognome e nome Risolvi i seguenti esercizi, riporta le soluzioni in modo chiaro negli appositi spazi e giustifica sinteticamente le risposte.
Il principio di induzione. La Ricorsione. Il fattoriale: iterativo. Il fattoriale: ricorsivo. P (0) P (n) P (n + 1) per ogni n
Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche La Ricorsione Prof. Stefano Guerrini guerrini@di.uniroma1.it Programmazione II (can. P-Z) A.A. 2005-06 Il principio di induzione
Il vettore e la lista concatenate (o catena) sono due esempi di strutture interne.
Strutture dati PILA e CODA Le strutture dati si dividono in interne e astratte. Quelle astratte sono rappresentazioni dei dati di un problema che rispecchiano le proprietà dei dati e le relazioni usate
Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola
Algoritmi e strutture dati 16 Dicembre 04 Canali A L e M Z Cognome Nome Matricola Problema 1 (6 punti) Determinare la funzione calcolata dal metodo mistero e la sua complessità computazionale in funzione
argomenti alberi terminologia tipo di dato astratto albero tipo astratto, implementazione, algoritmi es.: radice R con n sottoalberi radice
argomenti alberi tipo astratto, implementazione, algoritmi! tipo astratto albero! definizione! implementazione in Java! algoritmi di visita! alberi binari! implementazione di alberi binari in Java ASD
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
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
Appunti senza pretese di P2+Lab: Pensare ricorsivamente, programmare iterativamente, parte II: Implementazione iterativa di Mergesort
Appunti senza pretese di P2+Lab: Pensare ricorsivamente, programmare iterativamente, parte II: Implementazione iterativa di Mergesort Alessandro Panconesi DSI, La Sapienza via Salaria 113, piano terzo
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
Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una
Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una relazione d ordine. Sono definite almeno le seguenti operazioni:
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
Alberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3
Alberi binari (radicati e ordinati) Il figlio sinistro della radice Il padre del nodo 5 e del nodo 3 4 3 Il figlio sinistro del nodo 2 2 5 1 6 7 8 9 La radice Il figlio destro della radice una foglia Figlio
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Ereditarietà e Polimorfismo: Polimorfismo - a Programmare con il Polimorfismo versione 1.2 Questo lavoro è concesso in uso secondo i termini di
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
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Strutture dati elementari Alberto Montresor Università di Trento This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy
Laboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Prof. Aniello Murano Alberi Binari di Ricerca Cancellazione di un nodo Corso di Laurea Codice insegnamento Email docente Anno accademico Informatica 13917 murano@na.infn.it
Algoritmi e Strutture Dati. Lezione 3
Algoritmi e Strutture Dati Lezione 3 www.iet.unipi.it/a.virdis Antonio Virdis antonio.virdis@unipi.it 1 Sommario Alberi Binari di Ricerca Gestione Stringhe Progettazione Esercizi 2 3 4 Alberi Binari 10
Laboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Alberi binari di ricerca 2 1 Alberi L albero è un tipo astratto di dato utilizzato per rappresentare
Esercitazione 1. Possibile soluzione
Esercitazione 1 1. Scrivere una classe Java BTreeNode per rappresentare nodi di alberi binari. Assumere che il contenuto informativo di ogni nodo sia rappresentato da un intero. 2. Fornire un implementazione