Algoritmi e Strutture Dati. Alberi

Documenti analoghi
Alberto Montresor Università di Trento

Algoritmi e Strutture Dati

Esercitazioni di Algoritmi e Strutture Dati

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

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

Alberi ( GT. 7 ) In informatica, un albero è un modello astratto con cui viene rappresentata una struttura gerarchica

Algoritmi e Strutture Dati

Note per la Lezione 4 Ugo Vaccaro

Esercizi su alberi binari

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Espressioni aritmetiche

Alberi binari e alberi binari di ricerca

Università degli Studi di L Aquila Facoltà di Scienze M.F.N. Corso di Laurea in Informatica. Modulo di Laboratorio di Algoritmi e Strutture Dati

Esercizi Capitolo 6 - Alberi binari di ricerca

alberi tipo astratto, implementazione, algoritmi

Algoritmi e Strutture Dati. HeapSort

Esercizi Capitolo 5 - Alberi

ALGORITMI E STRUTTURE DATI

ALBERI DI RICERCA BINARI (O ALBERI BINARI DI RICERCA)

Lezione 12 Tabelle Hash

Algoritmi e Strutture Dati

Alberi ed Alberi Binari

Implementazione ADT: Alberi

Lezione 9 Alberi binari di ricerca

Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Alberi binari di ricerca

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

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

Alberi Binari di Ricerca

Alberi. Definizioni principali

Esercitazione 6. Alberi binari di ricerca

Alberi. Se x è il genitore di y, allora y è un figlio di x. Un albero binario è un albero in cui ogni nodo ha al massimo due figli.

In questa lezione Alberi binari di ricerca: la cancellazione

Esercizi di Algoritmi e Strutture Dati

Esercizi Capitolo 6 - Alberi binari di ricerca

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

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

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

Lezione 9 Alberi binari di ricerca

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

Per semplicità eliminiamo le ripetizioni nell'albero.

ADT Coda con priorità

Alberi Binari di Ricerca e Alberi Rosso-Neri

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2

Esercizi di Algoritmi e Strutture Dati

dizionari alberi bilanciati

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

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

Introduzione. Heap-binomiali: un heap binomiale è un insieme di alberi binomiali.

Alberi Binari di Ricerca

Tipi di dato e Strutture dati elementari

Dati e Algoritmi 1: A. Pietracaprina. Grafi (II parte)

23/10/2016. gli alberi. alcune definizioni. un esempio. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica.

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D:

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Introduzione agli algoritmi Prova di esame del 30/6/2016 Prof.sse E. Fachini - R. Petreschi

Algoritmi e Strutture Dati

Problema dell albero di cammini minimi (SPT, Shortest Path Tree) o problema dei cammini minimi :

Alberi. In informatica, un albero è un modello astratto di una struttura dati gerarchica

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Algoritmi e Strutture Dati

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Grafi: definizioni e visite

Memorizzazione di una relazione

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Problema del cammino minimo

Alberi Binario in Java

Heap e code di priorità

Algoritmi e Principi dell'informatica Seconda Prova in Itinere - 14 Febbraio 2014

type keytype: integer; Tree: "Node; record Node = key: keytype; parent: "Node ; left: Tree; right: Tree; Figure 1: Tipi di dato per rappresentare albe

Spiegazioni ASD 2012 Luddisti Spaziali

Binary Search Trees (BST) Algoritmi sui BST. Algoritmi - Ricerca. Fondamenti di Informatica T2 Modulo 2. Università di Bologna A.A.

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Backtracking

Algoritmi di Visita di Grafi. Damiano Macedonio

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Verificare se un albero binario è bilanciato

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

TRIE (albero digitale di ricerca)

Alberi binari ( 7.3)

Capitolo 3: Gli alberi. Alberi n-ari

Introduzione alla gestione delle collezioni di oggetti

Algoritmi e Strutture Dati. Introduzione

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Grafi: visita generica

ricerca di un elemento, verifica dell appartenenza di un elemento

Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi

Alberi di ricerca binari

Un albero completamente bilanciato o pieno (full) alberi completamente sbilanciati. Un albero binario completo

Il TDA Tree. Alberi. Esempio. Alberi. Applicazioni. Definizione di albero

Esercizi di Algoritmi e Strutture Dati

Ordinamento. Lorenzo Donatiello,Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna

Strutture dati elementari

Alberi binari. Esercizi su alberi binari

Sommario. Rappresentazione dei grafi. Ordinamento topologico. Visita in ampiezza Visita in profondità

Progettazione di algoritmi

Informatica 3. LEZIONE 12: Liste. Modulo 1: ADT lista e implementazione basata su array Modulo 2: Lista concatenata

Transcript:

Algoritmi e Strutture Dati Alberi Alberto Montresor Università di Trento 2017/10/19 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Sommario 1 Introduzione Esempi Definizioni 2 Alberi binari Introduzione Implementazione Visite 3 Alberi generici Visite Implementazione

Introduzione Esempi Esempio 1 Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 1 / 33

Introduzione Esempi Esempio 2 Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 2 / 33

