alberi binari e ricorsione
|
|
|
- Livia Grandi
- 9 anni fa
- Visualizzazioni
Transcript
1 alberi binari e ricorsione
2 un albero binario: ogni nodo ha al più 2 figli ogni figlio è destro o sinistro figlio sinistro nodo interno radice figlio destro foglia
3 cammini = sequenze di nodi = sequenze di 0 e 1 X 0 X 1 00 X 2 01 profondità di un nodo altezza dell albero=prof. max delle foglie
4 albero binario completo ogni livello è completo, se h= altezza l albero contiene 2 h+1-1 nodi
5 definizione ricorsiva degli alberi: albero binario è: un albero vuoto nodo(albero sinistro, albero destro) nodo sinistro destro
6 attraversamenti degli alberi = modi di visitare tutti i loro nodi in profondità = depth-first ma anche in larghezza = breath-first
7 percorso infisso: 1. a sinistra s 2. nodo 3. a destra i f s o n i in profondità da sinistra a destra
8 percorso prefisso: 1. nodo p 2. a sinistra 3. a destra r e o s s f i
9 percorso postfisso: 1. a sinistra o 2. a destra t s 3. nodo p s o i f s
10 in larghezza l a r z g z h a e
11 come realizzare un nodo di un albero binario in Python: class Albero: def init (self,val=none,sx=none,dx=none): self.val = val self.sx = sx self.dx = dx
12 t costruiamo questo albero: P = Albero('p') s O = Albero('o') S = Albero('s',P,O) p o T = Albero('t',None,S) t(_,s(p(_,_),o(_,_))) rappresentazione lineare
13 t costruiamo questo albero: P = Albero('p') s O = Albero('o') S = Albero('s',P,O) p o T = Albero('t',None,S) t(_,s(p(_,_),o(_,_))) rappresentazione lineare
14 Operazioni su alberi binari 1) Stampa lineare di un albero 2) Trova un elemento nell'albero Vediamone altre...
15 f a w g k q z i o x e cerchiamo w f -> fa -> fag -> fagi -> fag -> fa ->fak -> fa -> f -> fw
16 altezza di un albero = profondità massima dei suoi nodi = distanza massima tra nodi e antenati nell albero altezza 0 altezza 1 albero vuoto? per convenzione -1
17 calcolo ricorsivo dell altezza: def altezza(albero): if not albero: return -1 return max(altezza(albero.sx),altezza(albero.dx))+1; Procedura corretta perché: 1) albero vuoto ok! L R x 2) se non vuoto, assumiamo ok per alberi L e R e lo dimostriamo induttivamente
18 un cammino di un albero = sequenza di 0 e 1 0=sinistra 1= destra r cammino per x: C=[0,1,0] lung=3 x cammino di r C=[] rlung =0
19 Operazioni su alberi binari 1) Stampa lineare di un albero 2) Trova un elemento nell'albero 3) Dato un cammino C, restituire l'albero radicato nel nodo corrispondente
20 Data una lista C che contiene un cammino, restituire il nodo corrispondente def trova_cammino(albero, C): if not C: return albero if not albero: return None if C[0]==0: return trova_cammino(albero.sx, C[1:]) else: return trova_cammino(albero.dx, C[1:])
21 binary search trees (BST): Detti anche alberi ordinati f i r a g t ogni nodo è maggiore dei nodi nel suo sottoalbero sinistro e minore di quelli del suo sottoalbero destro h s
22 in un BST è facile (efficiente) trovare un nodo con un certo campo valore y e restituire quel nodo se lo troviamo e None altrimenti in generale: L r R controllo r, cerco in L e se no in R o viceversa insomma se non c è devo visitare tutti i nodi!!
23 in un BST la cosa è + semplice: r L R 1. r.val == y restituisco r, altrimenti: 2. se r.val > y cerco solo in L altrimenti cerco solo in R
24 cerchiamo h: h<i andiamo a sinistra i h>f destra f r h>g destra a g h s t trovato!!!
25 ricerca in un BST: def bst_search(albero, v): if not albero: return None if albero.val==v: return albero if albero.val<v: return bst_search(albero.sx,v) return bst_search(albero.dx,v) quante chiamate ricorsive si fanno al massimo?
26 seguo un solo cammino : al massimo farò tante invocazioni quant è l altezza dell albero r L R se l albero è equilibrato, altezza = log n dove n è il numero dei nodi dell albero una bella differenza tra n e log n!!!
27 se h non ci fosse dove andrebbe inserito? m f r a g t h i s
28 inserimento in un BST: def bst_ins(albero,v): if not albero: return Albero(v) if albero.val>v: albero.sx = bst_ins(albero.sx,v) if albero.val<=v: albero.dx = bst_ins(albero.dx,v) return albero
29 percorso infisso n f r a g t h i z a f g h i n r t z sono in ordine!!
30 inseriamo partendo dall albero vuoto:
31 Verifica di un BST: def is_bst(albero): def lista_ordinata(lista): if len(lista)<=1: return True for i in range(len(lista)-1): if lista[i]>lista[i+1]: return False return True v = visita_in(albero) return lista_ordinata(v)
32 esercizi sugli alberi binari 1. calcolare num occorrenze di y 2. contare i nodi con esattamente 1 figlio 2. restituire una foglia 3. restituire un nodo di profondità k 4. stampare in ordine infisso i primi k nodi 5. restituire foglia a prof. minima
33 contare i nodi con esattamente un figlio def cn_un_figlio(albero): def unf(albero): return albero.sx and not albero.dx or \ albero.dx and not albero.sx if not albero: return 0 cn = cn_un_figlio(albero.sx)+cn_un_figlio(albero.dx) return 1+cn if unf(albero) else cn
34 1. come riconoscere un nodo di profondità k? parto dalla radice con k e lo diminuisco ad ogni livello finchè non diventa 0 quale cammino seguo? è arbitario purchè si sia in grado di percorrerli tutti non appena troviamo un nodo a profondità k, interrompiamo la ricorsione e ritorniamo
35 def at_prof(albero, k): if not albero: return None if k==0: return albero p = at_prof(albero.sx, k-1): return p if p else at_prof(albero.dx, k-1)
Laboratorio 8. Programmazione - CdS Matematica. Mirko Polato 15 Dicembre 2015
Laboratorio 8 Programmazione - CdS Matematica Mirko Polato 15 Dicembre 2015 Operare su File Per operare su un file occorre eseguire le seguenti operazioni: aprire il file in scrittura o lettura; scrivere
Lezione 9 Alberi binari: visite ed esercizi
Lezione 9 Alberi binari: visite ed esercizi Informatica 4 Maggio 2016 Operazioni sugli alberi: visita La visita di un albero esplora tutti i nodi ed esegue una qualche operazione su di essi. Per esempio,
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
Lezione 7 Alberi binari: visite e alberi di ricerca
Lezione 7 Alberi binari: visite e alberi di ricerca Informatica 6 Maggio 2015 Operazioni sugli alberi: visita La visita di un albero esplora tutti i nodi ed esegue una qualche operazione su di essi. Per
Laboratorio di Python
, Esercizi su alberi Università di Bologna 16 maggio 2013 Sommario 1 2 Consegna non avvenuta Meno di 10 studenti hanno inviato l esercizio svolto. Definizione ricorsiva alberi binari Un albero binario
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(
Laboratorio 07. Programmazione - CdS Matematica. Michele Donini 10 dicembre 2015
Laboratorio 07 Programmazione - CdS Matematica Michele Donini 10 dicembre 2015 Esercizio Lista I Costruire la classe lista concatenata: class Lista(): def init (self, val=none, succ=none): Denire le principali
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 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
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 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,
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
Espressioni 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:
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,
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
Esercizi su alberi binari
Esercizi su alberi binari Esercizi svolti: Determinazione nodi contenti verifica completezza verifica quasi completezza lunghezza del cammino interno determinazione ultima foglia in un quasi completo verifica
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
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
Note per la Lezione 4 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che
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
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
Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi
Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1 Dimostrare che un albero non vuoto con n nodi interni, dove ogni nodo interno ha almeno
Esercizi su BST. IASD a.a A. De Bonis
Esercizi su BST Esercizio 1 Scrivere un algoritmo che prendein input un albero binarioe restituisce true se e solo se l alberoe` un albero binariodi ricerca. L algoritmo deve utilizzaresolo una quantita`
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
Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc
Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Grafo Un grafo G è una coppia (V, E) ove V è un
Algoritmi e Strutture Dati. HeapSort
Algoritmi e Strutture Dati HeapSort Selection Sort: intuizioni L algoritmo Selection-Sort scandisce tutti gli elementi dell array a partire dall ultimo elemento fino all inizio e ad ogni iterazione: Viene
Laboratorio di Python
Laboratorio di Python Alberi binari Lab15 12 Maggio 2017 Outline Correzione esercizi per oggi Alberi binari Teoria Esercizi Esercizi per casa Saluti Esercizio 1 per casa Scrivere una funzione palindroma(s)
Alberi 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
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
Algoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
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
Un albero completamente bilanciato o pieno (full) alberi completamente sbilanciati. Un albero binario completo
alberi completamente sbilanciati Un albero completamente bilanciato o pieno (full) Definizione: Un albero è pieno se tutte le foglie sono sullo stesso livello e ogni nodo non foglia ha due figli. Il numero
Problemi di ordinamento
Problemi di ordinamento Input: una sequenza di n numeri a 1, a 2,..., a n ; Output: una permutazione a 1, a 2,..., a n di a 1, a 2,..., a n tale che a 1 a 2... a n. Generalmente, la sequenza è rappresentata
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
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)
ADT Coda con priorità
Code con priorità ADT Coda con priorità Una coda con priorità è una struttura dati dinamica che permette di gestire una collezione di dati con chiave numerica. Una coda con priorità offre le operazioni
Esercizi Capitolo 6 - Alberi binari di ricerca
Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 9 Agosto, 204 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile
