ALBERI. Angelo Di Iorio Università di Bologna

Documenti analoghi
Esercitazione su Albero Binario

GRAFI. Angelo Di Iorio Università di Bologna

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

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

Albero in cui ogni nodo ha al più due figli. I figli di un nodo costituiscono una coppia ordinata

Esercizi su programmazione ricorsiva 3

Implementazione ADT: Alberi

Alberi ed Alberi Binari

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

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

Strutture dati Alberi binari

Il TDA BinaryTree. Albero Binario. Albero sintattico. Applicazioni. Albero delle decisioni binario. Albero binario di ricerca

Alberi ed Alberi Binari di Ricerca

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

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

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Alberi binari di ricerca

Dati e Algoritmi 1: A. Pietracaprina. Alberi Binari

Esercitazione 4 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

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

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

Implementazione dell albero binario in linguaggio C++

Alberi Binario in Java

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre Alcune Soluzioni

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

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

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

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

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

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

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

Esercizio: Lista Circolare

lezione 9 min-heap binario Heap e Alberi posizionali generali

Alberi binari di ricerca

Programmazione Orientata agli Oggetti in Linguaggio Java

Algoritmi e Strutture dati - ANNO ACCADEMICO 2017/18 12 giugno 2018

Strutture Merge-Find

21 - Alberi e Ricorsione

Fondamenti di informatica T-1 (A K) Esercitazione 8: classi e oggetti

Algoritmi di Ricerca. Esempi di programmi Java

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

Lezione 7 Alberi binari: visite e alberi di ricerca

Divide et impera su alberi

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

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

Espressioni aritmetiche

Spesso sono definite anche le seguenti operazioni:

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

Algoritmi di Ricerca. Esempi di programmi Java

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

Introduzione Programmazione Java

now is the for men all good come aid

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

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

RICERCA BINARIA...1 ALBERO BINARIO DI RICERCA (ABR)...3 RICORSIONE...4 ESEMPI DI RICORSIONE IN VISUAL BASIC...5 ESEMPI DI RICORSIONE IN C / C++...

ALGORITMI E STRUTTURE DATI

Alberi. Albero binario. Un albero binario è un albero (ordinato) in cui ciascun nodo può avere al massimo due figli (figlio destro e figlio sinistro)

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

Alberi binari e alberi binari di ricerca

Le liste. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132

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

Ripasso di programmazione ricorsiva

Alberi binari e alberi binari di ricerca

Alberi binari. Alberi Albero binario Heap tree

Programmazione Orientata agli Oggetti in Linguaggio Java

Prova d Esame Compito A

Alberi binari e alberi binari di ricerca

Per semplicità eliminiamo le ripetizioni nell'albero.

Inserimento in una lista ordinata

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

Algoritmi e Strutture Dati. Alberi

Esempi. Albero di interi. Struttura che non è un albero!

Informatica 3. LEZIONE 17: Alberi generici. Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza

L albero e un tipo astratto di dati usato per rappresentare relazioni gerarchiche.

Alberi Binari di Ricerca

Esempio su strutture dati dinamiche: ArrayList

Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche:

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

argomenti alberi terminologia tipo di dato astratto albero tipo astratto, implementazione, algoritmi es.: radice R con n sottoalberi radice

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

IMPLEMENTAZIONE DI UN ALBERO AVL

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

alberi tipo astratto, implementazione, algoritmi

Alberi binari ( 7.3)

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

JAVA GENERICS. Angelo Di Iorio Università di Bologna

Alberi. Definizione, realizzazione e algoritmi elementari. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 7

tipi di dato astratti

E21 Esercizi sulle collezioni in Java

Algoritmi e Strutture Dati. Alberi

Università Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1

Lezione 6: 12 Novembre 2013

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati

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

Algoritmi e Strutture Dati. Alberi

Transcript:

ALBERI Angelo Di Iorio Università di Bologna

Esercizio 1 Implementare una classe Java per memorizzare e leggere informazioni relative a una dinastia Esempio nella prossima slide Per ogni persona: Nome Anni di vita

Dinastia dei Medici Immagine completa: https://www.firenze-online.com/img/artisti/foto-famigliademedici3.jpg

