Algoritmi e Strutture Dati



Documenti analoghi
Alberi binari di ricerca

Alberi di ricerca binari

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

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Alberi auto-aggiustanti

Alberi binari. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

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

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.

Esercizi Capitolo 6 - Alberi binari di ricerca

Alberi Binari di Ricerca. Vittorio Maniezzo Università di Bologna

Alberi Binari di Ricerca

Alberi binari di ricerca

Algoritmi e Strutture Dati

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

La struttura dati ad albero binario

Informatica 3. LEZIONE 23: Indicizzazione. Modulo 1: Indicizzazione lineare, ISAM e ad albero Modulo 2: 2-3 trees, B-trees e B + -trees

Alberi Binari di Ricerca

Lezione 15. Algoritmi su gli alberi binari: visite

4.1 Modelli di calcolo analisi asintotica e ricorrenze

Esercizi Capitolo 5 - Alberi

Alberi Binari di Ricerca

Alberi binari di ricerca

Indici ad albero. Albero Binario di Ricerca

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Alberi Binari di Ricerca

Algoritmi e Strutture Dati

Programmazione dinamica

B+Trees. Introduzione

STRUTTURE NON LINEARI

Algoritmi e Strutture Dati

B alberi. dizionari in memoria secondaria

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Laboratorio di Algoritmi e Strutture Dati

Algoritmi e strutture dati. Codici di Huffman

Algoritmi e Strutture Dati

I tipi di dato astratti

Appunti di Algoritmi e Strutture Dati. Grafi. Gianfranco Gallizia

Alberi Binari di Ricerca e Alberi Rosso-Neri

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

TSP con eliminazione di sottocicli

Algoritmi e Strutture Dati

Appunti di informatica. Lezione 2 anno accademico Mario Verdicchio

Algoritmi di Ricerca. Esempi di programmi Java

LISTE, INSIEMI, ALBERI E RICORSIONE

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmi e Strutture Dati. Alberi di Ricerca Alberi Bilanciati I (Alberi AVL)

Ricerca non informata in uno spazio di stati

3 GRAFICI DI FUNZIONI

Algoritmi e strutture dati

Operazioni sui database

Esercizi per il corso di Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Dizionari. Realizzazione con alberi binari di ricerca. Alberi rosso-neri. Ugo de' Liguoro - Algoritmi e Seprimentazioni 03/04 Lez.

Capitolo 5. Funzioni. Grafici.

Problemi di ordinamento

TSP con eliminazione di sottocicli

Introduzione ai tipi di dato astratti: applicazione alle liste

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Altri metodi di indicizzazione

Corso di Matematica per la Chimica

Plate Locator Riconoscimento Automatico di Targhe

GESTIONE INFORMATICA DEI DATI AZIENDALI

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

Planning as Model Checking Presentazione della Tesina di Intelligenza Artificiale

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Esercizi su alberi binari

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

ricerca di un elemento, verifica dell appartenenza di un elemento

Documentazione del progetto Classe 5 Cp A.s. 2011/2012

Alberi rosso-neri. Oltre ad essere alberi binari di ricerca, gli alberi rosso-neri soddisfano le seguenti proprietà:

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006

Calcolare il massimo di una lista

Algoritmi e Strutture Dati

Il Metodo Branch and Bound

Introduzione al MATLAB c Parte 2

Alberi Rosso-Neri: definizione

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

10 - Programmare con gli Array

Compito di Fondamenti di Informatica

Ricorsione. Rosario Culmone. - p. 1/13

In questa lezione. Alberi binari: [CLRS09] cap. 12 per la visita inorder. visite e esercizi su alberi binari. Prof. E. Fachini - Intr. Alg.

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

ALGORITMI E STRUTTURE DATI

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

F G H I L. Sulla base della figura, nel programma sono usate le seguenti definizioni:

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Progettazione Fisica FILE

Informatica. Rappresentazione dei numeri Numerazione binaria

Parte 1. Vettori di bit - AA. 2012/13 1.1

