Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoAdriana Mauro Modificato 8 anni fa
1
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
2
Fondamenti di Informatica A - Massimo Bertozzi Definizione ✗ Si definisce albero una struttura dati costituita da un insieme finito di nodi tali che: ✗ Esiste un nodo speciale chiamato radice (root); ✗ I restanti nodi sono suddivisi in n insiemi disgiunti T 0, T 1,...,T n-1 ciascuno dei quali è un albero.
3
Fondamenti di Informatica A - Massimo Bertozzi Esempio
4
Fondamenti di Informatica A - Massimo Bertozzi Glossario ✗ Nodo ✗ Ramo ✗ Grado di un nodo ✗ Grado di un albero ✗ Foglia ✗ Padre ✗ Figlio ✗ Fratelli ✗ Livello ✗ Altezza o profondità
5
Fondamenti di Informatica A - Massimo Bertozzi Alberi binari ✗ Noi tratteremo solo alberi binari! ✗ Si definisce albero binario un insieme (anche vuoto) formato da un nodo radice e da due alberi binari disgiunti detti sottoalbero sinistro e sottoalbero destro ✗ Piú semplicemente un albero binario è un albero avente grado 2
6
Fondamenti di Informatica A - Massimo Bertozzi Numero massimo di nodi per livello ✗ In un albero binario il numero massimo dei nodi di livello i è pari a 2 i-1 con i>=1: ✗ Si dimostra per induzione su i. Infatti per la radice è immediato. Dato che ogni nodo può avere al massimo due figli per il livello i il numero massimo dei nodi è pari a 2 volte il numero massimo di nodi del livello i-1
7
Fondamenti di Informatica A - Massimo Bertozzi Numero massimo nodi per albero ✗ Il numero massimo di nodi di un albero di profondità k è 2 k - 1 con k>=1:
8
Fondamenti di Informatica A - Massimo Bertozzi Albero pieno ✗ Un albero di profondità k si dice pieno quando è formato da 2 k -1 nodi
9
Fondamenti di Informatica A - Massimo Bertozzi Albero binario: rappresentazione collegata ✗ In C/C++ è possibile rappresentare un albero binario mediante una rappresentazione collegata: struct nodo{ miodato dato; struct nodo *sinistra; struct nodo *destra; } struct nodo *radice=NULL;
10
Fondamenti di Informatica A - Massimo Bertozzi Attraversamento di un albero ✗ Una delle operazioni piú comuni è la visita di tutti i nodi dell'albero. 4 possibilità: 1. Inorder (SVD); 2. Postorder (SDV); 3. Preorder (VSD); 4. Di livello (richiede l'utilizzo di una coda). ✗ Vedere nel codice di esempio anche le operazioni di copia e controllo equivalenza!
11
Fondamenti di Informatica A - Massimo Bertozzi Alberi binari di ricerca (BST) ✗ Un albero binario si definisce albero binario di ricerca se: ✗ Ogni nodo è caratterizzato da una chiave univoca; ✗ Per ogni nodo le chiavi dei nodi appartenenti al sottoalbero di destra sono piú grandi di quella del padre ✗ Per ogni nodo e chiavi dei nodi appartenenti al sottoalbero di sinistra sono piú piccole di quella del padre
12
Fondamenti di Informatica A - Massimo Bertozzi Esempio di Binary Search Tree
13
Fondamenti di Informatica A - Massimo Bertozzi Albero binario di ricerca: rappresentazione collegata ✗ Nel caso dei BST è opportuna una rappresentazione piú mnemonica: struct nodo{ miodato dato; tipo_chiave chiave; struct nodo *maggiori; struct nodo *minori; } struct nodo *radice=NULL;
14
Fondamenti di Informatica A - Massimo Bertozzi BST: operazioni specifiche ✗ Le operazioni viste per gli alberi binari sono valide anche per i BST ad eccezione dell'equivalenza. ✗ Gli attraversamenti di tipo inorder permettono la scansione ordinata dei dati! ✗ Operazioni specifiche (vedere codice): ✗ inserimento ✗ cancellazione ✗ ricerca ✗ selezione
15
Fondamenti di Informatica A - Massimo Bertozzi Inserimento in foglia ✗ È il piú semplice ✗ Adatto ad essere implementato sia ricorsivamente che iterativamente ✗ Si traversa l'albero confrontando la chiave del nodo da inserire con la chiave del nodo che si sta visitando e ci si sposta di conseguenza. ✗ Se non c'è il figlio inserisco.
16
Fondamenti di Informatica A - Massimo Bertozzi Ricerca ✗ Analoga all'inserimento in foglia. ✗ Il numero di passi necessario per trovare il nodo avente la chiave ricercata è legato alla profondità dell'albero. ✗ In un albero pieno questa è log 2 n con n numero dei nodi ✗ Nel caso peggiore può essere n!
17
Fondamenti di Informatica A - Massimo Bertozzi Inserimento in radice ✗ Nei casi reali è frequente che l'elemento ricercato sia fra quelli piú recentemente inseriti. ✗ Inserimento in foglia svantaggioso!
18
Fondamenti di Informatica A - Massimo Bertozzi Rotazioni ✗ L'inserimento in radice è complesso e richiede l'utilizzo di modifiche strutturali all'albero dette rotazioni
19
Fondamenti di Informatica A - Massimo Bertozzi Esempio di inserimento in radice Per inserire in radice si effettua un inserimento in foglia seguito da rotazioni per riportare l'elemento verso l'alto
20
Fondamenti di Informatica A - Massimo Bertozzi Inserimento in radice: crescita ✗ Crescita di un albero in cui vengono inseriti in radice gli elementi A, S, E, R, C e H:
21
Fondamenti di Informatica A - Massimo Bertozzi Selezione di un nodo ✗ Se considero i nodi ordinati secondo la chiave posso immaginarli come numerati da 0 a n. ✗ La selezione è l'operazione che mi permette dato un indice k di recuperare il nodo corrispondente. ✗ Si contano i nodi di uno dei sottoalberi e ci si sposta di conseguenza
22
Fondamenti di Informatica A - Massimo Bertozzi Partizione di un BST ✗ La partizione di un albero binario di ricerca consiste nel portare in radice il nodo di indice desiderato ✗ Se k è l'indice del nodo in radice il sottoalbero di sinistra contiene k nodi e il sottoalbero di destra n-k ✗ Combinazione di selezioni e rotazioni
23
Fondamenti di Informatica A - Massimo Bertozzi Cancellazione di un nodo ✗ Operazione complessa, 3 possibilità: ✗ foglia: semplicemente elimino. ✗ nodo con solo un figlio: elimino e collego al padre l'unico figlio. ✗ nodo con due figli: lo elimino e lo sostituisco con l'elemento avente chiave maggiore fra quelli del sottoalbero dei nodi con chiave minore (grado sempre <=1).
24
Fondamenti di Informatica A - Massimo Bertozzi Albero degenere ✗ L'inserimento di nodi ordinati può portare a situazioni degeneri ✗ Situazione frequente!
25
Fondamenti di Informatica A - Massimo Bertozzi Inserimento casuale ✗ Una possibile soluzione alla creazione di alberi degeneri è mescolare inserimento in foglia e inserimento in radice. ✗ Inserimento casuale. ✗ L'inserimento casuale riduce i problemi ma non li risolve completamente.
26
Fondamenti di Informatica A - Massimo Bertozzi Bilanciamento di un BST ✗ Il partizionamento permette di bilanciare un albero partizionando ricorsivamente tramite l'elemento di mezzo. ✗ Soluzione onerosa (O(n)) ✗ Non adeguato in tutte le condizioni
27
Fondamenti di Informatica A - Massimo Bertozzi Alberi AVL ✗ Un albero si dice bilanciato quando i due sottoalberi della radice hanno un differenza di profondità <=1 e sono a loro volta bilanciati. ✗ Gli alberi AVL sono alberi le cui operazioni di inserimento mantengono l'albero bilanciato. ✗ Inserimento in foglia con rotazioni che bilanciano
28
Fondamenti di Informatica A - Massimo Bertozzi Inserimento in alberi AVL ✗ 4 tipi di rotazione SS, DD, SD, DS:
29
Fondamenti di Informatica A - Massimo Bertozzi Alberi 2-3-4 ✗ Gli alberi 2-3-4 sono alberi di ricerca NON binari aventi 3 tipi di nodi: ✗ nodi 2: analoghi a quelli dei BST. ✗ nodi 3: tre figli e due chiavi, i valori delle chiavi dei sottoalberi sono suddivisi in funzione delle chiavi del padre. ✗ nodi 4: quattro figli e tre chiavi,...
30
Fondamenti di Informatica A - Massimo Bertozzi Alberi 2-3-4: esempio ✗ Gli alberi 2-3-4 possono essere perfettamente bilanciati
31
Fondamenti di Informatica A - Massimo Bertozzi Alberi rosso-neri ✗ La complessità di gestione degli alberi 2-3-4 può essere ridotta introducendo collegamenti colorati:
32
Fondamenti di Informatica A - Massimo Bertozzi Confronto operazioni
33
Fondamenti di Informatica A - Massimo Bertozzi Miglioramenti ✗ Fra le strutture dati esaminate durante il corso l'albero binari di ricerca permette di ottenere le prestazioni maggiori. ✗ Si può migliorare: ✗ radix search ✗ tecniche di hash
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.