Alberi Binari di Ricerca

Documenti analoghi
Alberi Bilanciati di Ricerca

Tabelle hash. Damiano Macedonio Università Ca' Foscari di Venezia.

Esercizi di Algoritmi e Strutture Dati

Heap e code di priorità

Esercizi Capitolo 6 - Alberi binari di ricerca

Alberi binari di ricerca

ADT Coda con priorità

Esercizi Capitolo 6 - Alberi binari di ricerca

Algoritmi di Visita di Grafi. Damiano Macedonio

Alberi di ricerca binari

B-Tree. Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in:

Algoritmi e Strutture Dati. HeapSort

I B+ Alberi. Sommario

Programmazione Orientata agli Oggetti in Linguaggio Java

Strutture di accesso ai dati: B + -tree

alberi binari e ricorsione

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Alberto Montresor Università di Trento

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

Linguaggi e Grammatiche Liberi da Contesto

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

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Alberi binari di ricerca

Algoritmi e Strutture Dati

FILE E INDICI Architettura DBMS

Programmazione Orientata agli Oggetti in Linguaggio Java

Esercizi Capitolo 5 - Alberi

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

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

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Esempio : i numeri di Fibonacci

Strutture dati dinamiche in C (III)

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso di Fondamenti di Informatica

Tecnologie di Sviluppo per il Web

B alberi. dizionari in memoria secondaria

Programmazione Orientata agli Oggetti in Linguaggio Java

Grafi. Moreno Marzolla Dip. di Informatica Scienza e Ingegneria Università di Bologna. moreno.marzolla@unibo.it

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Corso: Strutture Dati Docente: Annalisa De Bonis

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

LibreOffice Calc. Moreno Marzolla

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Tecnologie di Sviluppo per il Web

La struttura dati ad albero binario

Ingegneria del Software

Informatica 3 secondo recupero 13 Settembre 2002

Problema dell albero di cammini minimi (SPT, Shortest Path Tree) o problema dei cammini minimi :

(1) (2) (3) (4) 11 nessuno/a (1) (2) (3) (4) X è il minore tra A e B nessuno/a X è sempre uguale ad A X è il maggiore tra A e B

Linguaggi di Programmazione Corso C. Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali. Nicola Fanizzi

Architettura dei calcolatori. Moreno Marzolla

Alberi Binari di Ricerca (ABR)

Architettura degli elaboratori Docente:

Tecnologie di Sviluppo per il Web

EXCEL: FORMATTAZIONE E FORMULE

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

Algoritmi e Strutture Dati

UNIVERSITA DEGLI STUDI DI PERUGIA

Alberi binari di ricerca

I tipi di dato astratti

Esercizi di Algoritmi e Strutture Dati

7) Strutture dati fondamentali

SOMMARIO IL PROBLEMA DELLA RICERCA. Algoritmi di ricerca: Algoritmi di ordinamento: RICERCA LINEARE

Esercizi di Algoritmi e Strutture Dati

Alberi Binari di Ricerca

Tecnologie di Sviluppo per il Web

Cercare il percorso minimo Ant Colony Optimization

docweb Sici Facets Sistema Provinciale di Gestione Portali Manuale Utente Licenze

Federico Laschi. Conclusioni

Uso di metodi statici. Walter Didimo

Progetto B. Utenti. Di conseguenza si potranno avere solo utenti di questi tipi

PROGRAMMAZIONE STRUTTURATA

Un esempio di if annidati

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Roadmap. Ricorsione: funzioni ricorsive. Definizione di fattoriale. Definizione dei numeri Fibonacci

11.4 Chiusura transitiva

Programmazione Orientata agli Oggetti in Linguaggio Java

Depth-first search. Visita in profondità di un grafo Algoritmo Esempio Complessità dell algoritmo Proprietà Ordinamento topologico

Introduzione alla rete Internet

Programmazione Ricorsione

Tecnologie di Sviluppo per il Web

Esonero del corso di Programmazione a Oggetti

Lezione 6 Le pile. Informatica. 28 Aprile 2016

Si considerino le seguenti specifiche per la realizzazione di un sito web per la gestione di abbonamenti a riviste di vario genere..

Strutture dati e algoritmi. Sommario

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE

