Esercitazione 5 Alberi Binari di Ricerca

Documenti analoghi
Esercitazione 4 Heap

d. Cancellazione del valore 5 e. Inserimento del valore 1

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

Strutture dati Alberi binari

Alberi di ricerca. Dizionari. Definizione. Alberi binari di ricerca (BST = binary search tree) Algoritmi e Strutture Dati

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

Algoritmi e strutture dati

Alberi binari di ricerca

Algoritmi e Strutture Dati

Alberi ed Alberi Binari di Ricerca

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

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

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

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

ricerca di un elemento, verifica dell appartenenza di un elemento

Alberi binari e alberi binari di ricerca

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

Multi-way search trees

Esercitazione su Albero Binario

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca

Esercitazione 6. 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 di ricerca

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

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

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

heap concetti ed applicazioni

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

lezione 9 min-heap binario Heap e Alberi posizionali generali

In questa lezione Alberi binari di ricerca

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Implementazione ADT: Alberi

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

FONDAMENTI DI INFORMATICA II (2h, punti 30/30) 26 Luglio 2011

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

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

ricerca di un elemento, verifica dell appartenenza di un elemento

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

Laboratorio di algoritmi e strutture dati

Algoritmi e Strutture Dati

Laboratorio 26 Aprile 2012

Spesso sono definite anche le seguenti operazioni:

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

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

Informatica 3. LEZIONE 15: Implementazione di alberi binari - BST. Modulo 1: Implementazione degli alberi binari Modulo 2: BST

Alberi binari di ricerca

Esercizi proposti Risolvere i problemi seguenti su espressioni rappresentate come alberi binari, mediante la dichiarazione di tipo

Esercizi di Programmazione Prolog

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

Algoritmi e Strutture Dati

Laboratorio di Algoritmi

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

Algoritmi e Strutture Dati

Informatica 3. Informatica 3. LEZIONE 23: Indicizzazione. Lezione 23 - Modulo 1. Indicizzazione. Introduzione. Indicizzazione:

alla categoria di automi a minor potenza riconoscitiva possibile. }, dove k è un parametro.

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

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

Laboratorio di algoritmi e strutture dati

Algoritmi e Strutture Dati. Lezione 3

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

Algoritmi e Strutture Dati. Lezione 5

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

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

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

Struttura dati Dizionario

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Heap e code di priorità

Indice come albero binario di ricerca!

Alberi ed Alberi Binari

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

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

Indice come albero binario di ricerca

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

Esercizi Capitolo 6 - Alberi binari di ricerca

Heap e Code di Priorità

Alberi. Alberi: Esempio di utilizzo

PROVETTE D ESAME. Algoritmi e Strutture Dati

Lezione 7 Alberi binari: visite e alberi di ricerca

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Introduzione Implementazione (1)

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

Progetti Algoritmi e Strutture Dati A.A Si intende realizzare una coda di priorità mediante un max-heap.

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis

Alberi Binari di Ricerca

ALGORITMI E STRUTTURE DATI

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

Gli heap. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Fondamenti di Informatica T-1

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

Implementazione dell albero binario in linguaggio C++

Esercizio: indice come BST

Prossime lezioni e tutorato!

ADT ALBERO BINARIO (tree)) ADT ALBERO BINARIO

ALBERI BINARI DI RICERCA

Databases. Architettura di un DBMS: Struttura ad indice per i files, B + -Trees

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Transcript:

Esercitazione 5 Alberi Binari di Ricerca Corso di Fondamenti di Informatica II Algoritmi e strutture dati A.A. 2015/2016 11 Maggio 2016 Sommario Scopo di questa esercitazione è realizzare una struttura dati per gestire un albero binario di ricerca. Per svolgere l esercitazione e necessario scaricare i file ausialiari c-aux.tar.gz e java-aux.tar.gz. Attenzione: L esercitazione puo essere svolta sia in linguaggio C che in Java. E altamente consigliato di sviluppare le soluzioni in laboratorio usando il linguaggio C e di svolgere l esercitazione in Java come esercizio per casa. Inoltre e altamente consigliato di far girare le soluzioni in C sotto valgrind. 1 Rappresentazione di un BST Un albero binario di ricerca (Binary Search Tree o BST) è un TDA che contiene un insieme di coppie (chiave, valore), che supporta sia inserimento di un elemento arbitrario sia ricerca di elementi per chiave, ed eventuale rimozione. L insieme delle chiavi è totalmente ordinato. In questa esercitazione assumeremo per semplicità che le chiavi siano degli interi positivi, mentre i valori possono assumere un tipo generico (di tipo void * se C). Un BST soddisfa la seguente proprietà: dati tre nodi u, v e w tali che u è nel sottoalbero sinistro di v e w è nel sottoalbero destro di v, allora key(u) key(v) key(w). L attraversamento in ordine (un nodo è visitato dopo il suo sottoalbero sinistro e prima del suo sottoalbero destro), di conseguenza, visita le chiavi in ordine non decrescente. Utilizzeremo il BST come una mappa, ovvero non si hanno mai due valori distinti con la stessa chiave. 1

