Algoritmi e Strutture Dati



Похожие документы
Alberi binari di ricerca

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

Esercizi Capitolo 6 - 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

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

Programmazione dinamica

B+Trees. Introduzione

STRUTTURE NON LINEARI

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

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

TSP con eliminazione di sottocicli

Appunti di informatica. Lezione 2 anno accademico Mario Verdicchio

Algoritmi di Ricerca. Esempi di programmi Java

LISTE, INSIEMI, ALBERI E RICORSIONE

Ricerca non informata in uno spazio di stati

3 GRAFICI DI FUNZIONI

Operazioni sui database

Esercizi per il corso di Algoritmi e Strutture Dati

Capitolo 5. Funzioni. Grafici.

Problemi di ordinamento

TSP con eliminazione di sottocicli

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

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

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

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

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

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

Транскрипт:

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