Esercizio 1 La classe FamilyTree rappresenta un nodo (sottoalbero) ed espone i metodi per: inizializzare il nodo (radice) con nome e anni accedere alle informazioni relative al nodo (nome, anni, figli, padre) aggiungere un nodo come ultimo figlio di questo nodo aggiungere un insieme di figli (passati con un vettore) Realizzazione basata su lista dei figli Istanziare gli oggetti per descrivere la dinastia de I Medici: Test: http://diiorio.nws.cs.unibo.it/asd1819/java/

Interfaccia import java.util.arraylist; public interface IFamilyTree { Commenti? public void aggiungifiglio(familytree f); public String getnome(); public Integer getanni(); public FamilyTree getpadre(); public void setpadre(familytree p); public ArrayList<FamilyTree> getfigli();

Campi e costruttore import java.util.arraylist; public class FamilyTree { private String nome; private Integer anni; private FamilyTree padre; private ArrayList<FamilyTree> figli; Overloading? public FamilyTree(String nome, Integer anni) { this.nome = nome; this.anni = anni; this.padre = null; this.figli = new ArrayList<FamilyTree>();

Esercizio 2 Implementare una classe FamilyTreeVisits per visitare l albero. Implementare un metodo printtree(familytree t) che stampa su terminale i dati memorizzati nell albero t con una semplice visualizzazione indentata Una riga per persona, che mostra nome ed età Dati dei figli indentati di un tab [vedi esempio in prossima slide]

Esercizio 2

printfamilytree private void printtreewithtabs(familytree t, Integer level){ if (t!= null) { printtabs(level); System.out.println(t.getNome() + " (" + t.getanni() +")"); for (FamilyTree f : t.getfigli()) { printtreewithtabs(f, level + 1);

Esercizio 3 Aggiungere alla classe FamilyTreeVisits un metodo (ricorsivo) per cercare un discendente per nome FamilyTree cercadiscendentepernome(familytree tree, String nome); Il metodo ritorna il primo discendente in profondità il cui nome contiene la stringa passata come parametro Domande: Quanti figli ha avuto Lorenzo il Magnifico? Quanti anni ha vissuto Piero il Gottoso? Cosimo il Vecchio ha avuto un discendente chiamato Guido?

public FamilyTree cercadiscendentepernome(familytree tree, String nome){ FamilyTree descendantfound = null; if (tree!= null) { I t e r a t o r < FamilyTree> ti = tree.getfigli().iterator(); while (ti.hasnext() && descendantfound==null) { FamilyTree current = (FamilyTree) ti.next(); if (current.getnome().contains(nome)) descendantfound = current; else descendantfound = this.cercadiscendentepernome(current, nome); return descendantfound;

Esercizio 4 Aggiungere un metodo per cercare il primo discendente che ha vissuto almeno X anni public FamilyTree cercaprimodiscendenteetaminima(familytree tree, Integer anni); Analizzare nell ordine: tutti i figli, poi tutti i nipoti, poi tutti i pronipoti, etc.

public FamilyTree cercaprimodiscendenteetaminima(familytree tree, Integer anni){ FamilyTree descendantfound = null; ArrayDeque<FamilyTree> coda = new ArrayDeque<FamilyTree>(); coda.push(tree); while (!coda.isempty() && descendantfound==null) { FamilyTree current = coda.pop(); if (current.getanni() < anni) descendantfound = current; else { for (FamilyTree f : current.getfigli()) {coda.push(f); return descendantfound;

Esercizio 5 Dato un albero ordinato i cui nodi contengono valori interi, si vogliono contare tutti i nodi (anche quelli intermedi) tali per cui il percorso radice-nodo ha somma complessiva dei valori uguale a k. 3 2 1 1 3 4 2 8 5-1 5 2 6 1 1-4 5 1 0 5 6 1 2 5

Esercizio 5 Implementare in Java: una classe TreeInt che rappresenta l albero; per semplicità ogni nodo ha il valore intero e la lista di figli e implementa costruttore e metodo per aggiungere un figlio una classe TreeIntVisit che implementa un metodo per contare i nodi: public Integer nodessumk(treeint t, Integer k, Integer somma);

nodessumk private int nodessumk(treeinteger t, Integer k, Integer s) { int cl = 0; if (s + t.getvalue() == k) cl = 1; for (TreeInteger child : t.children) { cl += this.nodessumk(child, k, s+t.getvalue()); return cl;