Alberi Binari di Ricerca Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna

Slides:



Advertisements
Presentazioni simili
Alberi binari di ricerca
Advertisements

Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Il problema del dizionario
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 7 - Tabelle hash Alberto Montresor Università di Trento This work is licensed under the Creative.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Capitolo 6 Il problema del dizionario Algoritmi e Strutture Dati.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Prog21 Alberi binari (radicati e ordinati) Il figlio destro della radice La radice Il figlio sinistro della radice Il padre del nodo 5.
Tecniche Algoritmiche/1 Divide et Impera Moreno Marzolla
Statistiche d'ordine Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Strutture dati elementari Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
Alberi Bilanciati di Ricerca Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Minimum Spanning Tree Moreno Marzolla
Tecniche Algoritmiche/2 Programmazione Dinamica Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Code con priorità Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Union-Find Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Dudo.
Esercitazioni di Prog. II (esercizi su alberi ennari)
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi e Strutture Dati
Progettare algoritmi veloci usando strutture dati efficienti
Il linguaggio C Strutture Moreno Marzolla
Dizionari alberi bilanciati.
Alberi di ricerca di altezza logaritmica
Logica binaria Moreno Marzolla
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Lezione n°7 Prof.ssa Rossella Petreschi
Alberi binari Definizione Sottoalberi Padre, figli
Algoritmi e Strutture Dati
B-alberi e alberi autoaggiustanti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Dizionari alberi bilanciati.
Lezione n°6 Prof.ssa Rossella Petreschi
Introduzione agli Algoritmi e alle Strutture Dati
Heapsort.
Alberi n-ary Lezioni di C.
Algoritmi e Strutture Dati
Progettare algoritmi veloci usando strutture dati efficienti
APPUNTI SUL LINGUAGGIO C Implementazioni di Liste Concatenate
Algoritmi e Strutture Dati
APPUNTI SUL LINGUAGGIO C Alberi Binari – primi esercizi
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
concetti ed applicazioni
Insiemi disgiunti.
Algoritmi e Strutture Dati
Ricerca 01/08/2019 package.
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Alberi Binari di Ricerca Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna

Algoritmi e Strutture Dati2 Original work Copyright © Alberto Montresor, University of Trento ( Modifications Copyright © 2009, 2010, Moreno Marzolla, Università di Bologna ( This work is licensed under the Creative Commons Attribution-NonCommercial- ShareAlike License. To view a copy of this license, visit or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Algoritmi e Strutture Dati3 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 Dati4 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

Algoritmi e Strutture Dati5 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 Figlio destro Key, Data

Algoritmi e Strutture Dati6 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 e 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 Dati7 Esempio ricerca del valore < 6 vai a sinistra

Algoritmi e Strutture Dati8 Esempio ricerca del valore > 2 vai a destra

Algoritmi e Strutture Dati9 Esempio ricerca del valore Trovato!

Algoritmi e Strutture Dati10 Altro esempio ricerca del valore > 6 vai a destra

Algoritmi e Strutture Dati11 Altro esempio ricerca del valore < 8 vai a sinistra ???

Algoritmi e Strutture Dati12 Altro esempio ricerca del valore Non trovato ???

Algoritmi e Strutture Dati13 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 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 Versione ricorsiva Versione iterativa

Algoritmi e Strutture Dati14 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 Dati15 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 Dati16 Minimo e Massimo In questo sottoalbero: massimo 4, minimo 1

Algoritmi e Strutture Dati17 Minimo e Massimo In questo sottoalbero: massimo 15, minimo 8

Algoritmi e Strutture Dati18 Ricerca del massimo protected Nodo max(Nodo v) { while (v != null && alb.des(v) != null) { v = alb.des(v); } return v; } ● 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 min(Nodo v) { while (v != null && alb.sin(v) != null) { v = alb.sin(v); } return v; }

Algoritmi e Strutture Dati19 Ricerca del successore ● Definizione – Il successore di un nodo v è il nodo contenente il più piccolo valore maggiore di v ● Due casi – v ha un figlio destro – Il successore è il minimo del sottoalbero destro di v – Esempio: successore di 2 è v successor(v)

Algoritmi e Strutture Dati20 Ricerca del successore ● Definizione – Il successore di un nodo v è il nodo contenente il più piccolo valore maggiore di v ● Due casi – 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 è v successor(v) v'

Algoritmi e Strutture Dati21 Ricerca del successore Pseudo-codice (iterativo) 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 Caso 1: c'è un figlio destro Caso 2: non c'è un figlio destro P T

Algoritmi e Strutture Dati22 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 P T

Algoritmi e Strutture Dati23 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 – Qual è il caso pessimo? ● Domanda – Qual è il caso ottimo? h = altezza dell’albero

Algoritmi e Strutture Dati24 Inserimento Inseriamo il valore < 6 vai a sinistra

Algoritmi e Strutture Dati25 Inserimento Inseriamo il valore > 2 vai a destra

Algoritmi e Strutture Dati26 Inserimento Inseriamo il valore > 4 vai a destra

Algoritmi e Strutture Dati27 Inserimento Inseriamo il valore Inserimento effettivo 5

Algoritmi e Strutture Dati28 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 Dati29 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 v

Algoritmi e Strutture Dati30 T 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 v f p

Algoritmi e Strutture Dati31 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é? v p

Algoritmi e Strutture Dati32 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 v p

Algoritmi e Strutture Dati33 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 p/v 6

Algoritmi e Strutture Dati34 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 v p

Algoritmi e Strutture Dati35 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; } v pre d Elimina il nodo v (che può avere al più un figlio)

Algoritmi e Strutture Dati36 Implementazione Java 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); 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) v non ha figli v f stacca il sottoalbero radicato in f

Algoritmi e Strutture Dati37 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 Dati38 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 Dati39 Esercizi ● Esercizio – Scrivere un algoritmo non ricorsivo che effettua un attraversamento in-ordine di un ABR ● Esercizio – Dimostrare: qualunque algoritmo basato su confronti per costruire un ABR è Ω(n log n) ● Suggerimento: poiché l'ordinamento basato su confronti di n elementi è Ω(n log n), allora... ● 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

Algoritmi e Strutture Dati40 Esercizi ● 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 – Scrivete una versione ricorsiva della procedura insert() ● 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?