Algoritmi e strutture dati
|
|
|
- Flaviano Danieli
- 9 anni fa
- Просмотров:
Транскрипт
1 Algoritmi e strutture dati Roberto Cordone A. A
2 Capitolo 4 Implementazioni delle partizioni Nota: queste dispense sono un rapido riassunto delle lezioni svolte nel dicembre 2015 e gennaio In buona parte ripetono gli argomenti delle dispense del prof. Goldwurm, con alcune aggiunte, qualche piccola modifica nella presentazione, qualche esempio. Chi notasse errori, incoerenze, oscurità o avesse dubbi è invitato a contattarmi per segnalarli. Si tratta di rappresentare una partizione di un insieme A dato in una collezione di sottoinsiemi disgiunti fra loro, ognuno dei quali ha un elemento rappresentativo. Per esempio, se A = a 1, a 2, a 3, a 4, una possibile partizione è P = a 1, ā 4, a 2, ā 3, dove gli elementi rappresentativi sono evidenziati barrandoli. In termini di algebra eterogenea: dove ([A, PART (A)], [UNION, FIND, ID, a 1,..., a m ]) la funzione FIND riceve una partizione e un elemento e restituisce l elemento rappresentante del sottoinsieme di cui l elemento dato fa parte nella partizione data; la funzione UNION riceve una partizione e due elementi e restituisce una partizione nella quale i due sottoinsiemi di cui fanno parte gli elementi dati sono fusi in uno solo. Un implementazione banale consiste nel descrivere ogni sottoinsieme della partizione con una lista di elementi, magari tenendo in cima il rappresentante: la funzione UNION consiste nel fondere due liste: questo richiede tempo O (n), perché si tratta di spostare tutti gli elementi di una lista nell altra. Si può fare meglio se si usa una lista circolare con un puntatore all ultimo elemento, che permette di appendere una lista all altra in tempo costante O (1); la funzione FIND, però, richiede di scorrere tutte le liste per trovare l elemento, in modo da sapere quale lista lo contiene, e quindi determinarne il rappresentante: tempo O (n). Un altra implementazione banale consiste nel tenere in un vettore l indicazione del rappresentante per ciascun elemento: 1
3 la funzione FIND richiede tempo costante, perché basta consultare il vettore per avere la risposta cercata; la funzione UNION consiste nello scorrere il vettore e cambiare il rappresentante di uno dei due sottoinsiemi, sostituendolo con il rappresentante dell altro, in modo da fondere i due sottoinsiemi: questo richiede tempo O (n). 4.4 I Merge-Find set (MF-set) Una rappresentazione sofisticata cerca un compromesso fra l efficienza delle due funzioni. Si tratta di vedere la partizione come una foresta, in cui gli elementi sono nodi e in particolare i rappresentanti sono le radici degli alberi. Ogni nodo punta un altro nodo, tranne i rappresentanti che puntano a NULL. Si veda la Figura 4.1. Figura 4.1: Una partizione vista come foresta radicata L implementazione pratica può sfruttare i puntatori, ma in questo caso conviene usare la rappresentazione a vettore, perché la dimensione complessiva della struttura non cambia mai durante l uso (contrariamente ai dizionari che subiscono inserimenti e cancellazioni, per cui una struttura a vettore può essere troppo rigida). Le radici punteranno, anziché a NULL a un indice numerico particolare, come 0 o 1 (se 0 è un indice valido per il vettore) oppure punteranno all indice dell elemento stesso (l elemento i avrà P[i].father == i). Nel seguito, useremo 0 per coerenza con le dispense. struct elemento A *a; /* elemento */ int father; /* indice dell elemento padre */ ; typedef struct elemento MFset[n]; MFset P; dove una partizione P è vista come un vettore di strutture che contengono un elemento e l indice dell elemento padre. Spesso, invece di un vettore di strutture, si usano più vettori separati, uno per ciascun campo. A *a[n]; /* vettore degli elementi */ 2
4 int father[n]; /* vettore degli indici padre */ La funzione FIND consiste semplicemente nel risalire l albero di cui fa parte l elemento dato, fino a trovare la radice (Figura 4.2). A *FIND (A *a, MFset P) k = KEY(a); while (P[k].father!= 0) k = P[k].father; return P[k].a; ; Figura 4.2: Ricerca del rappresentante di un nodo dato La complessità dipende dal bilanciamento dell albero e dal numero di figli: può essere qualsiasi fra O (1), per alberi in cui tutti gli elementi sono direttamente appesi alla radice; O (n), per alberi in cui ogni elemento è concatenato agli altri a formare una lista. La funzione UNION nella sua forma più semplice consiste nel cercare i due rappresentanti e attaccare uno di loro all altro (per convenzione, ad esempio, il secondo al primo), come nella Figura 4.3. MFset UNION (A *a1, A *a2, MFset P) v1 = FIND(a1); k1 = KEY(v1); v2 = FIND(a2); k2 = KEY(v2); if (k1!= k2) P[k2].father = k1; return P; ; Questo richiede due volte il tempo della funzione FIND più tempo costante. Esercizio: si calcolino le componenti connesse del grafo che ha i seguenti lati: (d, g), (h, b), (b, g), (c, e), (i, l), (d, b), (e, g), (f, c), (e, d) 3
5 Figura 4.3: Fusione di due sottoinsiemi in uno solo Risultano due alberi, uno di altezza 4 radicato in f e l altro di altezza 1 radicato in i e contenente i e l. Tutto dipende quindi da quanto si riesce a tenere piatto ciascun albero della foresta, cioè a limitare l altezza massima dei suoi alberi. Ci sono diversi modi per garantire questo risultato. Bilanciamento basato sulla cardinalità L idea base è appendere sempre l albero di cardinalità minore a quello di cardinalità maggiore, anziché banalmente il secondo al primo. Si può dimostrare per induzione che questo limita l altezza di ogni albero a log 2 n + 1. per n = 1, l albero ha solo la radice, cioè un livello, che è h (1) = 1 log se la tesi vale per ogni i < n, significa che vale per i due sottoalberi che fondiamo in una applicazione della funzione UNION, che hanno cardinalità n 1 e n 2 positive e tali che n 1 + n 2 = n; supponiamo n 1 < n 2, per cui appendiamo T 1 a T 2 ; inoltre n 1 < n 2 e n 1 + n 2 = n implica 2n 1 < n, mentre n 2 n; l albero risultante dalla fusione ha altezza pari al massimo fra quella di T 1 aumentata di 1 e quella di T 2 : h (n) = max (h (n 1 ) + 1, h (n 2 )) entrambe le altezze rispettano la tesi, per cui h (n) h (n 1 ) + 1 log 2 n < log 2 n/2 + 2 = log 2 n + 1 h (n) h (n 2 ) log 2 n < log 2 n + 1 che è la tesi. h (n) log 2 n + 1 Questo meccanismo richiede di conservare nei MF-set anche la cardinalità degli alberi: basta aggiungere un campo num ad ogni struttura, che indica (per i soli elementi rappresentanti) la cardinalità dell albero appeso. MFset UNION (A *a1, A *a2, MFset P) v1 = FIND(a1); k1 = KEY(v1); v2 = FIND(a2); k2 = KEY(v2); 4
6 if (k1!= k2) if (P[k1].num < P[k2].num) P[k1].father = k2; P[k2].num = P[k1].num + P[k2].num; P[k1].num = 0; /* non strettamente necessario */ else P[k2].father = k1; P[k1].num = P[k1].num + P[k2].num; P[k2].num = 0; /* non strettamente necessario */ return P; ; Esercizio: si calcolino le componenti connesse del grafo che ha i seguenti lati: (d, g), (h, b), (b, g), (c, e), (i, l), (d, b), (e, g), (f, c), (e, d) Risultano due alberi, uno di altezza 2 radicato in h e l altro di altezza 1 radicato in i e contenente i e l. Bilanciamento basato sull altezza Invece di considerare la cardinalità, ci si può concentrare su ciò che effettivamente interessa, cioè l altezza degli alberi, appendendo sempre l albero di altezza minore a quello di altezza maggiore (in caso di parità, il secondo al primo); L albero risultante ha altezza pari alla maggiore delle due, se sono diverse; a entrambe più 1 se sono uguali. Questo comporta un campo rank, analogo al campo num prima introdotto; MFset UNION (A *a1, A *a2, MFset P) v1 = FIND(a1); k1 = KEY(v1); v2 = FIND(a2); k2 = KEY(v2); if (k1!= k2) if (P[k1].rank < P[k2].num) P[k1].father = k2; P[k1].rank = 0; /* non strettamente necessario */ else P[k2].father = k1; if (P[k1].rank == P[k2].rank) P[k1].rank = P[k1].rank + 1; 5
7 P[k2].num = 0; /* non strettamente necessario */ return P; ; Anche questa strategia garantisce un altezza logaritmica rispetto al numero di elementi. Esercizio: si calcolino le componenti connesse del grafo che ha i seguenti lati: (d, g), (h, b), (b, g), (c, e), (i, l), (d, b), (e, g), (f, c), (e, d) Risultano gli stessi due alberi ottenuti con il bilanciamento in cardinalità. Euristica di compressione dei cammini Ogni volta che si esegue la funzione FIND si percorre una catena di nodi che sarebbe meglio poter spianare appendendoli tutti alla radice. Questo è banalmente possibile: basta ripetere due volte la catena 1. la prima volta per trovare la radice; 2. la seconda volta per appendere ciascun nodo della catena alla radice. Questo comporta l uso del campo rank e l integrazione della funzione FIND come segue: A *FIND (A *a, MFset P) /* si determina la radice dell albero */ k = r = KEY(a); while (P[r].father!= 0) r = P[r].father; /* si appende direttamente ogni nodo della catena all albero */ while (P[k].father!= 0) p = P[k].father; P[k].father = r; k = p; return P[r].a; ; Se si modifica in questo modo la funzione FIND, ovviamente, il suo tempo di esecuzione raddoppia. Tuttavia, dato che essa viene usata nella funzione UNION, una sequenza di UNION tenderà a creare una foresta molto più piatta, e quindi le esecuzioni successive diventano molto più rapide. Si può dimostrare che l altezza della foresta tende a diventare praticamente costante al crescere di n. Infatti, 1 per k = 0 h (n) min k N : n F (k) con F (k) = 2 F (k 1) per k 1 6
8 Siccome F cresce velocissima (1, 2, 4, 16, 2 16, 2 216,...), praticamente (n) 5 in qualsiasi situazione. Esercizio: si calcolino le componenti connesse del grafo che ha i seguenti lati: (d, g), (h, b), (b, g), (c, e), (i, l), (d, b), (e, g), (f, c), (e, d) Il lato (b, g) fa anche collegare direttamente g ad h; Il lato (e, d) non fonde sottoinsiemi, ma applica la compressione e rende la foresta completamente piatta: due alberi di altezza 1 7
Strutture dati per insiemi disgiunti
Strutture dati per insiemi disgiunti Servono a mantenere una collezione S = {S 1, S 2,..., S k } di insiemi disgiunti. Ogni insieme S i è individuato da un rappresentante che è un particolare elemento
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
I B+ Alberi. Sommario
I B+ Alberi R. Basili (Basi di Dati, a.a. 2002-3) Sommario Indici organizzati secondo B + -alberi Motivazioni ed Esempio Definizione Ricerca in un B + -albero Esempio Vantaggi Inserimento/Cancellazione
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
Strutture dati per insiemi disgiunti (union-find)
Strutture dati per insiemi disgiunti (union-find) Una struttura dati per insiemi disgiunti mantiene una collezione S = { S 1, S 2,..., S k } di insiemi dinamici disgiunti. Ciascun insieme è identificato
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
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
Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.
Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Algoritmi e Strutture Dati + Lab A.A. / Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro ALBERO
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,
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,
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 27 marzo 2012 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,
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
Implementazione 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
Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio
Algoritmi Greedy Tecniche Algoritmiche: tecnica greedy (o golosa) Idea: per trovare una soluzione globalmente ottima, scegli ripetutamente soluzioni ottime localmente Un esempio Input: lista di interi
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 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
Problema Union-Find. 1. Il problema Union-Find. Problema Union-Find Pag. 1/18
Problema Union-Find Pag. 1/18 Problema Union-Find Introduciamo in questa sezione il problema della Union-Find la cui risoluzione rappresenta un passo propedeutico alla analisi di un altro problema: l albero
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
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
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.
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
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 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
RISOLUZIONE IN LOGICA PROPOSIZIONALE. Giovanna D Agostino Dipartimento di Matemaica e Informatica, Università di Udine
RISOLUZIONE IN LOGICA PROPOSIZIONALE Giovanna D Agostino Dipartimento di Matemaica e Informatica, Università di Udine 1. Risoluzione Definitione 1.1. Un letterale l è una variabile proposizionale (letterale
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,
Strutture di accesso ai dati: B + -tree
Strutture di accesso ai dati: B + -tree A L B E R T O B E L U S S I S E C O N D A P A R T E A N N O A C C A D E M I C O 2 0 0 9-2 0 0 Osservazione Quando l indice aumenta di dimensioni, non può risiedere
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
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
Insiemi Specifiche, rappresentazione e confronto tra realizzazioni alternative.
Insiemi Specifiche, rappresentazione e confronto tra realizzazioni alternative. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro Definizione
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
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
Esercizi di Algoritmi e Strutture Dati
Esercizi di Algoritmi e Strutture Dati Moreno Marzolla [email protected] Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi
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)
Lezione 9 Alberi binari di ricerca
Lezione 9 Alberi binari di ricerca Rossano Venturini [email protected] Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 1 Lista monodirezionale Scrivere
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
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
Laboratorio di Informatica
Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento
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 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
Problemi, istanze, soluzioni
lgoritmi e Strutture di Dati II 2 Problemi, istanze, soluzioni Un problema specifica una relazione matematica tra dati di ingresso e dati di uscita. Una istanza di un problema è formata dai dati di un
Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.
Un ulteriore semplificazione si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine (e l inizio) di una lista. Questa soluzione va contemplata
Algoritmi (9 CFU) (A.A ) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1
Algoritmi (9 CFU) (A.A. 2009-10) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1 Overview Definiamo la struttura dati heap Operazioni di costruzione e gestione di un heap Algoritmo Heapsort Code
Alberi di copertura. Mauro Passacantando. Dipartimento di Informatica Largo B. Pontecorvo 3, Pisa
Alberi di copertura Mauro Passacantando Dipartimento di Informatica Largo B. Pontecorvo, Pisa [email protected] M. Passacantando TFA 0/ - Corso di Ricerca Operativa Università di Pisa / 9 Definizioni
Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Grafi: visite Una breve presentazione Visite di grafi Scopo e tipi di visita Una visita (o attraversamento) di un grafo G permette di esaminare i nodi e gli archi di G in modo sistematico Problema di base
Algoritmi e Strutture di Dati (3 a Ed.) String matching. Alan Bertossi, Alberto Montresor
Algoritmi e Strutture di Dati (3 a Ed.) String matching Alan Bertossi, Alberto Montresor STRING MATCHING. Date una stringa P di m caratteri (pattern) e una stringa T di n caratteri, con m n, trovare un
Programmazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
Progettazione di algoritmi
Progettazione di algoritmi Discussione dell'esercizio [vincoli] Prima di tutto rappresentiamo il problema con un grafo G: i nodi sono le n lavorazioni L 1, L 2,, L n, e tra due nodi L h, L k c'è un arco
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
Dati e Algoritmi 1: A. Pietracaprina. Grafi (II parte)
Dati e Algoritmi 1: A. Pietracaprina Grafi (II parte) 1 Breath-First Search (algoritmo iterativo) Si assume una rappresentazione tramite liste di adiacenza. L ordine con cui si visitano i vicini di un
Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi
Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore
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
In questa lezione. Heapsort. ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 114
In questa lezione Heapsort ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 11 1 Paternità L heapsort è stato pubblicato da J. W. J. Williams nel 106. Pochi mesi
2.2 Alberi di supporto di costo ottimo
. Alberi di supporto di costo ottimo Problemi relativi ad alberi hanno numerose applicazioni: progettazione di reti (comunicazione, teleriscaldamento,...) memorizzazione compatta di sequenze (DNA) diffusione
Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree
Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1 Si definisca Interval Tree un albero binario di ricerca le
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
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]
Algoritmi e Strutture Dati
Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Heap Heap binari: definizione Un heap binario è una struttura dati composta
Hash Table. Hash Table
Hash Table La ricerca di un elemento su una lista (semplice o doppia) presenta una complessità di tipo O(n), dato che occorre scandire (al più) l intera lista per poter trovare l elemento desiderato. Le
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)
Precorsi di matematica
Precorsi di matematica Francesco Dinuzzo 12 settembre 2005 1 Insiemi Il concetto di base nella matematica moderna è l insieme. Un insieme è una collezione di elementi. Gli elementi di un insieme vengono
Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen
Esercitazione Ricorsione May 31, 2016 Esercizi presi dal libro di Rosen Problema 2 a) sezione 5.3 Data la seguente funzione definita ricorsivamente come: f(n+1) = 2f(n) f(0) = 3 Determinare il valore di
Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.
Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro
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
Alberi. 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
2.2 Alberi di supporto di costo ottimo
. Alberi di supporto di costo ottimo Problemi relativi ad alberi hanno numerose applicazioni: progettazione di reti (comunicazione, teleriscaldamento,...) protocolli reti IP memorizzazione compatta di
Strutture 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 [email protected] Sommario Le liste concatenate (ancora ma in modo più formale) L
