Alberi binari di ricerca

Documenti analoghi
Alberi binari di ricerca

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

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

Esercitazione 6. Alberi binari di ricerca

Strutture dati Alberi binari

Per semplicità eliminiamo le ripetizioni nell'albero.

Alberi. Alberi: Esempio di utilizzo

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Implementazione ADT: Alberi

Alberi Binario in Java

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

Esercizi su programmazione ricorsiva 3

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

Struttura dati Dizionario

ricerca di un elemento, verifica dell appartenenza di un elemento

Heap e code di priorità

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

Alberi binari di ricerca

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

ALBERI BINARI DI RICERCA

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

Alberi binari e alberi binari di ricerca

Liste concatenate. Violetta Lonati

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

Alberi ed Alberi Binari di Ricerca

Algoritmi e Strutture Dati. Lezione 3

ALBERI DI RICERCA BINARI (O ALBERI BINARI DI RICERCA)

Lezione 12 Tabelle Hash

Alberi Binari di Ricerca

Laboratorio di Algoritmi

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

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

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

QuickSort Università degli Studi di Milano

Tutoraggio Informatica Generale Inserimento e cancellazione in un ABR Counting Sort

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

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

Alberi di ricerca binari

Alberi ed Alberi Binari

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

Algoritmi, Strutture Dati e Programmi. UD 3.d: Strutture Dati Dinamiche Alberi

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

Multi-way search trees

Algoritmi e strutture dati

Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità

Appunti Senza Pretese di Programmazione II: Alberi di Ricerca

Algoritmi e Strutture Dati

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

Binari di Ricerca Binary. Alberi. Trees. Search. Damiano Macedonio Università Ca' Foscari di Venezia.

Alberi Binari di Ricerca

Heap e Code di Priorità

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

Alberi binari. Alberi Albero binario Heap tree

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Algoritmi e strutture dati

Alberi binari. Alberi binari di ricerca

In questa lezione Alberi binari di ricerca: la cancellazione

Alberi Binari di Ricerca

Alberi di ricerca. Dizionari. Definizione. Alberi binari di ricerca (BST = binary search tree) 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)

ricerca di un elemento, verifica dell appartenenza di un elemento

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

Algoritmi e Strutture Dati. Lezione 5

Alberi Binari di Ricerca e Alberi Rosso-Neri

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

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

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

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

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

Alberi due-tre e alberi B

Introduzione Implementazione (1)

Ripasso di programmazione ricorsiva

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

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.

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati

algoritmi e strutture di dati

Implementazione dell albero binario in linguaggio C++

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

Alberi Binari Alberi Binari

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

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

now is the for men all good come aid

Laboratorio di Informatica. Lezione 8: Liste e alberi

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Alberi Binari di Ricerca: Definizione. Ricerca, inserimento, cancellazione, min, max, predecessore, successore.

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

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.

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

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

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

Esercizi su ABR. Prof. E. Fachini - Intr. Alg.!1

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

Transcript:

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 ordinato. - Per ogni nodo u vale questa proprietà: - le chiavi presenti nel sottoalbero sinistro sono minori di u - le chiavi presenti nel sottalbero destro sono maggiori di u

8 6 10 1 7 9 11

11 10 9 8 6 1 7

11 10 9 8 8 6 10 6 1 7 9 11 1 7

Implementazione

Implementazione private class Node{ } Comparable elem; Node father, left, right; public Node(Comparable elem, Node father){ this.elem = elem; this.father = father; left = null; right = null; }

Implementazione private class Node{ } Comparable key; Object value; Node father, left, right; public Node(Comparable elem, Node father){ this.elem = elem; this.father = father; left = null; right = null; }

Implementazione private class Tree{ } private Node root = null; /* Methods implementation */.

Visite Stessi metodi implementati per l albero binario

Ricerca di un elemento come avviene negli alberi binari?

Ricerca di un elemento come avviene negli alberi binari di ricerca?

Ricerca di un elemento La proprietà di ordinamento fa si che l elemento si possa trovare solo in una e una sola posizione Partendo dalla radice si discende l albero; ad ogni nodo si decide se proseguire la ricerca nel sottoalbero di destra o di sinistra

Ricerca minimo e massimo Come deve essere implementata negli alberi binari? Come deve essere implementata negli alberi binari di ricerca?

Ricerca minimo e massimo Minimo: si discende l albero da figlio sinistro a figlio sinistro fino a quando non si trova un nodo senza figlio sinistro Massimo: si discende l albero da figlio destro a figlio destro fino a quando non si trova un nodo senza figlio destro

Successore Successore: dato un nodo u è il nodo che contiene il più piccolo valore maggiore di u Due casi: U ha il figlio destro Successore: minimo del sottoalbero destro di u U non ha il figlio destro Successore: primo avo per il quale u si trova nel sottoalbero sinistro