Introduzione Esempi Esempio 3 <html> <head> <meta http-equiv="content-type" content="text/html"/> <title>simple</title> </head> <body> <h1>a simple web page</h1> <ul> <li>list item one</li> <li>list item two</li> </ul> <h2> <a href="http://www.google.com">google</a> </h2> </body> </html> Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 3 / 33

Introduzione Esempi Esempio 3 html head body meta title h1 ul h2 li li a Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 4 / 33

Introduzione Definizioni Albero radicato Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un insieme di archi orientati che connettono coppie di nodi, con le seguenti proprietà: Un nodo dell albero è designato come nodo radice; Ogni nodo n, a parte la radice, ha esattamente un arco entrante; Esiste un cammino unico dalla radice ad ogni nodo; L albero è connesso. Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 5 / 33

Introduzione Definizioni Albero radicato Definizione 2 (Ricorsiva) Albero radicato (Rooted tree) Un albero è dato da: un insieme vuoto, oppure una radice e zero o più sottoalberi, ognuno dei quali è albero; la radice è connessa alla radice di ogni sottoalbero con un arco orientato. Root T 1 T 2... T k Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 6 / 33

Introduzione Definizioni Terminologia A Sottoalbero B Radice C Sottoalbero D E F G H I J K L M A è la radice B, C sono radici dei sottoalberi D, E sono fratelli D, E sono figli di B B è il padre di D, E I nodi viola sono foglie Gli altri nodi sono nodi interni Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 7 / 33

Introduzione Definizioni Terminology (English) A Subtree B Root C Subtree D E F G H I J K L M A is the tree root B, C are roots of their subtrees D, E are siblings D, E are children of B B is the parent of D, E Purple nodes are leaves The other nodes are internal nodes Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 8 / 33

Introduzione Definizioni Terminologia Profondità (Depth) di un nodo La lunghezza del cammino semplice dalla radice al nodo (misurato in numero di archi) Livello (Level) L insieme di nodi alla stessa profondità Altezza dell albero (Height) La profondità massima della sue foglie Livello 0 1 2 3 Altezza di questo albero = 3 Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 9 / 33

Alberi binari Introduzione Albero binario Albero binario Un albero binario è un albero radicato in cui ogni nodo ha al massimo due figli, che vengono identificati come figlio sinistro e figlio destro. Nota: Due alberi T e U che hanno gli stessi nodi, gli stessi figli per ogni nodo e la stessa radice, sono distinti qualora un nodo u sia designato come figlio sinistro di un nodo v in T e come figlio destro del medesimo nodo in U. T 1 T 2 T 3 Livello 1 1 1 0 2 2 2 1 3 4 3 4 3 4 2 5 5 5 3 Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 10 / 33

Alberi binari Introduzione Specifica (Albero binario) Tree % Costruisce un nuovo nodo, contenente v, senza figli o genitori Tree(Item v) % Legge il valore memorizzato nel nodo Item read() % Modifica il valore memorizzato nel nodo write(item v) % Restituisce il padre, oppure nil se questo nodo è radice Tree parent() Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 11 / 33

Alberi binari Introduzione Specifica (Albero binario) Tree % Restituisce il figlio sinistro (destro) di questo nodo; restituisce nil se assente Tree left() Tree right() % Inserisce il sottoalbero radicato in t come figlio sinistro (destro) di questo nodo insertleft(tree t) insertright(tree t) % Distrugge (ricorsivamente) il figlio sinistro (destro) di questo nodo deleteleft() deleteright() Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 12 / 33

Alberi binari Implementazione Memorizzare un albero binario P R L P R L P R L P R L P R L P R L P R L Vengono memorizzati i seguenti campi parent: reference al nodo padre left: reference al figlio sinistro right: reference al figlio destro Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 13 / 33

Alberi binari Implementazione Implementazione Tree Tree(Item v) Tree t = new Tree t.parent nil t.left t.right nil t.value v return t insertleft(tree T ) if left = nil then T.parent this left T deleteleft() if left nil then left.deleteleft() left.deleteright() left nil deleteright() if right nil then right.deleteleft() right.deleteright() right nil insertright(tree T ) if right = nil then T.parent this right T Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 14 / 33

Alberi binari Visite Visite di alberi Visita di un albero / ricerca Una strategia per passare attraverso (visitare) tutti i nodi di un albero. Visità in profondità Depth-First Search (DFS) Per visitare un albero, si visita ricorsivamente ognuno dei suoi sottoalberi Tre varianti: pre/in/post visita (pre/in/post order ) Visita in ampiezza Breadth First Search (BFS) Ogni livello dell albero viene visitato, uno dopo l altro Si parte dalla radice Richiede una queue Richiede uno stack Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 15 / 33

Alberi binari Visite Depth-First Search dfs(tree t) if t nil then % pre-order visit of t print t B A E dfs(t.left()) % in-order visit of t print t C D F G dfs(t.right()) % post-order visit of t print t Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 16 / 33

Alberi binari Visite Depth-First Search - Pre-Order dfs(tree t) if t nil then % pre-order visit of t print t dfs(t.left()) % in-order visit of t print t dfs(t.right()) % post-order visit of t print t C B D Sequence: A B C D E F G Stack: A F E G Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 17 / 33