Alberi binari di ricerca

ADT Coda con priorità

Indirizzamento Aperto

Cosa è un foglio elettronico

Catalogo Elettronico Lancia, Fiat e Alfa Romeo

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

Transcript:

Alberi Binari di Ricerca (BST) Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07

Alberi Binari di Ricerca (Binary Search Trees BST) Un albero binario di è un particolare tipo di albero binario Ogni nodo u è un oggetto costituito da diversi campi: key (più eventuali dati satellite) un campo left, right e parent che puntano rispettivamente al figlio sinistro, al figlio destro e al padre u Le chiavi sono sempre memorizzate in modo che sia verificata la proprietà dell albero binario di : Sia x un nodo di un albero binario di ; allora: se y è un nodo del sottoalbero sinistro di x allora key[y] key[x] se y è un nodo del sottoalbero destro di x allora key[y] key[x]

Alberi Binari di Ricerca 8 18 6 1 9 17 16

Alberi Binari di Ricerca 8 18 6 1 9 17 16

Alberi Binari di Ricerca e visita in ordine simmetrico 8 18 Inorder-Tree-Walk(x) if x nil then Inorder-Tree-Walk(left[x]) stampa key[x] Inorder-Tree-Walk(right[x]) 6 1 9 17 16 Inorder-Tree-Walk(root), 6, 8, 9, 1, 16, 17, 18 elenca tutte le chiavi di un BST in modo ordinato

Esercizio Dimostrare che, se x è la radice di un sottoalbero di n nodi la chiamata Inorder-Tree-Walk(x) richiede un tempo Θ(n) Sia T (n) il tempo richiesto dalla chiamata Inorder-Tree-Walk(x) quando x è la radice di un (sotto)albero di n nodi Se n = 0 (cioè se x = nil) T (n) = c per qualche costante c > 0 Se n > 0 e k è il numero di nodi del sottoalbero sinistro, allora T (n) = T (k) + T (n k 1) + d per qualche costante d > 0 Applichiamo il metodo della sostituzione per dimostrare che T (n) = (c + d)n + c per ogni n 0 e quindi che T (n) = Θ(n)

Esercizio Applichiamo il metodo della sostituzione per dimostrare che T (n) = (c + d)n + c per ogni n 0 e quindi che T (n) = Θ(n) Procediamo per induzione su n Caso Base (n = 0): T (n) = c = (c + d)0 + c Per n > 0 abbiamo che T (n) = T (k) + T (n k 1) + d = ((c + d)k + c) + ((c + d)(n k 1) + c) + d = (c + d)n + c (c + d) + c + d = (c + d)

Operazioni su Alberi Binari di Ricerca I BST sono strutture dati sulle quali vengono realizzate molte delle operazioni definite su insiemi dinamici, tra le quali: Search, Insert, Delete, Minumun, Maximum, Predecessor e Successor

Ricerca di un elemento BST: definizione Su ogni nodo usa la proprietà dell albero binario di per decidere se proseguire a destra o a sinistra 8 18 Ricerchiamo 16 6 1 9 17 16 Il numero di confronti necessari per individuare un elemento è, al più, pari all altezza dell albero

Ricerca di un elemento BST: definizione Tree-Search(x, k) if x = nil or k = key[x] then return x if k < key[x] then return Tree-Search(left[x], k) else return Tree-Search(right[x], k) Iterative-Tree-Search(x, k) while x nil or k key[x] do if k < key[x] then x left[x] else x right[x] return x

Minimo e massimo BST: definizione Seguiamo i puntatori left (per Tree-Minumum) e right (per Tree-Maximum) dalla radice fin quando non si incontra nil min 8 18 max 6 1 9 17 Il costo di entrambe le operazioni è proporzionale all altezza dell albero 16

Minimo e massimo BST: definizione Tree-Minimum(x) while left[x] nil do x left[x] return x Tree-Maximum(x) while right[x] nil do x right[x] return x

