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

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

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

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

Alberi. Definizioni principali

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

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

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

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

Esercitazione 3. Heapsort

Laboratorio di Python

Alberi binari e alberi binari di ricerca

Lezione 12 Tabelle Hash

Espressioni aritmetiche

Note per la Lezione 4 Ugo Vaccaro

Alberi ed Alberi Binari

Esercizi su alberi binari

Esercitazione 6. Alberi binari di ricerca

Alberi Binari di Ricerca

Lezione 7 Alberi binari: visite e alberi di ricerca

Per semplicità eliminiamo le ripetizioni nell'albero.

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

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

Introduzione ai grafi. Introduzione ai grafi p. 1/2

Algoritmi e Strutture Dati. HeapSort

alberi completamente sbilanciati

Un albero completamente bilanciato o pieno (full) alberi completamente sbilanciati. Un albero binario completo

Laboratorio di Python

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione

Pumping lemma per i linguaggi Context-free

Algoritmi e Strutture Dati

Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen

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

Algoritmi e Strutture Dati

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

Alberto Montresor Università di Trento

Università degli Studi di L Aquila Facoltà di Scienze M.F.N. Corso di Laurea in Informatica. Modulo di Laboratorio di Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Heap e code di priorità

Verificare se un albero binario è bilanciato

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

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

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

3.4 Metodo di Branch and Bound

Esercizi proposti 10

Tipi di dato e Strutture dati elementari

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.

Esercitazioni di Algoritmi e Strutture Dati

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

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

Programmazione Funzionale

Algoritmi e Principi dell'informatica Seconda Prova in Itinere - 14 Febbraio 2014

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

Alberi binari di ricerca

Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

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

Esempio: rappresentare gli insiemi

Alberi: definizioni e dimostrazioni induttive.

Esercizi Capitolo 6 - Alberi binari di ricerca

Grafi diretti. Un grafo diretto (o grafo orientato) G è una coppia (V,E) dove. V è u n i n s i e m e d i nodi (o vertici);

TRIE (albero digitale di ricerca)

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

Lezione 5. Giuditta Franco. 19 Febbraio 2008

Problemi, istanze, soluzioni

Il valore di flusso che si ottiene è

METODI DELLA RICERCA OPERATIVA

In questa lezione Alberi binari di ricerca: la cancellazione

Problemi di ordinamento

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi

Alberi binari. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Corso di elettrotecnica Materiale didattico: i grafi

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

GRAFI. fig.1 - GRAFI (1) Si avvisa il lettore che certe definizioni che verranno date differiscono da quelle presenti in letteratura.

Suffix Trees. Docente: Nicolò Cesa-Bianchi versione 21 settembre 2017

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

Ingegneria degli Algoritmi (II parte pratica)

Implementazione dell albero binario in linguaggio C++

Costruzione dell insieme dei Follow

Figura 1: 1) Si scriva la formulazione del problema come problema di PLI (con un numero minimo di vincoli) e la matrice dei vincoli.

Alberi Binario in Java

Il Branch & Bound. Definizione 1. Sia S R n. La famiglia S = {S 1, S 2,..., S k S} tale che S 1 S 2 S k = S viene detta suddivisione di S.

Algoritmi e Strutture Dati. Alberi

ADT Coda con priorità

Alberi binari ( 7.3)

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

Introduzione alla gestione delle collezioni di oggetti

Alberi binari. Esercizi su alberi binari

lezione 9 min-heap binario Heap e Alberi posizionali generali

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

ricerca di un elemento, verifica dell appartenenza di un elemento

liste ogni nodo ha un successore, tranne l ultimo della lista che ne ha zero; alberi binari ogni nodo ha zero, uno oppure due figli

ALGORITMI E STRUTTURE DATI

Alberi Binari di Ricerca

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


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

Algoritmi e Strutture Dati

Progettazione di algoritmi

Implementazione ADT: Alberi