Programmazione Orientata agli Oggetti in Linguaggio Java

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari

Informatica B

Parte 6 Esercitazione sull accesso ai file

Transcript:

Alberi Binari di Ricerca Damiano Macedonio Università Ca' Foscari di Venezia mace@unive.it

Original work Copyright Alberto Montresor, University of Trento (http://www.dit.unitn.it/~montreso/asd/index.shtml) Modifications Copyright 2009, 2010, Moreno Marzolla, Università di Bologna (http://www.moreno.marzolla.name/teaching/asd2010/) Modifications Copyright 2012, Damiano Macedonio, Università Ca' Foscari di Venezia This work is licensed under the Creative Commons Attribution-NonCommercial- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. Algoritmi e Strutture Dati 2

Dizionari Dizionario Insieme dinamico che implementa le funzionalità Item search(key key) void insert(key key, Item item) void delete(key key) Struttura dati fondamentale dalle infinite applicazioni Esempio: individuare un record in un database conoscendo la chiave di ricerca Esempi di implementazione Array ordinato Ricerca O(log n), inserimento/cancellazione O(n) Lista non ordinata Ricerca/cancellazione O(n), inserimento O(1) Algoritmi e Strutture Dati 3

Alberi binari di ricerca (ABR) Idea Portare l'idea di ricerca binaria in un albero Definizione 1.Ogni nodo v contiene un insieme di dati v.data associati ad una chiave v.key presa da un dominio totalmente ordinato (ci possono essere duplicati delle chiavi) 2.Le chiavi dei nodi del sottoalbero sinistro di v sono v.key 3.Le chiavi dei nodi del sottoalbero destro di v sono v.key 10 6 15 4 8 12 18 Algoritmi e Strutture Dati 4

Alberi binari di ricerca (ABR) Proprietà di ricerca Le proprietà 2. e 3. permettono di realizzare un algoritmo di ricerca dicotomica Domanda: Proprietà di ordine Come devo visitare l'albero per ottenere la lista ordinata dei valori? Dettagli implementativi Ogni nodo deve mantenere Figlio sinistro, destro Padre Chiave Dati satelliti Figlio sinistro Padre Key, Data Figlio destro Algoritmi e Strutture Dati 5

Interfaccia Dizionario public interface Dizionario { /** * Aggiunge al dizionario la coppia (e,k) */ public Rif insert(object e, Comparable k); /** * Rimuove dal dizionario l'elemento u */ public void delete(rif u); } /** * Restituisce l'elemento <code>e</code> con chiave k. * In caso di duplicati, l'elemento restituito * e' scelto arbitrariamente tra quelli con chiave k. */ public Object search(comparable k); Algoritmi e Strutture Dati 6

Esempio ricerca del valore 4 6 4 < 6 vai a sinistra 2 8 1 4 3 Algoritmi e Strutture Dati 7

Esempio ricerca del valore 4 6 4 > 2 vai a destra 2 8 1 4 3 Algoritmi e Strutture Dati 8

Esempio ricerca del valore 4 6 2 8 1 4 Trovato! 3 Algoritmi e Strutture Dati 9

Altro esempio ricerca del valore 7 6 7 > 6 vai a destra 2 8 1 4 3 Algoritmi e Strutture Dati 10

Altro esempio ricerca del valore 7 6 2 8 7 < 8 vai a sinistra 1 4??? 3 Algoritmi e Strutture Dati 11

Altro esempio ricerca del valore 7 6 2 8 1 4??? Non trovato 3 Algoritmi e Strutture Dati 12

Ricerca: pseudocodice algorithm search(nodo T, Key k) Nodo if (T == null k == T.key) then return T; elseif (k < T.key) then return search(t.left,k) else return search(t.right,k) endif Versione ricorsiva Versione iterativa algorithm search(nodo T, Key k) Nodo while (T null) do if (k == T.key) then return T; elseif (k < T.key) then T := T.left; else T := T.right; endif endwhile return null Algoritmi e Strutture Dati 13

Classe AlberoBR package asdlab.libreria.alberiricerca public class AlberoBR implements Dizionario { protected class InfoBR implements Rif { protected Object elem; protected Comparable chiave; protected Nodo nodo; protected InfoBR(Object e, Comparable k){ elem = e; chiave = k; nodo = null; } } // Struttura dati Albero Binario in cui // sono memorizzate le informazioni protected AlberoBin alb; public AlberoBR() {... } } // altre operazioni... Algoritmi e Strutture Dati 14

Ricerca: implementazione Java (versione iterativa) public Object search(comparable k) { Nodo v = alb.radice(); while (v!= null) { InfoBR i = (InfoBR)alb.info(v); if (k.equals(i.chiave)) return i.elem; if (k.compareto(i.chiave) < 0) v = alb.sin(v); else v = alb.des(v); } return null; } Algoritmi e Strutture Dati 15

Minimo e Massimo In questo sottoalbero: massimo 4, minimo 1 6 2 8 1 4 12 3 9 15 Algoritmi e Strutture Dati 16

Minimo e Massimo 6 In questo sottoalbero: massimo 15, minimo 8 2 8 1 4 12 3 9 15 Algoritmi e Strutture Dati 17

Ricerca del massimo Dato un nodo v: Il valore massimo contenuto nell'albero con radice v è quello del nodo più a destra Il valore minimo contenuto nell'albero con radice v è quello del nodo più a sinistra protected Nodo max(nodo v) { while (v!= null && alb.des(v)!= null) { v = alb.des(v); } return v; } protected Nodo min(nodo v) { while (v!= null && alb.sin(v)!= null) { v = alb.sin(v); } return v; } Algoritmi e Strutture Dati 18

Ricerca del successore Definizione Il successore di un nodo v è il nodo contenente il più piccolo valore maggiore di v Due casi v 6 2 8 v ha un figlio destro Il successore è il minimo del sottoalbero destro di v Esempio: successore di 2 è 3 1 4 3 9 12 15 successor(v) Algoritmi e Strutture Dati 19

Ricerca del successore Definizione successor(v) Il successore di un nodo v è il nodo contenente il più piccolo valore maggiore di v Due casi v' 6 2 8 v non ha un figlio destro Il successore è il primo antenato v' tale che v stia nel sottoalbero sinistro di v' Esempio: successore di 4 è 6 1 v 4 3 9 12 15 Algoritmi e Strutture Dati 20

Ricerca del successore Pseudo-codice (iterativo) Caso 1: c'è un figlio destro Caso 2: non c'è un figlio destro algorithm ABR successor(abr T) if (T == null) then return null; endif if (T.right null) then return min(t.right); else P := T.parent while (P null && T == P.right) do T := P; P := P.parent; endwhile return P; endif P T Algoritmi e Strutture Dati 21

Ricerca del predecessore Pseudo-codice (iterativo) algorithm ABR predecessor(abr T) if (T == null) then return null; endif if (T.left null) then return max(t.left); else P := T.parent; while (P null && T == P.left) do T := P; P := P.parent; endwhile return P; endif T P Algoritmi e Strutture Dati 22

Ricerca: costo computazionale In generale Le operazioni di ricerca sono confinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia Tempo di ricerca: O(h) Domanda h = altezza dell albero Qual è il caso pessimo? Domanda Qual è il caso ottimo? Algoritmi e Strutture Dati 23

Inserimento Inseriamo il valore 5 6 5 < 6 vai a sinistra 2 8 1 4 12 3 9 15 Algoritmi e Strutture Dati 24

Inserimento Inseriamo il valore 5 6 5 > 2 vai a destra 2 8 1 4 12 3 9 15 Algoritmi e Strutture Dati 25

Inserimento Inseriamo il valore 5 6 2 8 1 4 12 3 9 5 > 4 vai a destra 15 Algoritmi e Strutture Dati 26

Inserimento Inseriamo il valore 5 6 2 8 1 4 12 3 5 9 15 Inserimento effettivo Algoritmi e Strutture Dati 27

Inserimento: pseudo-codice (iterativo) Algorithm ABR_insert(ABR T, Key k, Data d) P := nil while (T!= null) do P := T if T.key > key then T := T.left else T := T.right endif endwhile N := new ABR(k,d) N.parent := P if (P == null) then return N; if (k < P.key) then P.left := N else P.right := N Ricerca posizione nuovo nodo Caso base (inserimento su albero vuoto) Caso generale Algoritmi e Strutture Dati 28

Cancellazione Caso 1 Il nodo v da eliminare non ha figli Semplicemente si elimina Correttezza Eliminare una foglia non altera la proprietà di ordine degli altri nodi 6 2 8 1 4 12 3 5 9 15 v Algoritmi e Strutture Dati 29

Cancellazione Caso 2 Il nodo v da eliminare ha un unico figlio f Si elimina v Si attacca f all'ex-padre p di v in sostituzione di v Correttezza Per la proprietà di ordine, tutti i valori nelle chiavi in T sono p 6 2 p 8 1 4 3 f 9 v 12 15 T Algoritmi e Strutture Dati 30

Cancellazione Caso 3 Il nodo v da eliminare ha due figli Si individua il predecessore p di v Il predecessore non ha figlio destro Perché? 4 9 7 v 10 8 3 6 p 5 Algoritmi e Strutture Dati 31

Cancellazione Caso 3 Il nodo v da eliminare ha due figli Si individua il predecessore p di v Il predecessore non ha figlio destro Si stacca il predecessore Si attacca l'eventuale figlio sinistro di p al padre di p 9 7 v 10 4 8 3 6 p 5 Algoritmi e Strutture Dati 32

Cancellazione Caso 3 Il nodo v da eliminare ha due figli Si individua il predecessore p di v Il predecessore non ha figlio destro Si stacca il predecessore Si attacca l'eventuale figlio sinistro di p al padre di p Si copia p su v 3 4 5 6 Algoritmi e Strutture Dati 33 9 7 p/v 10 6 8

Cancellazione Caso 3 (correttezza) Il predecessore p di v è sicuramente di tutti i nodi del sottoalbero sinistro di v è sicuramente di tutti i nodi del sottoalbero destro di v Quindi può essere sostituito a v 9 7 v 10 4 8 3 6 p 5 Algoritmi e Strutture Dati 34

Implementazione Java protected Nodo delete(infobr i) { Nodo v = i.nodo; if (alb.grado(v) == 2) { Nodo pred = max(alb.sin(v)); scambiainfo(v, pred); v = pred; } Nodo p = alb.padre(v); contrainodo(v); return p; } Elimina il nodo v (che può avere al più un figlio) v pred Algoritmi e Strutture Dati 35

Implementazione Java v f protected void contrainodo(nodo v){ Nodo f = null ; if (alb.sin(v)!= null) f = alb.sin(v); else if (alb.des(v)!= null) f = alb.des(v); } if (f == null) alb.pota(v); else { scambiainfo(v, f); AlberoBin a = alb.pota(f); } v non ha figli alb.innestasin(v, a.pota(a.sin(f))); alb.innestades(v, a.pota(a.des(f))); Elimina il nodo v (che può avere al più un figlio) stacca il sottoalbero radicato in f Algoritmi e Strutture Dati 36

Modifica: costo computazionale In generale Le operazioni di modifica sono confinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia Tempo: O(h) h = altezza dell albero Algoritmi e Strutture Dati 37

Complessità media Qual è l'altezza media di un albero di ricerca? Caso generale (inserimenti + cancellazione) Difficile da trattare Caso semplice : inserimenti in ordine casuale È possibile dimostrare che l'altezza media è O(log n) In generale: Sono necessarie tecniche per mantenere bilanciato l'albero Esempi Alberi AVL (Adelson-Velsky, Landis) Red-Black Tree Splay Tree Non cambiate canale Algoritmi e Strutture Dati 38

Esercizi Esercizio Scrivere un algoritmo non ricorsivo che effettua un attraversamento inordine di un ABR Esercizio Dimostrate che se un nodo in un ABR ha due figli, allora il suo successore non ha un figlio sinistro e il suo predecessore non ha un figlio destro Esercizio L'attraversamento di un ABR di n nodi può essere implementato trovando l'elemento minimo nell'abr e poi chiamando n-1 volte l'operazione successor(). Dimostrate che questo algoritmo viene eseguito in tempo Θ(n) Esercizio L'operazione di cancellazione da un ABR è commutativa? Nel senso che cancellare prima x e poi y, oppure cancellare prima y e poi x, produce lo stesso ABR? Algoritmi e Strutture Dati 39