Successore e Predecessore Successore (caso 1): x ha un sottoalbero destro 8 18 6 1 9 17 16 Successor(x) = Tree-Minimum(right[x]) = 16

Successore e Predecessore Successore (caso 2): x non ha un sottoalbero destro, ma ha un successore y 8 6 16 18 y = l antenato più prossimo 1 di x il cui figlio sinistro è anche un antenato si x 9 17

Successore e Predecessore Tree-Successor(x) if right[x] nil then return Tree-Minumum(right[x]) y p[x] while x nil and x = right[y] do x y y p[y] return y

Successore e Predecessore L algoritmo per il calcolo del predecessore di un dato nodo è del tutto simmetrico Seguiamo il puntatore p dal nodo x fino, al più, alla radice Di nuovo, il costo di entrambe le operazioni è proporzionale all altezza dell albero

Ricapitolando BST: definizione Abbiamo dimostrato il seguente teorema Teorema: le operazioni su insiemi dinamici Search, Minumun, Maximum, Predecessor e Successor possono essere eseguite su un albero binario di di altezza h in in tempo O(h)

Inserimento BST: definizione L algoritmo Tree-Insert(T, z) lavora in maniera molto simile alla Cerca la corretta posizione di z nell albero identificando così il nodo y che diventerà padre di z Infine, appende z come figlio sinistro/destro di y in modo che sia mantenuta la proprietà dell albero binario di Come la altre primitive su alberi binari di, la procedura Tree-Insert richiede un tempo O(h)

Inserimento BST: definizione Tree-Insert(T, z) con key[z] = 11 T 8 18 6 1 12 17 11 16

Tree-Insert(T, z) y nil L algoritmo cerca un cammino discendente dalla radice x root[t ] fino ad una foglia; x segue il cammino, y punta al padre di x while x nil do y x if key[z] < key[x] then x left[x] else x right[x] usciti da questo ciclo y è il puntatore al padre del nuovo nodo p[z] y if y = nil then root[t ] z else if key[z] < key[y] then left[y] z else righ[y] z

Cancellazione BST: definizione Tree-Delete(T,z): z è una foglia 8 8 18 18 6 1 6 1 9 17 z 9 17 16

Cancellazione BST: definizione Tree-Delete(T,z): z ha solo un figlio 8 z 8 18 1 6 1 9 17 16 6 9 17 16

Cancellazione BST: definizione Tree-Delete(T,z): z ha due figli 8 z 9 18 18 1 6 1 9 17 12 17 12 16 16 Tree-Successor(T, z) è il nodo più a sinistra del sottoalbero destro di z, ha al più un figlio (destro)

Tree-Delete(T, z) if left[z] = nil or right[z] = nil z ha al più un figlio then y z else y Tree-Successor(z) y è il nodo da eliminare if left[y] nil then x left[y] else x right[y] x è il figlio non nil di y (se esiste) altrimenti è nil if x nil then p[x] p[y] if p[y] = nil then root[t ] x else if left[p[y]] = y then left[p[y]] x else right[p[y]] x if y z se il nodo eliminato è il successore di z then key[z] key[y] più altri dati satellite return y

Ricapitolando BST: definizione Abbiamo dimostrato il seguente teorema Teorema: le operazioni su insiemi dinamici Insert e Delete possono essere eseguite su un albero binario di di altezza h in in tempo O(h)

Costo delle Operazioni Tutte le operazioni su BST hanno un costo O(h) dove h è l altezza dell albero binario di È fondamentale mantenere l albero bilanciato, in questo caso infatti l altezza è logaritmica nel numero di nodi h = log 2 (n + 1) - 1 h = n - 1

Costo delle Operazioni Quando l albero è sbilanciato h = n 1 e le operazioni hanno un costo lineare invece che logaritmico Soluzione: introduciamo alcune proprietà addizionali sui BST per mantenerli bilanciati (Alberi AVL) le operazioni dinamiche sull albero devono preservare le proprietà introdotte per mantenere il bilanciamento paghiamo in termini di una maggiore complessità di tali operazioni