T 1 =1. n 4 n log n. T n =3 T. Esercizio 1 (6 punti) A.A Esame di Algoritmi e strutture dati 18 luglio 2008

Transcript:

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 grafo diretto in cui un nodo particolare è detto radice Ogni altro nodo dell'albero, tranne la radice, ha un solo nodo padre; un arco parte dal padre verso il figlio, che è radice di un sottoalbero Ogni nodo di un albero può avere zero o più nodi figli, quindi zero o più sottoalberi 2

Alberi I figli di un nodo sono una lista ordinata Un nodo che non ha figli è detto foglia Un nodo che ha almeno un figlio è detto nodo interno Dalle definizioni sopra discende che in un albero non ci sono cicli Un cammino è una sequenza di nodi e archi alternati che parte dalla radice e finisce in una foglia 3

Alberi L'albero più piccolo è formato da un solo nodo che è sia radice che foglia Esiste anche il concetto di albero vuoto, che non ha né nodi né archi Un insieme di alberi disgiunti si chiama foresta I nodi di un albero possono contenere una qualsiasi informazione, ad esempio un numero intero int o Integer, una String, un Object in generale 4

Alberi Binari Il tipo di alberi più semplice è quello degli alberi binari In un albero binario un nodo può avere zero, uno o due figli Nel caso di due figli, essi si chiamano sottoalbero sinistro e sottoalbero destro Per gli alberi binari definiamo una classe BinTree<E> dove E è una generica classe che rappresenta l'informazione associata ai nodi 5

Alberi Binari Si veda il codice allegato per la definizione della classe Si noti che le variabili istanza left e right sono di tipo BinTree<E> cioè la classe stessa è ricorsiva I metodi per le visite sono tutti ricorsivi In generale, per risolvere un problema su un albero binario si ragiona ricorsivamente (per induzione) sui sottoalberi 6

Alberi Binari Si consideri ad esempio il problema di calcolare l'altezza di un albero binario L'altezza di un albero è la massima lunghezza di un cammino nell'albero Il cammino vuoto che comincia nella radice che è anche foglia è lungo zero Il problema si risolve in maniera semplice ragionando ricorsivamente Si consideri il metodo ricorsivo getheight() 7

Alberi Binari Basta considerare il caso base, cioè quando l'albero è il più piccolo possibile In questo caso l'altezza è 0 Nel caso in cui ci sia un solo sottoalbero, basta calcolare ricorsivamente l'altezza del sottoalbero e aggiungere 1 Nel caso in cui ci siano entrambi i sottoalberi, basta calcolare ricorsivamente l'altezza dei sottoalberi, prendere il massimo e aggiungere 1 8

Alberi Binari Per nostra comodità definiamo una classe public class BinTreeMeasurable<E extends IntMeasurable> La classe è equivalente a BinTree<E>, ma: Si richiede che la classe E implementi l'interface IntMeasurable In questo modo è possibile ottenere un numero intero associato ad ogni nodo È sufficiente chiamale il metodo getmeasure() sull'elemento di tipo E associato al nodo 9

Alberi Binari Si consideri ad esempio il metodo getsumofinternalnodes() Deve calcolare la somma degli interi associati ai nodi interni di un albero binario Nel caso dell'albero più piccolo basta chiamare il metodo getmeasure() sull'oggetto associato alla radice/foglia Nel gli altri casi si calcola la somma sui sottoalberi e si somma all'intero associato alla radice 10

Alberi Generici Nel caso si voglia rappresentare un albero generico basta prevedere che ogni nodo abbia una lista di figli Abbiamo definito la classe Tree<E> che al suo interno contiene una variabile di tipo List<Tree<E>> In questo modo tutti i figli di un nodo sono ordinati (da sinistra verso destra) e sono tutti sottoalberi In caso di radice/foglia la lista sarà vuota 11

Esercitazione Si veda il codice allegato per tutti gli esercizi fatti in classe o proposti per casa 12