1 RAPPRESENTAZIONE DI UN BST 2 Per quanto riguarda l albero binario, utilizzeremo una (variante della) rappresentazione basata su riferimenti. In questa rappresentazione, il generico nodo dell albero memorizza: la chiave (di tipo intero) associata al nodo il valore (generico) associato al nodo il puntatore (riferimento) al sottoalbero sinistro il puntatore (riferimento) al sottoalbero destro Specifiche. Scrivere un modulo C con intestazione bst.h (rispettivamente una classe generica Java BST.java) contenente le seguenti funzioni (metodi di classe se Java): una funzione che construisce un BST che contiene un unico nodo (k, v): bst * bst_new ( int k, void * v); public BST ( int k, V v); una funzione che restituisce l unico valore associato associato ad una chiave k: void * bst_find ( bst * t, int k); public V find ( int k); La ricerca non deve visitare tutto l albero ma seguire lo schema della ricerca binaria. Il metodo deve avere costo O(h), dove h è l altezza corrente del BST. una funzione che inserisce la coppia (k, value) nel punto appropriato del BST: void bst_insert ( bst * t, int k, void * value ); public void insert ( int k, V value ); Se esiste già un valore associato alla chiave k, il metodo sovrascrive il vecchio valore. Il metodo deve avere costo O(h), dove h è l altezza corrente del BST. una funzione che restituisce la chiave minima contenuta dal BST: int bst_find_min ( bst * n); public int findmin (); una funzione che elimina il nodo con la chiave minima contenuta dal BST: void bst_remove_min ( bst * n); public void removemin ();

2 TROVARE PREDECESSORE DI UNA CHIAVE 3 una funzione che elimina dal BST il nodo con chiave k (se esiste): void bst_remove ( bst * t, int k); public void remove ( int k); Il metodo deve avere costo O(h), dove h è l altezza corrente del BST. (solo in C) una funzione che elimina il BST: void bst_delete ( heap * h); una funzione che stampa in stdout una qualsiasi rappresentazione dell albero: void bst_print ( bst * h); public void printf (); Driver.java) passando come argomento bst. 2 Trovare predecessore di una chiave Un operazione ausiliaria utile nel tipo di dati BST consiste nel trovare, data una chiave, il nodo che più si avvicina a tale chiave, senza superarla. Più precisamente, si vuole considerare la funzione predecessor, definita in questo modo: predecessor(k) è il nodo del BST avente la chiave maggiore possibile tra tutte quelle minori a k. Il calcolo di predecessor(k) in un BST può essere effettuato sfruttando le seguenti proprietà: se k è minore o uguale della chiave nella radice, predecessor(k) è nel sottoalbero sinistro. se k è maggiore della chiave nella radice, predecessor(k) è nel sottoalbero destro se il sottoalbero destro contiene qualche chiave k; altrimenti predecessor(k) è la radice. int bst_predecessor ( bst * t, int k); public int predecessor ( int k); che restituisce la chiave del nodo predecessor(k) (o null se il BST non contiene nessun nodo con chiave k). Il metodo deve avere costo O(h), dove h è l altezza corrente del BST. Driver.java) passando come argomento predecessor.

3 TEST ALBERO BST 4 3 Test albero BST testare se esso soddisfi la proprietà di BST. Specifiche. Estendere il codice presente in tree.c (Tree.java) implementando la int tree_is_bst ( bst * t); public boolean isbst (); Tale funzione restuisce 1 (true) se il BST è consistente, 0 (false) altrimenti. Driver.java) passando come argomento tree. 4 Test albero bilanciato testare se tale risulta bilanciato in altezza. int tree_is_balanced ( bst * t); public boolean isbalanced (); Tale funzione restuisce 1 (true) se il BST è bilanciato, 0 (false) altrimenti. Driver.java) passando come argomento balanced. 5 Test albero AVL testare se tale albero soddisfi le proprietà di un AVL, Si noti che devono essere verificate due proprietà: (1) l albero è un BST, (2) l albero è bilanciato. Tuttavia occorre implementare questo algoritmo effettuando un unica visita sull albero. int tree_is_avl ( bst * t); public boolean isavl ();

RIFERIMENTI BIBLIOGRAFICI 5 Tale funzione restuisce 1 (true) se il BST è bilanciato, 0 (false) altrimenti. Driver.java) passando come argomento avl. Riferimenti bibliografici [1] M. T. Goodrich and R. Tamassia. Strutture dati e algoritmi in Java. Zanichelli, 2007.