ALBERI BINARI DI RICERCA
|
|
- Matteo Santini
- 5 anni fa
- Visualizzazioni
Transcript
1 ALBERI BINARI DI RICERCA
2 ABR Abbiamo visto che la scelta del tipo di dato astratto da utilizzare dipende dal problema. Se la situazione è tale per cui la lista deve essere continuamente modificata in dimensione con frequenti inserimenti o cancellazioni ma percorsa poco spesso, allora la scelta migliore è quella di usare una lista collegata. Invece, se il caso è quello di un insieme stabile di elementi con inserimenti e cancellazioni occasionali ma su cui spesso vanno effettuate ricerche, allora l implementazione tramite liste indicizzate è la migliore scelta. Ma se serve un tipo di dato astratto che supporti frequenti inserimenti e cancellazioni e frequenti ricerche? Ciò che serve è un albero binario di ricerca.
3 ABR ABR: struttura gerarchica collegata in cui ogni nodo contiene il riferimento ai due nodi figli, quello sinistro e quello destro. L ordine deve essere tale per cui l elemento posizionato nel nodo figlio sinistro ha un valore minore di quello del nodo padre, mentre quello del nodo figlio destro ha un valore maggiore di quello del padre, per ogni nodo dell albero.
4 ABR la ricerca Perché un ABR facilita la ricerca di un elemento? Ogni confronto eliminerà metà dell albero da cui parte la ricerca, esattamente come succede nella ricerca binaria. Quindi un ABR combina i vantaggi di una struttura collegata con l efficienza della ricerca binaria, a costo di una programmazione che deve essere più accurata.
5 ADT albero binario di ricerca Molte delle operazioni coinvolte sono quelle delle liste, la differenza sta nell organizzazione gerarchica delle informazioni. In questo albero non sono previsti elementi duplicati
6 ADT albero binario di ricerca Molte delle operazioni coinvolte sono quelle delle liste, la differenza sta nell organizzazione gerarchica delle informazioni.
7 ABR: l interfaccia Esistono differenti modi per implementare un ABR, il più diretto è tramite nodi allocati dinamicamente e collegati tramite puntatori: typedef int TipoElemTree; typedef struct trnode TipoElemTree item; struct trnode * left; struct trnode * right; Trnode; typedef *Trnode PtrTrnode; typedef struct tree PtrTrnode root; int size; Tree; //ridefinisco la struttura della parte informativa //del nodo dell albero come appropriato typedef struct item char nome [20]; char cognome [20]; char matricola [14]; int anno_immatricolazione; int esami [20]; TipoElemTree;
8 ABR: inserire un elemento bool AddItem(const TipoElemTree * pi, Tree * ptree) Trnode * new_node; if (TreeIsFull(ptree)) printf("albero pieno\n"); return false; if (SeekItem(pi, ptree).child!= NULL) printf( Tentativo di inserire elemento duplicato\n"); return false; new_node = MakeNode(pi); if (new_node == NULL) printf("errore creazione nodo\n"); return false; //CONTINUA L aspetto più complicato da gestire è l inserimento del nuovo nodo nella giusta posizione, cioè quella che mantiene l ordinamento degli elementi all interno dell ABR.
9 ABR: inserire un elemento //CONTINUA ptree->size++; if (ptree->root == NULL) ptree->root = new_node; else AddNode(new_node, ptree->root); return true; SeekItem(), MakeNode(), and AddNode() non fanno parte dell interfaccia pubblica del tipo ABR ma sono funzioni statiche nascose nel file tree.c
10 ABR: inserire un elemento static Trnode * MakeNode(const TipoElemTree * pi) Trnode * new_node; new_node = (Trnode *) malloc(sizeof(trnode)); if (new_node!= NULL) new_node->item = *pi; new_node->left = NULL; new_node->right = NULL; return new_node;
11 ABR: inserire un elemento static void AddNode (Trnode * new_node, Trnode * root) if (ToLeft(&new_node->item, &root->item)) if (root->left == NULL) root->left = new_node; else AddNode(new_node, root->left); else if (ToRight(&new_node->item, &root->item)) if (root->right == NULL) root->right = new_node; else AddNode(new_node, root->right); else printf("errore, no duplicati \n"); exit(1); //vado a inserire a sinistra //vado a inserire a destra
12 ABR: inserire un elemento static bool ToLeft(const TipoElemTree * i1, const TipoElemTree * i2) int comp; if ((comp = strcmp(i1->cognome, i2->cognome)) < 0) return true; else if (comp == 0 && strcmp(i1->nome, i2->nome) < 0 ) return true; else return false; Sto usando l appropriata struttura della parte informativa del nodo dell albero
13 ABR: inserire un elemento static bool ToRight(const TipoElemTree * i1, const TipoElemTree * i2) int comp; if ((comp = strcmp(i1->cognome, i2->cognome)) > 0) return true; else if (comp == 0 && strcmp(i1->nome, i2->nome) > 0 ) return true; else return false; Sto usando l appropriata struttura della parte informativa del nodo dell albero
14 ABR: ricercare un elemento E utile implementare una funzione SeekItem() che restituisca una struttura contente due puntatori: il puntatore al nodo padre di quello cercato (NULL se l elemento è quello radice) e il puntatore al nodo contenente l elemento cercato (NULL se l elemento non è presente nell albero). La struttura può quindi essere definita come segue: typedef struct pair PtrTrnode parent; PtrTrnode child; Pair;
15 ABR: ricercare un elemento static Pair SeekItem(const TipoElemTree * pi, const Tree * ptree) Pair look; look.parent = NULL; look.child = ptree->root; if (look.child == NULL) return look; //albero vuoto //CONTINUA
16 ABR: ricercare un elemento //CONTINUA while (look.child!= NULL) if (ToLeft(pi, &(look.child->item))) //devo ricercare a sinistra look.parent = look.child; look.child = look.child->left; else if (ToRight(pi, &(look.child->item))) //devo ricercare a destra look.parent = look.child; look.child = look.child->right; else break; //ho trovato l elemento che cercavo return look;
17 ABR: ricercare un elemento Avendo implementato la funzione SeekItem() è facile scrivere la funzione InTree() che ne fa uso: bool InTree(const TipoElemTree * pi, const Tree * ptree) return (SeekItem(pi, ptree).child == NULL)? false : true;
18 ABR: eliminare un elemento Eliminare un elemento da un ABR è l operazione più complessa perché richiede di riconnettere i rimanenti sottoalberi per costruire un albero valido. Il caso più semplice è quello di cancellare un nodo che non ha figli, come mostrato in figura
19 ABR: eliminare un elemento
20 ABR: eliminare un elemento Bisogna poi gestire il caso della cancellazione di un nodo con un solo figlio: l indirizzo del nodo del sottoalbero figlio che rimarrebbe scollegato dal resto dell albero va memorizzato nel nodo padre nella locazione precedentemente occupata dall indirizzo del nodo da cancellare
21 ABR: eliminare un elemento
22 ABR: eliminare un elemento Il caso più complesso è quello di un nodo da cancellare che ha entrambi i sottoalberi. Teniamo a mente che ogni elemento nel sottoalbero destro del nodo cda cancellare precede il nodo padre del nodo da cancellare (per l ordinamento imposto sull ABR) ma segue ogni nodo del sottoalbero sinistro del nodo da cancellare.
23 ABR: eliminare un elemento Quindi, occorre considerare il ramo destro del sottoalbero sinistro del nodo da cancellare e verificare la possibilità di inserire il nuovo sottoalbero. Se non esiste, occorre scendere lungo il lato destro del sottoalbero sinistro del nodo da cancellare fino a trovare un apertura.
24 ABR: eliminare un elemento static void DeleteNode(PtrTrnode *ptr) Trnode * temp; if ( (*ptr)->left == NULL) temp = *ptr; *ptr = (*ptr)->right; free(temp); else if ( (*ptr)->right == NULL) temp = *ptr; *ptr = (*ptr)->left; free(temp); //CONTINUA //caso semplice: nodo con un solo figlio //caso semplice: nodo con un solo figlio
25 ABR: eliminare un elemento //CONTINUA else //nodo con entrambi i figli // dove attaccare sottoalbero destro? for (temp = (*ptr)->left; temp->right!= NULL; temp = temp->right) continue; //scendo lungo il lato destro del sottoalbero sinistro del nodo da cancellare temp->right = (*ptr)->right; //attacco il sottoalbero destro temp = *ptr; *ptr =(*ptr)->left; //attacco il sottoalbero sinistro free(temp);
26 ABR: eliminare un elemento Possiamo ora usare la funzione SeekItem() per recuperare il puntatore al nodo padre da passare alla funzione DeleteNode(): bool DeleteItem(const TipoElemTree * pi, Tree * ptree) Pair look; look = SeekItem(pi, ptree); if (look.child == NULL) return false; if (look.parent == NULL) //cancello elemento root DeleteNode(&ptree->root); else if (look.parent->left == look.child) DeleteNode(&look.parent->left); else DeleteNode(&look.parent->right); ptree->size--; return true;
27 ABR: attraversare l albero Ad ogni nodo la funzione deve: elaborare l elemento nel nodo elaborare il sottoalbero destro (chiamata ricorsiva) elaborare il sottoalbero sinistro (chiamata ricorsiva) L attraversamento può essere effettuato in modo simmetrico o inordine (sx, nodo, dx), anticipato o preordine (nodo, sx, dx) oppure differito o postordine (sx, dx, nodo)
28 ABR: attraversare l albero void Traverse (const Tree * ptree) if (ptree!= NULL) InOrder(ptree->root); static void InOrder(const Trnode * root) if (root!= NULL) InOrder(root->left); printf( %d, root->item); InOrder(root->right);
29 ABR: attraversare l albero static void PreOrder(const Trnode * root) if (root!= NULL) printf( %d, root->item); PreOrder(root->left); PreOrder(root->right); static void PostOrder(const Trnode * root) if (root!= NULL) PostOrder(root->left); PostOrder(root->right); printf( %d, root->item);
30 ABR: eliminare l albero void DeleteAll(Tree * ptree) if (ptree!= NULL) DeleteAllNodes(ptree->root); ptree->root = NULL; ptree->size = 0; static void DeleteAllNodes(Trnode * root) Trnode * pright; if (root!= NULL) pright = root->right; DeleteAllNodes(root->left); free(root); DeleteAllNodes(pright); Ha la stessa struttura della funzione InOrder()
31 ABR: tree.c #include <string.h> #include <stdio.h> #include <stdlib.h> #include "tree.h" /* tipo di dati locali */ typedef struct pair Trnode * parent; Trnode * child; Pair;
32 ABR: tree.c /* prototipi delle funzioni locali */ static Trnode * MakeNode(const TipoElemTree * pi); static bool ToLeft(const TipoElemTree * i1, const TipoElemTree * i2); static bool ToRight(const TipoElemTree * i1, const TipoElemTree * i2); static void AddNode (Trnode * new_node, Trnode * root); static void InOrder(const Trnode * root); static Pair SeekItem(const TipoElemTree * pi, const Tree * ptree); static void DeleteNode(Trnode **ptr); static void DeleteAllNodes(Trnode * ptr); /* definizione delle funzioni */ void InitializeTree(Tree * ptree) ptree->root = NULL; ptree->size = 0;
33 ABR: tree.c bool TreeIsEmpty(const Tree * ptree) if (ptree->root == NULL) return true; else return false; Oltre alle funzioni già definite nei lucidi precedenti bool TreeIsFull(const Tree * ptree) if (ptree->size == MAXITEMS) return true; else return false; int TreeItemCount(const Tree * ptree) return ptree->size;
34 ABR: considerazioni In generale: Le operazioni di ricerca sono confinate ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia Tempo di ricerca: O(h) Qual è il caso pessimo? Qual è il caso ottimo?
35 ABR: considerazioni Qual è l'altezza media di un albero di ricerca? Caso semplice : inserimenti in ordine casuale È possibile dimostrare che l'altezza media è O(log n) In generale: Sono necessarie tecniche per mantenere bilanciato l'albero Esempi Alberi AVL (Adelson-Velsky, Landis) Red-Black Tree Splay Tree
36 ABR: considerazioni Lavorare su un ABR è un operazione molto efficiente quando l albero è bilanciato. Se, ad esempio, supponiamo di inserire dati in un ABR in ordine alfabetico, allora costruiremo un ABR completamente degenere in cui ogni nuovo nodo dovrà essere inserito nel sottoalbero destro.
37 Alberi AVL Fare una ricerca su questo albero non è più efficiente che fare una ricerca su una lista collegata (costo computazione proporzionale a n). Una maniera per evitare situazioni simili è quella di ribilanciare l albero in fase di inserimento o in fase di cancellazione di un nodo quando diventa troppo sbilanciato da una parte. I matematici russi Adel son-vel skii (Адельсон-Вельский) e Landis (Ландис) hanno progettato un algoritmo per far ciò. Gli alberi costruiti con questo metodo vengono perciò chiamati alberi AVL. Gli alberi AVL impiegano più tempo computazionale per essere costruiti (perché devono essere bilanciati) ma assicurano un efficienza massima in fase di ricerca. Alberi AVL ABR mantenuti 1-bilanciati in altezza
Alberi. Alberi: Esempio di utilizzo
Sono strutture dati del tipo: Alberi SOTTOALBERO n1 RADICE DELL ALBERO () n2 n n4 Profondità o Livello 0 1 n n n n n n 2 NODI FOGLIA (LEAF NODES) 1 Alberi: Esempio di utilizzo Rappresentazione di un file
DettagliStrutture dati Alberi binari
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
DettagliADT ALBERO BINARIO (tree)) ADT ALBERO BINARIO
ADT ALBERO BINARIO (tree)) Rappresentazione collegata (puntatori a strutture) 1 ADT ALBERO BINARIO OPERAZIONI O PRIMITIVE DA REALIZZARE Operazione cons_tree: D x tree -> tree root: tree -> D left: tree
DettagliIndice come albero binario di ricerca!
Indice come albero binario di ricerca! n Obiettivo: Utilizzare una struttura dati del tipo albero binario di ricerca per realizzare un indice su file Ricerca sull indice in memoria centrale, poi accesso
DettagliAlberi binari di ricerca
Alberi binari di ricerca 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
DettagliLE 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
DettagliEsercitazione 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)
DettagliADT ALBERO BINARIO (tree)! n Rappresentazione collegata (puntatori a strutture)
ADT ALBERO BINARIO (tree)! n Rappresentazione collegata (puntatori a strutture) 1 ADT ALBERO BINARIO OPERAZIONI PRIMITIVE DA REALIZZARE Operazione! cons_tree: D x tree x tree -> tree! root: tree -> D!
DettagliPROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE
PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta
DettagliAlberi binari di ricerca
Alberi binari di ricerca 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
DettagliOrganigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre
Alberi Struttura dati Albero Organigramma Gerarchia (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre Esempio di un organigramma di un azienda Tree terminology
DettagliAlberi 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
DettagliAlberi binari e alberi binari di ricerca
Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Alberi Un albero è una collezione non vuota di: nodi con nome e informazioni
DettagliAlberi binari e alberi binari di ricerca
Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica giovedì 9
DettagliLaboratorio di Informatica. Lezione 8: Liste e alberi
Laboratorio di rmatica Lezione 8: Liste e alberi Il programma della lezione 7 (parte 1) #include #include typedef struct node char key[20]; int volte; struct node *psnnext; NODE, *PNODE;
DettagliProssime lezioni e tutorato!
Prossime lezioni e tutorato! n 15 Aprile h. 11 Lezione in laboratorio n 20 Aprile (lunedi ) h. 8.45 lezione in Aula 1 (Java) n 22 Aprile h. 11 Lezione in laboratorio Tutorato: n 13 Aprile h. 8.45 n 16
DettagliALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI
SOMMARIO ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI Dimensione e Altezza ALBERI BINARI DI RICERCA (BST) Introduzione Ricerca, inserimento e cancellazione Implementazione
DettagliALBERI. Un Albero. Un grafo aciclico che non è un albero: due archi entranti in uno stesso nodo
ALBERI Un Albero è un grafo orientato connesso e aciclico, in cui inoltre esattamente un nodo (detto radice) non ha nessun arco entrante, e ogni altro nodo ha esattamente un arco entrante. Ogni nodo viene
DettagliAlberi e alberi binari I Un albero è un caso particolare di grafo
Alberi e alberi binari I Un albero è un caso particolare di grafo I I I I È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine
DettagliAlberi 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,
DettagliL albero e un tipo astratto di dati usato per rappresentare relazioni gerarchiche.
Lezioni di C L albero e un tipo astratto di dati usato per rappresentare relazioni gerarchiche. qstruttura del file system qalbero genealogico qorganigramma qalbero di decisione q... s=6*8+((2+42)*(5+12)+987*7*123+15*54)
DettagliAlberi di ricerca. Alberi binari di ricerca. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Alberi di ricerca Alberi binari di ricerca Un esempio: l ADT Dizionario (mutabile) Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato astratto dizionario Alberi binari di
DettagliAlberi. 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
DettagliAlgoritmi e Strutture Dati
Algoritmi e Strutture Dati Alberi di ricerca Domenico Fabio Savo 1 Dizionari Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato Dizionario 2 Alberi binari di ricerca (BST
DettagliLaboratorio di algoritmi e strutture dati
Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati mercoledì 25 novemb009 L esercitazione di oggi prevede di utilizzare gli alberi binari e in particolare gli alberi binari di ricerca.
DettagliLaboratorio di algoritmi e strutture dati
Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati mercoledì 15 novemb017 L esercitazione di oggi prevede di utilizzare gli alberi binari e in particolare gli alberi binari di ricerca.
DettagliEsercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre.
Esercizi parte 3 RAPPRESENTAZIONE DI ALBERI BINARI 1. Definire una classe LinkedBinTree che implementa alberi binari in modo collegato, con nodi implementati come oggetti di classe BinNode. La classe dovra
DettagliAlberi 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
DettagliAlberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati
Alberi CORDA Informatica A. Ferrari Testi da Marco Bernardo Edoardo Bontà Dispense del Corso di Algoritmi e Strutture Dati Albero - definizione Albero Figli, fratelli, nodi, foglie Grado, livello, altezza,
Dettaglinow is the for men all good come aid
Alberi binari Supponiamo di volere gestire il problema di contare le occorrenze di tutte le parole presenti in un particolare input. Poichè la lista delle parole non è nota a priori, non siamo in grado
Dettaglid. Cancellazione del valore 5 e. Inserimento del valore 1
Esercizio1 Si consideri un albero binario non vuoto in cui a ciascun nodo v è associato un numero reale v.val. Scrivere un algoritmo che, dato in input l'albero T e un numero reale x, restituisce true
DettagliImplementazione 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
DettagliAlberi di ricerca. Dizionari. Definizione. Alberi binari di ricerca (BST = binary search tree) Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Dizionari Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato dizionario Alberi di ricerca Basato su materiale di C. Demetrescu, I. Finocchi, G.F.
Dettagliricerca di un elemento, verifica dell appartenenza di un elemento
Alberi Binari di Ricerca Gli alberi binari di ricerca (o, alberi di ricerca binaria) sono strutture dati che consentono, su un insieme di elementi con un ordine totale le operazioni di: ricerca di un elemento,
DettagliAlgoritmi e strutture dati
Algoritmi e Strutture Dati Alberi di ricerca Dizionari Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato dizionario 2 Alberi binari di ricerca (BST = binary search tree)
DettagliAlberi. 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
DettagliAlberi. 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 Dudo Frodo Daisy Alberi Gli alberi sono una generalizzazione
Dettaglidizionari alberi bilanciati
dizionari alberi bilanciati dizionari ADT che supportano le seguenti operazioni membership anche detta search insert delete o remove le liste e i BST sono dizionari maggio 2002 ASD2002 - Alberi bilanciati
DettagliStruttura dati Dizionario
Struttura dati Dizionario Un dizionario è : un insieme di coppie (elemento, chiave) Sul campo chiave è definita una relazione d'ordine totale Su cui definiamo le seguenti operazioni: insert(elem e, chiave
DettagliInformatica 3. LEZIONE 17: Alberi generici. Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza
Informatica 3 LEZIONE 17: Alberi generici Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza Informatica 3 Lezione 17 - Modulo 1 Definizione e ADT Introduzione
DettagliBinari di Ricerca Binary. Alberi. Trees. Search. Damiano Macedonio Università Ca' Foscari di Venezia.
Alberi Binari di Ricerca Binary Search Trees Damiano Macedonio Università Ca' Foscari di Venezia mace@unive.it Original work Copyright Alberto Montresor, University of Trento (http://www.dit.unitn.it/~montreso/asd/index.shtml)
DettagliAlberi Binari di Ricerca
Alberi Binari di Ricerca Damiano Macedonio Università Ca' Foscari di Venezia mace@unive.it Original work Copyright Alberto Montresor, University of Trento (http://www.dit.unitn.it/~montreso/asd/index.shtml)
DettagliAlberi 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
DettagliProva di Algoritmi e s.d. (1o anno) 7 Febbraio TESTO e RISPOSTE
Prova di Algoritmi e s.d. (1o anno) 7 Febbraio 2003 TESTO e RISPOSTE Esercizio 1 (punti 5 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali). Riportiamo
DettagliAlbero 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
DettagliEsercizio 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
DettagliListe concatenate. Violetta Lonati
Liste concatenate Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 2 novembre 2017 Violetta Lonati Liste
DettagliUn esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem
Un esempio: l ADT Dizionario (mutabile) Algoritmi e Laboratorio a.a. 2006-07 Lezioni Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato astratto dizionario Parte 19-D Alberi
DettagliGLI 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
DettagliStrutture dati dinamiche in C (II)
Strutture dati dinamiche in C (II) Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Le liste concatenate (ancora ma in modo più formale) L
DettagliEsercizi di Algoritmi e Strutture Dati
Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 29 novembre 2010 1 Rotazioni semplici in ABR Si consideri l operazione di rotazione semplice applicata
Dettagliargomenti alberi terminologia tipo di dato astratto albero tipo astratto, implementazione, algoritmi es.: radice R con n sottoalberi radice
argomenti alberi tipo astratto, implementazione, algoritmi! tipo astratto albero! definizione! implementazione in Java! algoritmi di visita! alberi binari! implementazione di alberi binari in Java ASD
DettagliRICERCA BINARIA...1 ALBERO BINARIO DI RICERCA (ABR)...3 RICORSIONE...4 ESEMPI DI RICORSIONE IN VISUAL BASIC...5 ESEMPI DI RICORSIONE IN C / C++...
Tre piccioni con una fava: Ricerca Binaria, Albero Binario di Ricerca e Ricorsione prof. Claudio Maccherani - 2006 / 2007 foto Claudio Maccherani RICERCA BINARIA...1 ALBERO BINARIO DI RICERCA (ABR)...3
DettagliAlberi binari di ricerca
Alberi binari di ricerca Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010
DettagliAlberi binari. Un albero binario è un albero con radice in cui ogni nodo ha al massimo due figli, chiamati figlio sinistro e figlio destro.
Alberi binari Un albero binario è un albero con radice in cui ogni nodo ha al massimo due figli, chiamati figlio sinistro e figlio destro. r Un albero binario T i cui nodi appartengono a un insieme V può
DettagliInformatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico.
Informatica 3 Informatica 3 LEZIONE 17: lberi generici Lezione 17 - Modulo 1 Modulo 1: Definizione e DT Modulo 2: Implementazione Modulo 3: lberi e classi di equivalenza Definizione e DT Politecnico di
DettagliLezione 12 Tabelle Hash
Lezione 12 Tabelle Hash Rossano Venturini rossano@di.unipi.it 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
DettagliProva di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE
Prova di Algoritmi e s.d. (1o anno) 17 Settembre 2002 TESTO e RISPOSTE Esercizio 1 (punti 7 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali).
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Alberi binari di ricerca 2 1 Alberi L albero è un tipo astratto di dato utilizzato per rappresentare
Dettaglialberi tipo astratto, implementazione, algoritmi
alberi tipo astratto, implementazione, algoritmi argomenti tipo astratto albero definizione implementazione in Java algoritmi di visita alberi binari implementazione di alberi binari in Java ASD - Alberi
DettagliAlberi 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
DettagliEsercizi BST - AVL. E. Fachini
Esercizi BST - AVL. Verifica che un ABR è un AVL 2. verifica bilanciamento in altezza di un ABR 3. Costruzione alberi di Fibonacci 4. Calcolo altezza albero AVL in O(lg n) 5. split di una ABR intorno a
DettagliInformatica 3. Informatica 3. LEZIONE 14: Alberi binari: introduzione. Lezione 14 - Modulo 1. Definizioni. Introduzione. Definizioni e proprietà
Informatica 3 Informatica 3 LEZIONE 14: Alberi binari: introduzione Lezione 14 - Modulo 1 Modulo 1: Definizioni e proprietà Modulo 2: Attraversamento degli alberi binari Definizioni e proprietà Politecnico
DettagliEspressioni aritmetiche
Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:
DettagliLaboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona
Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario Implementazione con Vettori Implementazione con Strutture Collegate Concetti
DettagliPer 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
DettagliALGORITMI E STRUTTURE DATI
ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Puntatori e Alberi, ABR StudentiDIA
DettagliAlgoritmi 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
DettagliEsempi. Albero di interi. Struttura che non è un albero!
albero si dice "grafo diretto" un insieme di nodi legati "a due a due" da archi direzionati (puntatori) un albero è un grafo diretto in cui ogni nodo può avere un solo arco entrante ed un qualunque numero
DettagliUn esempio di mutua ricorsione
Inserimento in un ABR n-bilanciato Un esempio di mutua ricorsione con gli alberi bilanciati in altezza, proprietà più debole, si ottiene maggiore semplicità delle operazioni di ribilanciamento (niente
DettagliInformatica 3. LEZIONE 15: Implementazione di alberi binari - BST. Modulo 1: Implementazione degli alberi binari Modulo 2: BST
Informatica 3 LEZIONE 15: Implementazione di alberi binari - BST Modulo 1: Implementazione degli alberi binari Modulo 2: BST Informatica 3 Lezione 15 - Modulo 1 Implementazione degli alberi binari Introduzione
DettagliIn 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
DettagliAppunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato
Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato Alessandro Panconesi DSI, La Sapienza via Salaria 113, 00198, Roma Consideriamo un problema che ci consentirá di vedere un
DettagliVerificare se un albero binario è bilanciato
Verificare se un albero binario è bilanciato Definizione: Un albero è bilanciato nel Numero dei Nodi, brevemente n- bilanciato, quando, per ogni sottoalbero t radicato in un suo nodo, il numero dei nodi
DettagliLaboratorio di Algoritmi e Strutture Dati. Alberi Binari
Laboratorio di Algoritmi e Strutture Dati Alberi Binari Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso
Dettagli7. Settima esercitazione autoguidata: alberi binari
7. Settima esercitazione autoguidata: alberi binari 31 7.1. Costruzione di un albero (ALBERI1.C) Scrivere un programma che - riceve il nome di un file contenente la rappresentazione parentetica di un albero
DettagliDipartimento di Elettronica, Informazione e Bioingegneria API 2013/4
Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 Bilanciamento negli alberi di ricerca @ G. Gini 2013 Dizionari Dizionario Insieme dinamico che implementa le seguenti funzionalità Cerca
DettagliIntroduzione Implementazione (1)
Informatica 3 Informatica 3 LEZIONE 15: Implementazione di alberi binari - BST Modulo 1: Implementazione degli alberi binari Modulo 2: BST Lezione 15 - Modulo 1 Implementazione degli alberi binari Politecnico
DettagliAlgoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario
Algoritmi e Strutture Dati Capitolo 6 Il problema del dizionario Il tipo dato Dizionario Suppongo sempre che mi venga dato un riferimento diretto all elemento da cancellare Applicazioni: gestione archivi
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 21 Strutture dinamiche Gli array ci permettono di memorizzare un insieme di dati dello stesso tipo Deve essere noto staticamente il
DettagliLaboratorio di Algoritmi
Laboratorio di Algoritmi Corso di Laurea in Matematica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Martedì 8.30-10.30 in aula 3 Mercoledì 10.30-13.30 in aula 2 Giovedì 15.30-18.30 in
DettagliRipasso di programmazione ricorsiva
Ripasso di programmazione ricorsiva Ripasso di programmazione ricorsiva Algoritmo ricorsivo: algoritmo espresso in termini di se stesso. Programmazione iterativa e programmazione ricorsiva sono equivalenti.
DettagliAlgoritmi e Strutture Dati. Alberi di Ricerca Alberi Bilanciati I (Alberi AVL)
Algoritmi e Strutture Dati Alberi di Ricerca Alberi Bilanciati I (Alberi AVL) Alberi bilanciati di ricerca Gli alberi binari di ricerca sono semplici da gestire (inserimenti e cancellazioni facili da implementare)
DettagliEsercizi su programmazione ricorsiva 3
su programmazione ricorsiva 3 Pericle Perazzo pericle.perazzo@iet.unipi.it http://www.iet.unipi.it/p.perazzo/teaching/ http://lettieri.iet.unipi.it/mailman/listinfo/algoritmi_e_basi 10 maggio 2013 Alberi
DettagliAlgoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola
Algoritmi e strutture dati 16 Dicembre 04 Canali A L e M Z Cognome Nome Matricola Problema 1 (6 punti) Determinare la funzione calcolata dal metodo mistero e la sua complessità computazionale in funzione
DettagliAlberi binari di ricerca
Alberi binari di ricerca Gli alberi binari di ricerca sono ottime strutture dati per memorizzare coppie di elementi (k, e) chiave elemento di un dizionario. Un albero binario di ricerca T è un albero binario
DettagliInformatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann
Informatica 3 LEZIONE 16: Heap - Codifica di Huffmann Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann Informatica 3 Lezione 16 - Modulo 1 Heap e code di priorità Introduzione
DettagliStruttura di dati che può essere usata sia come dizionario, sia come coda con priorità
Albero binario di ricerca Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità Proprietà: sia x un nodo di un (sotto)albero binario di ricerca Se y è un nodo del sottoalbero
DettagliMulti-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(
DettagliIMPLEMENTAZIONE CONCATENATE DELLE LISTE
IMPLEMENTAZIONE CONCATENATE DELLE LISTE Liste collegate Come già visto, la realizzazione sequenziale prevede che la sequenzialità degli elementi della lista venga rappresentata dalla adiacenza delle locazioni
DettagliAlberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3
Alberi binari (radicati e ordinati) Il figlio sinistro della radice Il padre del nodo 5 e del nodo 3 4 3 Il figlio sinistro del nodo 2 2 5 1 6 7 8 9 La radice Il figlio destro della radice una foglia Figlio
DettagliHeap 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
Dettagli