U ha il figlio destro: Successore: minimo del sottoalbero destro di u U non ha il figlio destro: Successore: primo avo per il quale u si trova nel sottoalbero sinistro

U ha il figlio destro: Successore: minimo del sottoalbero destro di u U non ha il figlio destro: Successore: primo avo per il quale u si trova nel sottoalbero sinistro 8 6 10 1 7 9 11

Inserimento Occorre rispettare le proprietà dell albero binario di ricerca Ricerco la posizione nella quale devo inserire il nodo, ovvero ricerco quale dovrà essere il nodo padre Casi particolari: se l albero non contiene elementi il nuovo valore verrà inserito nel nodo radice se l albero contiene già un elemento con la stessa chiave, si modifica il nodo esistente sostituendone il valore

Inserimento Caso generale: Il nuovo nodo viene inserito come foglia

Inserimento 8 6 10 1 7 9 11

Inserimento: implementazione Cerco la posizione dove inserire l elemento Creo il nuovo nodo da inserire Gestisco i casi particolari Albero vuoto Elemento già presente Inserisco l elemento nella posizione trovata

/** * @param elem : elemento da inserire */ public void insert(comparable elem){ // ricerca posisione dove inserire il nodo BSTNode tmp = root; // usata per discendere l'albero BSTNode tmpfather = null; // conterrà il padre del nodo da inserire while (tmp!= null){ tmpfather = tmp; // verifico se devo proseguire la visita nel sottoalbero sinistro o destro if (elem.compareto(tmp.getelem())<0){ tmp = tmp.getleft(); }else{ tmp = tmp.getright(); } } // creo il nodo da inserire BSTNode newnode = new BSTNode(elem,tmpFather); } // gestisco caso particolare if (root == null){ root = newnode; }else{ // lo inserisco nella posizione trovata prima // ovvero lo inserisco o come figlio sinistro o destro di tmpfather if (elem.compareto(tmpfather.getelem())<0){ tmpfather.setleft(newnode); }else{ tmpfather.setright(newnode); } }

Esercizio Individuare l ordine di inserimento degli elementi per ciascuno degli alberi mostrati nella slide successiva.

11 10 9 8 8 6 10 6 1 7 9 11 1 7

Cancellazione Il nodo da eliminare potrebbe essere: Una foglia Avere un solo figlio Avere due figli

Cancellazione: caso 1 Il nodo da eliminare è una foglia Lo elimino

Cancellazione: caso 2 Il nodo da eliminare ha un solo figlio Elimino il nodo u L unico figlio di u prende il posto di u (attacco il figlio di u al padre di u)

Cancellazione: caso 3 Il nodo da eliminare ha due figli Devo trovare un nodo da mettere al suo posto in modo tale che l albero rimanga un albero di ricerca Può essere il successore o il predecessore Sostituisco u con il suo successore Cerco il successore di u Ne copio i valori nel nodo u Lo cancello

Cancellazione: implementazione Cerco il nodo da eliminare Se ha due figli (caso 3): Cerco il successore (s) Ne copio i valori all interno del nodo da eliminare Elimino il successore (caso 1 o 2) Se ha al più un figlio (caso 2 e 1) Lo sostituisco a u Gestisco il caso particolare in cui il nodo da eliminare sia la radice

/** * * @param elem : elemento da cancellare */ public void delete2(comparable elem){ // cerco il nodo da eliminare BSTNode u = searchric(elem); if (u!= null){ // verifico se ha entrambi i figli (caso 3) if (u.getleft()!= null && u.getright()!=null){ // cerco il sucessore BSTNode s = succ(u); // ne copio i valori all'interno di u u.setelem(s.getelem()); // faccio diventare s il nodo da eliminare u=s; } // arrivati a questo punto u deve al più un figlio (casi 1 e 2) // controllo se ha il figlio destro o sinistro BSTNode t; if (u.getright()!= null){ // ha solo il figlio destro t = u.getright(); }else { t = u.getleft(); } } } // elimino u modificando i puntatori del padre di u // ma devo controllare che u non sia la radice if (u == root){ root=t; }else{ // l'eventuale figlio di u lo collego al padre // verifico se u era fisglio destro o sinistro if (u.getfather().getright() == u){ // u è figlio destro u.getfather().setright(t); }else{ // u è figlio sinistro u.getfather().setleft(t); } }

Esercizio Dato un albero binario di ricerca implementare i seguenti metodi sia in modo ricorsivo che iterativo Ricerca minimo e massimo Ricerca di un elemento Ricerca del successore e del predecessore Inserimento Cancellazione