Alberi binari Visite Depth-First Search - In-Order dfs(tree t) if t nil then % pre-order visit of t print t dfs(t.left()) % in-order visit of t print t dfs(t.right()) % post-order visit of t print t C B D Sequence: C B D A F E G Stack: A F E G Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 18 / 33

Alberi binari Visite Depth-First Search - Post-Order dfs(tree t) if t nil then % pre-order visit of t print t dfs(t.left()) % in-order visit of t print t dfs(t.right()) % post-order visit of t print t C B D Sequence: C D B F G E A Stack: A F E G Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 19 / 33

Alberi binari Visite Esempi di applicazione Contare nodi Post-visita int count(tree T ) if T == nil then return 0 else C l = count(t.left()) C r = count(t.right()) return C l + C r + 1 C 1 B 1 3 D A 7 3 F 1 E 1 G Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 20 / 33

Alberi binari Visite Esempi di applicazione Stampare espressioni In-visita int printexp(tree T ) if T.left() == nil and T.right == nil then print T.read() else print "(" printexp(tree T.left()) print T.read() printexp(tree T.right()) print ")" * + + 4 9 3 4 ((4+9) * (3+4)) Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 21 / 33

Alberi binari Visite Costo computazionale Il costo di una visita di un albero contenente n nodi è Θ(n), in quanto ogni nodo viene visitato al massimo una volta.. Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 22 / 33

Alberi generici Specifica (Albero generico) Tree % Costruisce un nuovo nodo, contenente v, senza figli o genitori Tree(Item v) % Legge il valore memorizzato nel nodo Item read() % Modifica il valore memorizzato nel nodo write(item v) % Restituisce il padre, oppure nil se questo nodo è radice Tree parent() Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 23 / 33

Alberi generici Specifica (Albero generico) Tree % Restituisce il primo figlio, oppure nil se questo nodo è una foglia Tree leftmostchild() % Restituisce il prossimo fratello, oppure nil se assente Tree rightsibling() % Inserisce il sottoalbero t come primo nodo di questo nodo insertchild(tree t) % Inserisce il sottoalbero t come prossimo fratello di questo nodo insertsibling(tree t) % Distruggi l albero radicato identificato dal primo figlio deletechild() % Distruggi l albero radicato identificato dal prossimo fratello deletesibling() Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 24 / 33

Alberi generici Visite Depth-First Search dfs(tree t) if t nil then A % pre-order visit of node t print t B E Tree u t.leftmostchild() while u nil do dfs(u) u u.rightsibling() C D F G % post-order visit of node t print t Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 25 / 33

Alberi generici Visite Breadth-First Search bfs(tree t) A Queue Q Queue() Q.enqueue(t) while not Q.isEmpty() do Tree u Q.dequeue() % visita per livelli dal nodo u print u u u.leftmostchild() while u nil do Q.enqueue(u) u u.rightsibling() C B D F E G Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 26 / 33

Alberi generici Implementazione Memorizzazione Esistono diversi modi per memorizzare un albero, più o meno indicate a seconda del numero massimo e medio di figli presenti. Realizzazione con vettore dei figli Realizzazione primo figlio, prossimo fratello Realizzazione con vettore dei padri Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 27 / 33

Alberi generici Implementazione Realizzazione con vettore dei figli P... P.. P... P P P P P P Vengono memorizzati i seguenti campi parent: reference al nodo padre vettore dei figli: a seconda del numero di figli, può comportare una discreta quantità di spazio sprecato Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 28 / 33

Alberi generici Implementazione Realizzazione basata su Primo figlio, prossimo fratello Implementato come una lista di fratelli Parent Child Sibling Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 29 / 33

Alberi generici Implementazione Implementazione Tree Tree parent Tree child Tree sibling Item value Tree(Item v) Tree t new Tree t.value v t.parent t.child t.sibling nil return t insertchild(tree t) t.parent self t.sibling child child t insertsibling(tree t) t.parent parent t.sibling sibling sibling t % Reference al padre % Reference al primo figlio % Reference al prossimo fratello % Valore memorizzato nel nodo % Crea un nuovo nodo % Inserisce t prima dell attuale primo figlio % Inserisce t prima dell attuale prossimo fratello Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 30 / 33

Alberi generici Implementazione Implementazione Tree deletechild() Tree newchild child.rightsibling() delete(child) child newchild deletesibling() Tree newbrother sibling.rightsibling() delete(sibling) sibling newbrother delete(tree t) Tree u t.leftmostchild() while u nil do Tree next u.rightsibling() delete(u) u next Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 31 / 33

Alberi generici Implementazione Realizzazione con vettore dei padri L albero è rappresentato da un vettore i cui elementi contengono il valore associato al nodo e l indice della posizione del padre nel vettore. 1 A 0 A 2 B 1 3 E 1 B E 4 C 2 5 D 2 C D F G 6 F 3 7 G 3 Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 32 / 33

Alberi generici Implementazione DFS (https://xkcd.com/) Alberto Montresor (UniTN) ASD - Strutture dati 2017/10/19 33 / 33