Strutture dati Alberi binari

Documenti analoghi
Esercitazione 6. Alberi binari di ricerca

Strutture dati. Le liste

Albero binario. Alberi binari (introduzione) Terminologia. Alberi di ricerca binaria (BST)

Alberi binari di ricerca

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre

Esempi. Albero di interi. Struttura che non è un albero!

Alberi. Alberi: Esempio di utilizzo

Alberi binari e alberi binari di ricerca

Alberi ed Alberi Binari di Ricerca

Alberi binari e alberi binari di ricerca

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI

d. Cancellazione del valore 5 e. Inserimento del valore 1

Alberi binari e alberi binari di ricerca

Alberi ed Alberi Binari

Alberi binari di ricerca

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

ricerca di un elemento, verifica dell appartenenza di un elemento

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

ALBERI BINARI DI RICERCA

Divide et impera su alberi

Alberi e alberi binari I Un albero è un caso particolare di grafo

Alberi e alberi binari I Un albero è un caso particolare di grafo

Prossime lezioni e tutorato!

Per semplicità eliminiamo le ripetizioni nell'albero.

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi. La definizione ricorsiva: Un albero radicato (non vuoto) è: o un singolo nodo o una radice connessa a un insieme di alberi.

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Alberi Binari Alberi Binari

Lezione 7 Alberi binari: visite e alberi di ricerca

Strutture dati dinamiche

Informatica 3. Informatica 3. LEZIONE 14: Alberi binari: introduzione. Lezione 14 - Modulo 1. Definizioni. Introduzione. Definizioni e proprietà

L albero e un tipo astratto di dati usato per rappresentare relazioni gerarchiche.

Esercizi BST - AVL. E. Fachini

Liste concatenate. Violetta Lonati

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Esercitazione su Albero Binario

Strutture dati dinamiche in C (II)

Un esempio di mutua ricorsione

ricerca di un elemento, verifica dell appartenenza di un elemento

Alberi. Definizione, realizzazione e algoritmi elementari. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 7

Alberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3

Laboratorio di Informatica. Lezione 8: Liste e alberi

ALBERI. Un Albero. Un grafo aciclico che non è un albero: due archi entranti in uno stesso nodo

Alberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmi e Strutture Dati. Lezione 3

ALGORITMI E STRUTTURE DATI

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.

Lezione 12 Tabelle Hash

In questa lezione Alberi binari di ricerca

Informatica 3. LEZIONE 15: Implementazione di alberi binari - BST. Modulo 1: Implementazione degli alberi binari Modulo 2: BST

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

Alberi Binari di Ricerca: Definizione. Ricerca, inserimento, cancellazione, min, max, predecessore, successore.

Laboratorio di Algoritmi

K-d-tree A L B E R T O B E L U S S I A N N O A C C A D E M I C O

Alberi binari. Alberi Albero binario Heap tree

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

Alberi Binari di Ricerca e Alberi Rosso-Neri

Moltiplicazione veloce di interi

Alberi binari di ricerca

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

Algoritmi e Strutture Dati. Lezione 5

Alberi Binari di Ricerca

In questa lezione Alberi binari di ricerca: la cancellazione

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.

lezione 9 min-heap binario Heap e Alberi posizionali generali

Introduzione Implementazione (1)

algoritmi e strutture di dati

Implementazione ADT: Alberi

Note per la Lezione 4 Ugo Vaccaro

Alberi di ricerca binari

Algoritmi e Strutture Dati

ALBERI DI RICERCA BINARI (O ALBERI BINARI DI RICERCA)

Algoritmi e Strutture Dati

Esercitazione 5 Alberi Binari di Ricerca

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Verificare se un albero binario è bilanciato

Informatica 3. LEZIONE 17: Alberi generici. Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza

Algoritmi e Strutture Dati Laboratorio 20/10/2008. Prof. Pier Luca Lanzi

Strutture Dati Dinamiche. Monday, January 10, 2011

Problemi di ordinamento

Indice come albero binario di ricerca!

Esercizi su ABR. Prof. E. Fachini - Intr. Alg.!1

Esercizi su programmazione ricorsiva 3

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

Informatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico.

RICERCA BINARIA...1 ALBERO BINARIO DI RICERCA (ABR)...3 RICORSIONE...4 ESEMPI DI RICORSIONE IN VISUAL BASIC...5 ESEMPI DI RICORSIONE IN C / C++...

Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato

Ricerca con una chiave k Assumiamo l esistenza di un descrittore albero con i campi: albero.radice (=null per l albero vuoto) albero.dimensione (=0 pe

K-d-tree ALBERTO BELUSSI ANNO ACCADEMICO Caratteristiche di base

Esercizi su alberi binari

Heap e code di priorità

Laboratorio di Algoritmi e Strutture Dati

Transcript:

Strutture dati - 2 - Alberi binari

Definizione L albero è un insieme di elementi (nodi), sui quali è definita una relazione di discendenza con due proprietà: esiste un solo nodo radice senza predecessori ogni altro nodo ha un unico predecessore

Definizione tree= V, E dove V è un insieme di valori, E V V è una relazione su V e = vparent, vchild e E Grado di uscita: numero dei successori diretti di un nodo Profondità: distanza di un nodo dalla radice; la radice ha profondità 0; ogni nodo radice ha profondità pari a quella del predecessore + 1

Operazioni Si eseguono le stesse operazioni effettuate sulle liste ma: esistono più nodi terminali (le foglie): si deve decidere un criterio per l inserimento in coda l inserimento in testa o nodi intermedi fa degenerare l albero su una forma sequenziale: è da evitare

Alberi binari di ricerca Ogni nodo a grado di uscita 2 Il valore codificato su un nodo è del valore codificato sul figlio sinistro e < del valore codificato sul figlio destro Un albero è bilanciato se ogni nodo su un livello diverso dall ultimo o penultimo ha due figli

Alberi binari di ricerca: esempi

Numero di nodi Un albero di profondità D è bilanciato sse contiene tutti i nodi che posso essere ospitati sui livelli D+1, da cui se esiste almeno un nodo al livello D il numero N dei nodi è: da cui D ln2n N 1+ D 1 2 d d = 0 = 2 D

Implementazione Implementazione con puntatori i puntatori sono ai nodi figli, se non esistono hanno valore NULL struct btree{ float value; struct btree *left; struct btree *right;

Attraversamento dell albero Preorder: visita radice, albero sinistro, albero destro Inorder: visita albero sinistro, radice, albero destro Postorder: visita albero sinistro, albero destro, radice Il carico sullo stack è sempre O(ln2N)

Visita L implementazione ricorsiva è simile a quella della lista: void visit_r(struct btree *ptr) { if ( ptr!=null ) { visit_r( ptr->left ); printf( %f,ptr->value); visit_r( ptr->right ); E un attraversamento inorder

Visita - 2 - void visit_r(struct btree *ptr) { if ( ptr!=null ) { visit_r( ptr->left ); visit_r( ptr->right ); //postorder printf( %f,ptr->value); E una visita postorder, ovvero depth-first

Ricerca In un albero bilanciato la ricerca è O(ln2N), se l albero degenera diventa O(N) Algoritmo: se la radice contiene il target ci si ferma con successo; se la radice è > target si deve cercare sul sotto-albero di sinistra, altrimenti su quello di destra

Ricerca: implementazione ricorsiva Boolean search_r(struct btree *ptr, float target) { if ( ptr!=null ) { if ( ptr->value == target ) return TRUE; else { if ( ptr->value > target ) search_r( ptr->left, target ); else search_r( ptr->right, target ); else return FALSE;

Inserimento Si deve stabilire il criterio di inserimento in coda in un albero binario di ricerca si inserisce il valore nell unica foglia che mantiene l albero in ordine si scende dalla radice e si opera sul sottoalbero appropriato raggiunta una foglia si effettua l inserimento E O(ln2N)

Inserimento: implementazione ricorsiva void insert_inorder_r(struct btree **pptr, value) { if ( *pptr!= NULL ) { if ( (*pptr)->value > value ) insert_inorder_r( (*pptr)->left, value ); else insert_inorder_r( (*pptr)->right, value ); else { (*pptr)=(struct btree *)malloc(sizeof(struct btree)); (*pptr)->value = value; (*pptr)->left = NULL; (*pptr)->right = NULL;

Cancellazione Dipende dal numero di figli di un nodo: 0 (foglia): si cancella il nodo 1: si cambia il puntatore al nodo cancellato, facendolo puntare al figlio 2: ci si riconduce al caso precedente spostando uno dei sotto-alberi

Cancellazione - 2 - Si deve mantenere l ordine: Se si sposta il sottoalbero di sinistra, la sua radice diventa figlia di sinistra del nodo più a sinistra (che è il minimo) Se si sposta il sottoalbero di destra, la sua radice diventa figlia di destra del nodo più a destra (che è il massimo)

Cancellazione: implementazione void delete(struct btree **pptr) { struct btree *tmp; if ( *pptr!= NULL ) { tmp = *pptr; *pptr = (*pptr)->right; pptr = &((*pptr)->right); while ( *pptr!= NULL ) pptr = & ((*pptr)->left); *pptr = tmp->left; free( tmp ); // cancellazione del nodo

Inserimenti e cancellazioni: esempi