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

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

Implementazione ADT: Alberi

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

Alberi Binario in Java

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

Alberi binari e alberi binari di ricerca

Dati e Algoritmi 1: A. Pietracaprina. Mappa/Dizionario (I parte)

Generics & Collections

Per semplicità eliminiamo le ripetizioni nell'albero.

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

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

dizionari alberi bilanciati

Esercitazione 6. Alberi binari di ricerca

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

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

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

Lezione 12 Tabelle Hash

Heap e code di priorità

Collezioni. (a cura del Prof. Marco Patella)

Introduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011

INTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH

Algoritmi e Strutture Dati

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

Ingegneria degli Algoritmi (II parte pratica)

Fondamenti di Informatica T1 Mappe

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

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

Implementazione dell albero binario in linguaggio C++

Alberi ed Alberi Binari

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

Programmazione in Python per la bioinformatica

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

Alberi Binari di Ricerca

22 - Strutture Dati (Java Collections Framework)

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

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

ADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati

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

Fondamenti di Informatica T-1

Lezione 7 Alberi binari: visite e alberi di ricerca

lezione 9 min-heap binario Heap e Alberi posizionali generali

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Riassunto sui dizionari

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Lezione 6 Collezioni. Il concetto astratto di collezione. Servizio minimo: IContainer. Stack (pila)

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

Alberi binari di ricerca

Alberto Montresor Università di Trento

Algoritmi e Strutture Dati

Maps. a.k.a, associative array, map, or dictionary

Strutture di accesso ai dati: B + -tree

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

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

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

Alberi. Se x è il genitore di y, allora y è un figlio di x. Un albero binario è un albero in cui ogni nodo ha al massimo due figli.

Un esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem

Dizionari. Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 5 dicembre, Gino Perna

Esercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati

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

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero);

Esercitazioni di Algoritmi e Strutture Dati

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point

Lezione 5. Giuditta Franco. 19 Febbraio 2008

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

Algoritmi e Strutture Dati

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

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

Alberi Binari di Ricerca

Esempio su strutture dati dinamiche: ArrayList

Alberi binari. Esercizi su alberi binari

Confronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei

In questa lezione Alberi binari di ricerca: la cancellazione

Indice come albero binario di ricerca!

Java Collection Framework

Implementazione con alberi binari di ricerca

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Laboratorio di Algoritmi e Strutture Dati

COLLEZIONI. SOMMARIO Collezioni: Liste: ITERATORI ITERATORI

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Esercizi su strutture dati

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

alberi binari di ricerca (BST)

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Tipi di dato e Strutture dati elementari

Lezione 6 programmazione in Java

Esercizi Capitolo 6 - Alberi binari di ricerca

Laboratorio 8. Programmazione - CdS Matematica. Marco Virgulin 13 Gennaio 2015

Esempio su strutture dati dinamiche: ArrayList

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

Un esempio di mutua ricorsione

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

ADT Coda con priorità

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

La classe Object. Ce li ha anche HelloWorld!!!

Algoritmi di Ricerca. Esempi di programmi Java

Hash Table. Hash Table

Alberi di ricerca binari

Indice generale Introduzione...vii Parte I Concetti e costrutti fondamentali... 1 Capitolo 1 Introduzione al linguaggio... 3

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

Transcript:

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

Sommario Alberi binari di ricerca (BST) Implementazione BST d in Java

Concetti di base Ogni nodo puo' avere al piu' due gli Informazioni del nodo: Elemento (i.e., Chiave) glio destro glio sinistro BinaryNode.java

Alberi binari di ricerca Concetti base Albero binario che soddisfa la seguente proprieta' Per ogni nodo n sia k chiave di n: tutte le chiavi contenute nel suo sottoalbero sx sono di k tutte le chiavi contenute nel suo sottoalbero dx sono di k

Operazioni principali su BST Interfaccia BST Visite pre-ordine, post-ordine, ampiezza in-ordine: le chiavi risultano ordinati get: cerca una chiave nell'albero, sfrutta la denizione di BST per ecienza put: inserisce una chiave nell'albero mantenendo le proprieta' del BST remove: elimina una chiave dall'albero mantenendo le proprieta' del BST

BST Implementazione Strutture collegate per albero binario Utilizzo interfaccia Comparable Interfaccia: BST.java Realizzazione: SimpleBST.java

Ricerca in un BST Ricerca di chiavi in un BST Ricerca sfrutta l'ordine naturale delle chiavi Dato un nodo n (inizialmente n = radice) ed una chiave da cercare item se n.chiave uguale a item, restituisco n se item < n.chiave cerco nel sottoalbero sinistro se item > n.chiave cerco nel sottoalbero destro Ipotesi: non ho mai due chiavi uguali nell'albero Ipotesi resa vera dalla procedura di inserimento

Inserimento Inserimento chiavi in un BST metodo ricorsivo che attraversa l'albero no a trovare la posizione corretta in cui inserire il nuovo nodo posizione corretta soddisfa le proprieta' del BST se la chiave e' gia' presente nell'albero non inserisco un nuovo nodo (restituisco quello gia' presente) metodo put(..) classe SimpleBST.java

Cancellazione Cancellare chiavi da un BST Cancello il nodo con la chiave che voglio eliminare Debbo aggiornare i nodi in modo tale che l'albero sia ancora un BST Metodo remove(...) classe SimpleBST.java

