Alberi binari di ricerca
|
|
|
- Gustavo Bondi
- 7 anni fa
- Просмотров:
Транскрипт
1 Alberi binari di ricerca
2 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
3
4
5
6 Implementazione
7 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;!!}!! }!
8 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;!!}!
9 Implementazione private class Tree{!!!private Node root = null;!!!/* mothods implementation */!!.!! }!
10 Visite " Stessi metodi implementati per l albero binario
11 Lookup 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
12 Minimo e massimo " Minimo: la foglia più a sinistra " Massimo: la foglia più a destra
13 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
14
15 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
16
17 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
18 Inserimento " Caso generale: " Il nuovo nodo viene inserito come foglia
19 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
20 !! /**! 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 sottolabero 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);! }! }!
21 Esercizio " Individuare l ordine di inserimento degli elementi per ciascuno degli alberi mostrati nella slide successiva.
22
23 Cancellazione " Il nodo da eliminare potrebbe essere: " Una foglia " Avere un solo figlio " Avere due figli
24 Cancellazione: caso 1 " Il nodo da eliminare è una foglia " Lo elimino
25 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)
26 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
27 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
28 /**! *! 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);! }! }! }! }!
29 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
Per semplicità eliminiamo le ripetizioni nell'albero.
Albero binario di ricerca 20 40 100 95 Un albero binario di ricerca é un albero binario in cui ogni nodo ha un etichetta minore o uguale a quelle dei nodi nel sottoalbero radicato nel figlio destro e maggiore
Esercitazione 6. Alberi binari di ricerca
Esercitazione 6 Alberi binari di ricerca Struttura base Rappresentabile attraverso una struttura dati concatenata in cui ogni nodo è un oggetto di tipo struttura Ogni nodo contiene: campo chiave (key)
LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve
LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione
Alberi Binario in Java
Alberi Binario in Java Realizzare un albero binario di ricerca. L albero binario è di ricerca se esiste una relazione di ordinamento tra i valori dei nodi (valori comparabili). In particolare, dato un
Implementazione ADT: Alberi
Implementazione ADT: Alberi Livelli di astrazione 2001/2002 1 Esercitazione 5 (E6): alberi (tree) albero struttura dati fondamentale, soprattutto per le operazioni di ricerca tipi di albero con radice
Heap e code di priorità
Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010
Un heap binario è un albero binario con le seguenti caratteristiche:
Heap Un heap binario è un albero binario con le seguenti caratteristiche: È quasi completo: tutti i livelli, tranna al più l ultimo sono completi e le foglie dell ultimo livello sono tutte adossate a sinistra.
Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione
Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico
Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.
Alberi Alberi Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Frodo Dudo Daisy Alberi Gli alberi sono una generalizzazione
Alberi binari di ricerca
Alberi binari di ricerca Ilaria Castelli [email protected] Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010
Alberi ed Alberi Binari
Alberi ed Alberi Binari Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell informazione,
Albero binario. Alberi binari (introduzione) Terminologia. Alberi di ricerca binaria (BST)
Albero binario 2 Alberi binari (introduzione) Struttura di dati bidimensionale formata da nodi costituiti ciascuno dai dati da memorizzare e da due link Ver. 2.4 20 - Claudio Fornaro - Corso di programmazione
Alberi binari e alberi binari di ricerca
Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
Alberi Binari di Ricerca
Alberi Binari di Ricerca Prof. G. M. Farinella [email protected] www.dmi.unict.it/farinella Riferimenti Bibliografici Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms, Third Edition,
Lezione 12 Tabelle Hash
Lezione 12 Tabelle Hash Rossano Venturini [email protected] Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 2 ABR: Visita Scrivere un programma che legga
GLI ALBERI BINARI DI RICERCA. Cosimo Laneve
GLI ALBERI BINARI DI RICERCA Cosimo Laneve argomenti 1. alberi binari di ricerca 2. la ricerca di elementi e la complessità computazionale 3. operazione di cancellazione di elementi 4. esempi/esercizi
Multi-way search trees
Multi-way search trees GT. 10.4 1 Argomenti Multi-way search trees Multi-way searching 9 (2,4) Trees 2 5 7 10 14 2 1 Alberi Binari di Ricerca Bilanciati n numero di chiavi (entry(key,elem)) AVL tree log(
Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei
Alberi Alberi: definizioni Alberi Binari Esercizi su alberi binari: metodi ricorsivi Struttura dati per alberi generici 1 Alberi Gli alberi sono strutture dati naturalmente ricorsive Un albero è un particolare
In questa lezione Alberi binari di ricerca: la cancellazione
In questa leione Alberi binari di ricerca: la cancellaione 1 L algoritmo di Hibbard per cancellare (1962) Sia il nodo da cancellare: 1) è una foglia: si rimuove 2) ha un solo figlio x: si rende x figlio
Implementazione dell albero binario in linguaggio C++
Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello del 24 Gennaio 2007 Esercizio 1 (ASD) 1. Sia T (n) = T (n/6) + T (n/3) + Θ(n). Considerare ciascuna delle seguenti affermazioni
Alberi e alberi binari I Un albero è un caso particolare di grafo
Alberi e alberi binari Un albero è un caso particolare di grafo È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine ed entra
Alberi Binari di Ricerca
Alberi Binari di Ricerca Algoritmi su gli alberi binari: visite Dato un puntatore alla radice di un albero vogliamo scandire in modo sistematico tutti i nodi di tale albero In una lista abbiamo una unica
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.
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 FB = -1 livello 1 FB = -1 livello 2 livello 3 L altezza è 3, il minimo si trova nel
Alberi Binari di Ricerca
Alberi Binari di Ricerca Damiano Macedonio Università Ca' Foscari di Venezia [email protected] Original work Copyright Alberto Montresor, University of Trento (http://www.dit.unitn.it/~montreso/asd/index.shtml)
Inserimento in una lista ordinata
Inserimento in una lista ordinata Vogliamo inserire un nuovo elemento in una lista in cui gli elementi sono memorizzati in ordine crescente: Passo 1: creare un nuovo nodo della lista Passo 2: trovare il