Stampa albero Rappresentazione parentetica Rappresentazione intuitiva e semplice per alberi ( radice ( sottoalbero sx ) ( sottoalbero dx ) ) Example (Rappresentazione parentetica) 4 2 6 3 5 7 ( 4 ( 2 ( ) ( 3 ( ) ( ) ) ) ( 6 ( 5 ( ) ( ) ) ( 7 ( ) ( ) ) ) )

Esercizi Esercizi su BST Implementare il metodo get(...) della classe SimpleBST.java Implementare il metodo ricorsivo rectostring(...) della classe SimpleBST.java Implementare il metodo riempilista(...) della classe SimpleBST.java Implementare il metodo parse(...) della classe SimpleBST.java ipotizziamo di avere in input solo interi utilizzare la classe StringTokenizer per dividere la stringa

ADT o In generale un ADT che supporta le seguenti operazioni e' detto o 1 membership (get o search) 2 put 3 remove

Il concetto di chiave : insieme di coppie <elemento,chiave> Generalizzazione di Array: indicizziamo elementi con oggetti Ordine totale sulle chiavi Chiave univoca in un dizionario Operazioni: put(key, element) remove(key) get(key)

Implementazione dei Possibili implementazioni BST sono una implementazione di un dizionario Basta aggiungere al nodo un campo elemento distinto dal campo chiave HashTable altra implementazione

in Java

L'interfaccia Map L'interfaccia Map Permette di indicizzare oggetti (elementi) utilizzando altri oggetti (chiavi) Metodi fondamentali: put(object key, Object value) get(object key) remove(object key) containskey(), containsvalue() Vedere Map nelle API java

Implementazioni di Map Implementazioni di Map TreeMap: implementazione basata su BST red black tree: caso speciale di BST HashMap implementazione basata su hashing

Creazione ed utilizzo di HashMap Example (utilizzare HashMap) HashMap<String, Integer> profilo = new HashMap<String, Integer>(); profilo.put("a", 3); profilo.put("c", 0); profilo.put("g", 0); profilo.put("t", 1); System.out.println(profilo); System.out.println("valore di A = "+profilo.get("a"));

Scandire una HashMap Scandire una HashMap Posso accedere all'insieme delle chiavi con il metodo keyset(); Scandire il vettore con gli iteratori Accedere agli elementi con il metodo get Oppure accedere alla collezione dei valori: metodo values()

Scansione di HashMap Example (utilizzo keyset()) int sum = 0; Set<String> keyset = profilo.keyset(); for (Iterator<String> iterator = keyset.iterator(); iterator.hasnext();) { String nucleotide = iterator.next(); sum+=profilo.get(nucleotide); } System.out.println("somma = "+sum);

Scansione di HashMap Example (utilizzo values()) sum = 0; Collection<Integer> valueset = profilo.values(); for (Iterator<Integer> iterator = valueset.iterator(); iterator.hasnext();) { Integer integer = iterator.next(); sum+=integer; } System.out.println("somma = "+sum);

Indicizzazione tramite oggetti il metodo hashcode() hashcode() e' un metodo di object che ha una sua implementazione di default Basata sulla locazione di memoria dell'oggetto(vedere API per dettagli) Posso ridenire il metodo hashcode() come con qualsiasi altro metodo Overriding dell'hashcode() necessario se ho ridenito equals() Se due oggetti sono uguali debbono avere lo stesso codice di hash

Esempio problemi hashcode() Example (problemi hashcode) HashMap<Studente, List<Integer>> map = new HashMap<Studente, List<Integer>>(); map.put(new Studente("001"),randomEsami(5)); map.put(new Studente("002"),randomEsami(2)); map.put(new Studente("003"),randomEsami(3)); System.out.println(map); Studente s = new Studente("001"); List<Integer> listaesami = map.get(s); System.out.println(listaEsami);

Overriding di hashcode() overriding di hashcode() hashcode() deve essere consistente con il metodo equals() esempio: Studente.java abbiamo fatto overriding di equals() ma non di hashcode() consistente deve essere basato sugli stessi campi

Esempio overriding di hashcode() Example (overriding di hashcode) In Studente.java... public int hashcode() { return matricola.hashcode(); }...

Fare overriding di hashcode() fare overriding di hashcode() Utilizzare il metodo hashcode() di Object per i singoli campi Se ho tipi primitivi, creo l'oggetto corrispondente e chiamo hashcode() Quando ho piu' elementi posso semplicemente sommare gli hashcode() Questo risulta in un comportamento corretto: istanze uguali avranno lo stesso hashcode() Posso avere metodi per calcolare l'hashcode() che risultano in comportamenti piu' ecienti per le operazioni della Map approfondimento B. Eckel Thinking in java (disponibile on-line)

Esercizi Esercizi su implementare il metodo calcolamediastudenti(...) della classe ExampleHashCode.java implementare il metodo migliorstudente(...) della classe ExampleHashCode.java modicare la classe CoordinatePolari.java in maniera tale da avere un corretto funzionamento del metodo main della classe TestHashCode.java [soluzione in CoordinatePolari.sol2] Scaricare il le Nucleotide.java per poter compilare ExampleHashCode.java.