Il tipo astratto Coda con Priorità. Algoritmi e Laboratorio a.a Lezioni. Il tipo astratto Coda con Priorità

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Il tipo astratto Coda con Priorità. Algoritmi e Laboratorio a.a Lezioni. Il tipo astratto Coda con Priorità"

Transcript

1 Il tipo astratto Coda con Priorità Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a Lezioni prof. Elio Giovannetti Parte 20 Code con priorità versione 0/0/200 Quest' opera è pubblicata sotto una Licenza Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Una coda con priorità è una collezione di elementi ognuno dei quali possiede una certa priorità (rappresentata ad es. da un numero naturale). Esempio: un insieme di richieste di lavori, di cui alcuni più urgenti di altri. Una coda con priorità, a differenza di una coda ordinaria, non obbedisce ad una disciplina FIFO, poiché da essa si estrae ogni volta quello (o uno di quelli) con priorità più alta. È consuetudine che la priorità più alta possibile sia indicata dal numero, e le priorità inferiori da numeri interi più grandi. L'operazione di estrazione dalla coda è allora un'operazione di estrazione del minimo. 0/0/200. E. Giovannetti - AlgELab Lez.20 2 Il tipo astratto Coda con Priorità Le operazioni fondamentali che definiscono il tipo astratto Coda con Priorità sono allora: inserimento di un elemento con una data priorità; estrazione dell'elemento con il valore minimo di priorità; restituzione di tale minimo senza estrarlo dalla coda; test se la coda è vuota o no. Come nel caso del dizionario, si possono dare definizioni diverse a seconda che la coda si consideri costituita di coppie elemento, priorità oppure che si consideri ogni elemento come "contenente al proprio interno" la priorità. Si possono poi definire altre operazioni, come: variazione della priorità di un elemento della coda; cancellazione di un elemento della coda; fusione di due code con priorità; Esempio di definizione (da Demetrescu) 0/0/200. E. Giovannetti - AlgELab Lez.20 0/0/200. E. Giovannetti - AlgELab Lez.20 4 Esempio di definizione (continua) Nota: la chiave non è nient'altro che la priorità. Possibili realizzazioni liste ordinate (in ordine crescente): l'elemento di priorità più alta, cioè il minimo, è il primo, ma l'inserimento è un inserimento al posto giusto in lista ordinata; quindi: estrazione del minimo: complessità Θ(); inserimento (casi medio e peggiore): complessità Θ(n); liste non ordinate: l'inserimento può avvenire sempre in testa, ma l'estrazione è una ricerca del minimo in sequenza non ordinata, quindi: estrazione del minimo: complessità Θ(n); inserimento: complessità Θ(); rappresentare la sequenza come un array non migliora la situazione (se è ordinato, l'inserimento è Θ(n); se non è ordinato, è Θ(n) l'estrazione ) 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez.20 6

2 Coda con priorità "a massimo". Non cambia nulla se si assume che la priorità più alta sia quella di valore massimo: basta sostituire l'ordine crescente con l'ordine decrescente, ed il minimo con il massimo. Un'idea migliore: albero parzialmente ordinato Un albero (binario) in cui la chiave di ciascun nodo è minore o uguale delle chiavi dei figli. Nota Bene: NON è un albero di ricerca (l'ordinamento è, per così dire, dall'alto in basso e non da sinistra a destra). Quindi: il minimo è l'elemento nella radice; ogni cammino dalla radice a una foglia è ordinato; Allora: per inserire un elemento basterebbe percorrere un qualsiasi cammino inserendo l'elemento al posto giusto; per estrarre il minimo basterebbe estrarre la radice e ricorsivamente far salire come radice il minore dei figli; in entrambi i casi, se l'albero è bilanciato, la lunghezza del cammino da percorrere è Θ(log n). 0/0/200. E. Giovannetti - AlgELab Lez.20 0/0/200. E. Giovannetti - AlgELab Lez.20 8 Esempio Su ogni cammino dalla radice a una foglia la sequenza delle chiavi è una sequenza ordinata. Esempio (continua) se estraiamo il minimo, cioè la radice, facciamo salire al suo posto il minore dei figli: per definizione, esso risulterà minore (o uguale) di tutti i nodi dell'albero /0/200. E. Giovannetti - AlgELab Lez.20 0/0/200. E. Giovannetti - AlgELab Lez.20 0 Esempio (continua) il nodo lasciato libero viene occupato facendo a sua volta salire il minore dei figli e così via Esempio (continua) /0/200. E. Giovannetti - AlgELab Lez.20 0/0/200. E. Giovannetti - AlgELab Lez

3 Esempio (continua) Secondo esempio fino a far salire una foglia /0/200. E. Giovannetti - AlgELab Lez.20 0/0/200. E. Giovannetti - AlgELab Lez.20 4 Secondo esempio (continua) se estraiamo il minimo, cioè la radice, facciamo salire al suo posto il minore dei figli: per definizione, esso risulterà minore (o uguale) di tutti i nodi dell'albero Secondo esempio (continua) il nodo lasciato libero viene occupato facendo a sua volta salire il minore dei figli /0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez.20 6 Secondo esempio (fine) La foglia cancellata non è all'ultimo livello Problema: come mantenere il bilanciamento Una successione di inserimenti ed estrazioni può produrre un albero molto sbilanciato, per il quale l'altezza non è più logaritmica rispetto al numero dei nodi. Per mantenere il bilanciamento si può fare in modo che l'albero rimanga sempre quasi completo, cioè completo almeno fino al penultimo livello. A tal fine, è sufficiente fare in modo che l'inserimento e l'estrazione modifichino la forma dell'albero soltanto per l'aggiunta o l'eliminazione di un nodo all'ultimo livello (intendendo per ultimo livello quello "reale", cioè non contando il livello dei nodi nulli) /0/200. E. Giovannetti - AlgELab Lez.20 0/0/200. E. Giovannetti - AlgELab Lez.20 8

4 Come mantenere il bilanciamento: soluzione. Inserimento: esempio. L'albero viene mantenuto quasi completo, nel modo seguente: inserimento: il nuovo elemento viene inserito come foglia all'ultimo livello e poi fatto risalire al posto giusto mediante scambi col genitore; estrazione del minimo: il minimo è la radice, che si estrae; ma al suo posto, invece di far salire il figlio minore, si sposta una foglia dell'ultimo livello, che viene poi fatta scendere al posto giusto scambiandola ogni volta col minore dei figli Vogliamo inserire l'elemento 2. 0/0/200. E. Giovannetti - AlgELab Lez.20 0/0/200. E. Giovannetti - AlgELab Lez Inserimento: esempio (continua). Inserimento: esempio (continua) Inseriamo l'elemento 2 come foglia all'ultimo livello; è minore del genitore, scambiamolo con esso. 0/0/200. E. Giovannetti - AlgELab Lez.20 2 È di nuovo minore del genitore e quindi anche del fratello: scambiamolo con il genitore. 0/0/200. E. Giovannetti - AlgELab Lez Inserimento: esempio (continua). Estrazione del minimo: esempio È maggiore del genitore: quindi è al posto giusto, l'albero è di nuovo parzialmente ordinato. 0/0/200. E. Giovannetti - AlgELab Lez.20 2 Restituiamo il valore della radice, cioè ; 0/0/200. E. Giovannetti - AlgELab Lez

5 Estrazione del minimo: esempio (continua). Estrazione del minimo: esempio (continua) poi spostiamo nella radice una foglia dell'ultimo livello; 0/0/200. E. Giovannetti - AlgELab Lez il nodo-radice non è minore (o uguale) di ognuno dei figli, anzi è maggiore di entrambi; per ripristinare la proprietà violata, lo dobbiamo scambiare con il minore dei figli; 0/0/200. E. Giovannetti - AlgELab Lez Estrazione del minimo: esempio (continua). Estrazione del minimo: esempio (continua) di nuovo il nodo rosso non è minore di ognuno dei figli; per ripristinare la proprietà, lo dobbiamo scambiare con il minore dei figli; 0/0/200. E. Giovannetti - AlgELab Lez.20 2 Il nodo è minore dei figli (anzi, dell'unico figlio); quindi è al posto giusto, l'albero è di nuovo parzialmente ordinato. 0/0/200. E. Giovannetti - AlgELab Lez Problema: come realizzare gli algoritmi precedenti. Per poter realizzare concretamente con complessità logaritmica i due algoritmi astratti precedenti, bisogna: trovare in tempo costante (o al più logaritmico) quale foglia tagliare oppure creare; essere in grado, nell'algoritmo di inserimento, di risalire dal figlio al padre in tempo costante. Soluzione: la struttura-dati heap. L'albero viene mantenuto quasi-completo da sinistra, cioè binario quasi-completo (vedi slides Lez. 5) con tutte le foglie dell'ultimo livello "addossate a sinistra". Nota terminologica. Un albero d-ario con le proprietà richieste, cioè: la chiave di ciascun nodo è minore o uguale della chiave di ogni suo figlio non nullo; l'albero è quasi-completo da sinistra; viene detto heap (non confondere con lo heap del modello di memoria dei linguaggi di programmazione). L'albero-heap viene realizzato per mezzo di un array in cui i nodi sono memorizzati consecutivamente per livelli. 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez

6 Esempio di heap (binario, a minimo) Albero-heap realizzato come array La forma regolare ne permette la realizzazione tramite array. Conviene, come vedremo, non utilizzare l'elemento di indice 0. Si osservi che ogni sottoalbero di uno heap è a sua volta uno heap. 0/0/200. E. Giovannetti - AlgELab Lez.20 0/0/200. E. Giovannetti - AlgELab Lez.20 2 Proprietà Se i nodi vengono memorizzati nell'array a partire dall'indice (lasciando inutilizzato l'elemento di indice 0), i figli del nodo memorizzato nell'elemento di indice i risultano memorizzati rispettivamente negli elementi di indice 2i e 2i+: left(i) = 2i right(i) = 2i+ quindi: parent(i) = i/2 2 Nota implementativa Come in molte altre situazioni dello stesso genere, in cui un elemento deve venire scambiato più volte con successivi elementi di una sequenza (pensa ad esempio all'insertion sort), conviene tenere tale elemento in un temporaneo e inserirlo solo alla fine nella posizione giusta. È quindi come se ogni volta si scambiasse un elemento con un posto vuoto, il quale alla fine raggiunge la posizione corretta in cui inserire il valore tenuto nel temporaneo /0/200. E. Giovannetti - AlgELab Lez.20 0/0/200. E. Giovannetti - AlgELab Lez.20 4 Una realizzazione elementare in Java Assumiamo, per semplicità, che gli elementi della coda siano degl'interi coincidenti con le loro priorità. Nell'array degli elementi lasciamo inutilizzato il posto di indice 0. Inserimento Si aggiunge un nodo posto-vuoto alla fine dell'albero, cioè al fondo dell'array: lastindex++; public class PriorityQueue { private int[] elements; private int lastindex; public PriorityQueue(int n) { this.elements = new int[n+]; lastindex = 0; // crea una coda vuota 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez

7 Inserimento (continua) Inserimento (continua) Se l'elemento da inserire è minore del genitore del posto vuoto, si sposta il genitore nel posto vuoto, facendo virtualmente salire il posto vuoto. 0/0/200. E. Giovannetti - AlgELab Lez.20 Se l'elemento da inserire è ancora minore del genitore del posto vuoto si ripete il procedimento, e così via finché il posto vuoto non risale nella posizione giusta. 0/0/200. E. Giovannetti - AlgELab Lez.20 8 Inserimento (continua) Inserimento (fine) All'uscita dal while, o il posto vuoto è la radice, oppure il genitore del posto vuoto è minore (o uguale) dell'elemento da inserire; perciò si inserisce l'elemento nel posto vuoto: elements[i] = newelement; int i = lastindex; while(i > && newelement < elements[i/2]){ elements[i] = elements[i/2]; // sposta in giù il genitore i = i/2; // sposta in su il posto vuoto 0/0/200. E. Giovannetti - AlgELab Lez.20 0/0/200. E. Giovannetti - AlgELab Lez Si estrae la radice: int min = elements[]; Estrazione del minimo Estrazione del minimo (continua) Si toglie l'ultimo nodo, e lo si mette al posto della radice: int last = elements[lastindex]; lastindex--; if(lastindex > 0) { // coda non vuota elements[] = last; 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez.20 42

8 Estrazione del minimo (continua) La procedura movedown o fixheap La procedura movedown (o una sua analoga) è da molti chiamata fixheap o, in italiano, aggiustaheap (nell'inglese americano to fix vuol dire aggiustare, riparare). Dato uno heap o un sottoheap in cui solo la radice è eventualmente "fuori posto", cioè maggiore di almeno uno dei figli, la fa scendere al posto giusto, scambiandola ogni volta con il minore dei figli. In tal modo essa "ripara" lo heap o sottoheap considerato, ripristinandone la proprietà caratteristica degli heap. La radice sarà in generale fuori posto, perché maggiore di uno dei suoi figli (o di entrambi); allora la si fa scendere al posto giusto per mezzo di una procedura movedown. 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez Procedura movedown o fixheap Si scambia il nodo fuori posto con il suo figlio minore, finché il nodo si trova ad essere non maggiore dei figli, oppure a non avere figli (cioè è diventato una foglia). Procedura movedown o fixheap 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez Definiamo i due metodi privati ausiliari moveup e movedown i quali, dato un solo elemento "fuori posto" nello heap, lo fanno rispettivamente salire o scendere a un posto giusto: private void moveup(int i): se i è l'indice di un elemento eventualmente "fuori posto rispetto al genitore", lo fa risalire al posto giusto; private void movedown(int i): se i è l'indice di un elemento eventualmente "fuori posto rispetto ai figli", lo fa scendere al posto giusto. I metodi di inserimento, estrazione del minimo, variazione di priorità sono poi realizzati per mezzo dell'uno o dell'altro dei due metodi precedenti. public void moveup(int i) { if(i > lastindex) throw new IllegalArgumentException(); int elem = elements[i]; // elemento da far salire while(i > && elem < elements[i/2]) { // minore del padre elements[i] = elements[i/2]; // sposta in giù il padre i = i/2; // sposta in su il posto per l'elemento elements[i] = elem; public void add(int newelement) { if(lastindex == elements.length-) rialloca(); // mette il nuovo elemento in una nuova foglia: elements[++lastindex] = newelement; moveup(lastindex); // lo fa risalire al posto giusto 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez

9 Attenzione Non confondere il tipo int dell'argomento i di moveup, che è un indice di array, con il tipo dell'argomento newelement di add, che in questa versione semplificata è anch'esso un int, ma che è il tipo degli elementi della coda e può quindi in generale essere un tipo qualunque su cui sia definita una relazione d'ordine (ossia un metodo compare). Analogamente il tipo int dell'argomento i di movedown è un indice di array, da non confondersi con il tipo int del minimo che viene estratto, che è ovviamente anch'esso il tipo degli elementi della coda. public void movedown(int i) { if(i > lastindex) throw new IllegalArgumentException(); int elem = elements[i]; // nodo da far scendere ciclo con due punti di uscita: all'inizio: si esce se il nodo è una foglia alla fine: si esce se l'elemento è minore dei due figli (o dell'unico figlio) while(2*i <= lastindex) { // while il nodo ha almeno un figlio int ichild = 2*i; // indice del figlio sinistro int child = elements[ichild]; child è il figlio sinistro int j = ichild + ; // indice del figlio destro if(j <= lastindex && elements[j] < child) { // se il figlio destro esiste ed è il minore, child è il figlio destro ichild = j; (nota che j è ichild+, quindi si sarebbe potuto scrivere ichild++) child = elements[j]; a questo punto child è il minore dei figli, ichild è il suo indice (continua nella slide seguente) 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez Se l'elemento è maggiore del figlio minore, scambiamo il figlio con il posto vuoto: if(elem > child ) { elements[i] = child ; // facciamo salire il figlio i = ichild ; // facciamo scendere il posto vuoto else break; se l'elemento non è maggiore di nessun figlio, è al posto giusto. all'uscita dal while la posizione i o non ha figli oppure ha figli entrambi maggiori o uguali del nodo da mettere a posto; quindi i è il posto giusto: elements[i] = elem; Osservazione: La forma del ciclo con due uscite, di cui una realizzata con il break, è quella che aderisce meglio alla logica del programma. Una volta l'uso dei break, cioè dei cicli a uscite multiple, era sempre considerato sconveniente, e per evitarlo ci si costringeva a introdurre artificiose variabili booleane. 0/0/200. E. Giovannetti - AlgELab Lez.20 5 L'intera procedura public void movedown(int i) { if(i > lastindex) throw new IllegalArgumentException(); int elem = elements[i]; // nodo da far scendere while(2*i <= lastindex) { // while il nodo ha almeno un figlio int ichild = 2*i; // indice del figlio sinistro int child = elements[ichild]; child è il figlio sinistro int j = 2*i + ; // indice del figlio destro if(j <= lastindex && elements[j] < child) { ichild = j; // se il figlio destro esiste ed è il minore child = elements[j]; // child è il figlio destro if(elem > child ) { elements[i] = child ; // facciamo salire il figlio i = ichild ; // facciamo scendere il posto vuoto else break; se l'elemento non è maggiore di nessun figlio, elements[i] = elem; 0/0/200. E. Giovannetti - AlgELab Lez Estrazione del minimo: public int removemin() { if(lastindex == 0) throw new Illegal (); int minimum = elements[]; if movedown(); return minimum; Un eventuale metodo che incrementa o decrementa di un intervallo delta la priorità dell'elemento di indice i: public void changepriority(int i, int delta) { if(i > lastindex) throw new Illegal; elements[i] += delta; if(delta > 0) movedown(i); else if(delta < 0) moveup(i); Un tale metodo sembra poco sensato, poiché in generale non si sa qual è l'elemento di indice i nella coda. Esso (o una sua variante) è invece utilizzato in un algoritmo sui grafi. 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez.20 54

10 Analisi della complessità Le due procedure moveup e movedown sono entrambe nel caso peggiore logaritmiche nel numero degli elementi, poiché percorrono un ramo di un albero binario quasi completo impiegando un tempo costante per ogni passo. Tali sino quindi anche tutte le operazioni considerate, in particolare l'estrazione del minimo e l'inserimento. Per esse si ha dunque: T worst (n) = Θ(log n) Riassunto Procedure Coda con Priorità (a minimo) void moveup(int i) fa salire al posto giusto l'elemento di indice i: risale il ramo dell'albero dal nodo i verso la radice, spostando in giù di una posizione ogni nodo (padre) finché arriva ad un elemento minore (cioè di priorità più alta) di quello da mettere a posto, oppure alla radice; inserisce nel "posto libero" l'elemento. void movedown(int i) fa scendere al posto giusto l'elemento di indice i: percorre un ramo dell'albero dal nodo i verso il basso, scegliendo ogni volta il minore dei figli e spostandolo nel padre, finché arriva ad un elemento maggiore (cioè di priorità più bassa) di quello da mettere a posto, oppure ad una foglia; inserisce nel "posto libero" l'elemento. 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez Riassunto Procedure Coda con Priorità (a minimo) void add(e el) inserisce in coda l'elemento el: inserisce el in una nuova foglia al fondo dell'albero, e poi la fa risalire al posto giusto. E removemin() estrae dalla coda il minimo: estrae la radice, sposta l'ultima foglia nella radice e poi la fa scendere al posto giusto. Aspetti realizzativi (parte opzionale) void changeprority(int i, int delta) cambia la priorità dell'elemento di indice i: a seconda del segno di delta, fa salire oppure scendere l'elemento. 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez Alcune possibili versioni più generali.. Coda di elementi di tipo parametrico E, con il vincolo che su E sia definita una relazione d'ordine totale, cioè: in Java: public class PriorityQueue<E extends Comparable<E>> in C#: public class PriorityQueue<E> where E: IComparable<E> in cui quindi la priorità non è necessariamente un intero. 2. Coda di coppie elemento, priorità, dove l'elemento è di un tipo parametrico E qualsiasi, senza vincoli, mentre la priorità è un intero.... 0/0/200. E. Giovannetti - AlgELab Lez.20 5 Versione : realizzazione in C# con array generico. using System; public class PriorityQueue<E> where E: IComparable<E> { private E[] elements; private int lastindex; // indice dell'ultimo // elemento presente public PriorityQueue(int n) { this.elements = new E[n]; lastindex = 0; // lasciamo vuoto l'el. di indice 0 public bool isempty() { return lastindex == 0; 0/0/200. E. Giovannetti - AlgELab Lez

11 Versione : realizzazione in Java con una ArrayList. In Java, per evitare i problemi degli array generici, possiamo usare una ArrayList: public class PriorityQueue<E extends Comparable<E>> { private ArrayList<E> elements; public PriorityQueue() { elements = new ArrayList<E>(); elements.add(null); // lasciamo vuoto l'elemento di indice 0 Versione 2: realizzazione in C# public class PriorityQueue<E> { struct ElementWithPriority{ public E element; public int priority; public ElementWithPriority(E e, int p) { element = e; priority = p; private ElementWithPriority[] elements; private int lastindex; public PriorityQueue(int n) { this.elements = new ElementWithPriority[n+]; lastindex = 0; 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez Versione 2: realizzazione in C# (continua) public void moveup(int i) { if(i > lastindex) throw new ArgumentException(); ElementWithPriority elem = elements[i]; while(i> && elem.priority < elements[i/2].priority) { elements[i] = element; public void add(int prior, E newelem) { if(lastindex == elements.length-) rialloca(); lastindex++; int i = lastindex; elements[i] = new ElementWithPriority(newElem, prior); moveup(i); Versione 2: realizzazione in C# (continua) Esempio di uso PriorityQueue<String> q = new PriorityQueue<String>(5); q.add(, "Pulisci i tappeti"); q.add(, "Svuota il cestino"); q.add(8, "Innaffia le piante"); q.add(0, "Butta via i trucioli del temperamatite"); q.add(6, "Sostituisci lampadina"); q.add(, "Ripara il lavandino"); q.add(, "Pulisci la caffettiera"); q.add(2, "Acquista materiali per pulizia"); while (!q.isempty()) Console.WriteLine(q.remove()); 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez Esercizi Completare la classe PriorityQueue di tipo generico in C#. Realizzare la classe PriorityQueue di tipo generico in Java utlizzando l'arraylist. Definire una classe che implementi IComparable (in C#) o Comparable (in Java) e realizzare poi una semplice classe con un main di prova della PriorityQueue. Completare la versione "realistica" 2 in C#. Modificare le soluzioni degli esercizi precedenti in modo che diventino degli heap a massimo (invece che a minimo). Realizzare una classe PriorityQueue con heap ternario invece che binario (cioè albero d-ario con d= invece che 2; vedi libro di testo). Domanda Si potrebbe, come per lo heap, memorizzare un albero binario di ricerca in un array, in modo da essere in grado di accedere rapidamente ai figli e al genitore di un nodo di indice i, cioè semplicemente andando agli elementi di indice rispettivamente 2i, 2i+, e i/2? Se si, come e con quali pro e contro? 0/0/200. E. Giovannetti - AlgELab Lez /0/200. E. Giovannetti - AlgELab Lez.20 66

Algoritmi e Laboratorio a.a Lezioni

Algoritmi e Laboratorio a.a Lezioni Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2009-10 Lezioni prof. Elio Giovannetti Lezione 22 Code con priorità

Dettagli

Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni

Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 26-7 Lezioni prof. Elio Giovannetti Parte 21 Heapsort versione 2/2/27

Dettagli

Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni. I due cicli dell'algoritmo

Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni. I due cicli dell'algoritmo Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. -1 Lezioni prof. Elio Giovannetti Lezione Heapsort versione 11/11/

Dettagli

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

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

Dettagli

Alberi due-tre e alberi B

Alberi due-tre e alberi B Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Basi di Dati e Algoritmi, a.a. 2006-07 prof. Elio Giovannetti CREDITS Alcune slides con disegni

Dettagli

Heap e code di priorità

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

Dettagli

lezione 9 min-heap binario Heap e Alberi posizionali generali

lezione 9 min-heap binario Heap e Alberi posizionali generali lezione 9 Heap e Alberi posizionali generali min-heap binario Un min-heap è un albero binario quasi completo in cui ogni nodo i diverso dalla radice soddisfa la seguente proprietà: il valore memorizzato

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità Laboratorio di Algoritmi e Strutture Dati Code con Priorità Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso

Dettagli

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: 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

Dettagli

Algoritmi e Laboratorio a.a Lezioni. prof. Elio Giovannetti

Algoritmi e Laboratorio a.a Lezioni. prof. Elio Giovannetti Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2005-06 Lezioni prof. Elio Giovannetti Parte 7 Algoritmi di ordinamento

Dettagli

Problemi di ordinamento

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

Dettagli

Un heap binario è un albero binario con le seguenti caratteristiche:

Un heap binario è un albero binario con le seguenti caratteristiche: Heap Un heap binario è un albero binario con le seguenti caratteristiche: È quasi completo: tutti i livelli, tranna al più l ultimo sono completi e le foglie dell ultimo livello sono tutte adossate a sinistra.

Dettagli

Esercitazione 3. Heapsort

Esercitazione 3. Heapsort Esercitazione Heapsort Heapsort Algoritmo di ordinamento che utilizza una struttura dati detta heap per la gestione delle informazioni Tempo di esecuzione O(n lg n) Heap (binario) = struttura dati composta

Dettagli

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Prova 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).

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 6 novembre 2008 Heap binari: definizione Un heap binario è una albero binario quasi completo

Dettagli

Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche:

Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche: Heapsort Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche: T(n) = O(n log(n)) Alg. Ordinamento ottimale Ordina in loco (niente

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Code di priorità (Heap e heap_sort) m.patrignani Nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi,

Dettagli

Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una

Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una relazione d ordine. Sono definite almeno le seguenti operazioni:

Dettagli

Algoritmi e Strutture Dati

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

Dettagli

algoritmi e strutture di dati

algoritmi e strutture di dati algoritmi e strutture di dati alberi rosso-neri m.patrignani contenuto definizione di alberi rosso-neri proprietà degli alberi rosso-neri complessità delle operazioni elementari rotazioni inserimenti e

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Capitolo 0 - Code con priorità e insiemi disgiunti This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license,

Dettagli

Heap e Code di Priorità

Heap e Code di Priorità Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non

Dettagli

Alberi ed Alberi Binari di Ricerca

Alberi ed Alberi Binari di Ricerca Alberi ed Alberi Binari di Ricerca 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

Dettagli

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis Code a priorità Progettazione di Algoritmi 2018-19 Matricole congrue a 1 Docente: Annalisa De Bonis 26 Coda a priorità Una coda a priorità è un collezione di elementi a ciascuno dei quali è assegnata una

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2009-10 Lezioni prof. Elio Giovannetti Lezione 7 Il problema della

Dettagli

Algoritmi e Strutture Dati

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]

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto

Dettagli

Spesso sono definite anche le seguenti operazioni:

Spesso sono definite anche le seguenti operazioni: Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una relazione d ordine. Sono definite almeno le seguenti operazioni:

Dettagli

Scritto di Algoritmi e s.d. (1o anno) 16 Gennaio 2004 TESTO E RISPOSTE

Scritto di Algoritmi e s.d. (1o anno) 16 Gennaio 2004 TESTO E RISPOSTE Scritto di Algoritmi e s.d. (1o anno) 16 Gennaio 2004 TESTO E RISPOSTE Esercizio 1 (punti 1 + 4 in prima approssimazione) Consideriamo il seguente codice C: typedef struct nodo * Alb; struct nodo { int

Dettagli

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari lgoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Esercitazione 7 Domenico Fabio Savo 1 Esercitazione: heap Abbiamo visto come utilizzare i MAX-HEAP nell'algoritmo di ordinamento heapsort che permette di ordinare un array di

Dettagli

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto

Dettagli

Heap, heapsort e code a priorità. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Heap, heapsort e code a priorità. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Heap, heapsort e code a priorità Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Heap Definizione: albero binario con proprietà strutturale: quasi completo (tutti i livelli completi,

Dettagli

Code con priorità. Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna.

Code con priorità. Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna. Code con priorità Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna marzolla@cs.unibo.it http://www.moreno.marzolla.name/ Copyright 2009 2012 Moreno Marzolla, Università di Bologna

Dettagli

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

L 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)

Dettagli

Heap, heap indiretti e code di priorità

Heap, heap indiretti e code di priorità Heap, heap indiretti e code di priorità Paolo Boldi 15 marzo 02 1 Introduzione Uno heap (letteralmente: mucchio) è (almeno idealmente) un albero binario i cui nodi contengono dei dati, ciascuno caratterizzato

Dettagli

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata heap heap concetti ed applicazioni heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. tutte le foglie sono a sinistra ma non è un BST!! 3. ogni nodo contiene una chiave maggiore

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Alberi rosso-neri m.patrignani Contenuto Definizione di alberi rosso-neri Proprietà degli alberi rosso-neri Complessità delle operazioni elementari Rotazioni Inserimenti e

Dettagli

Tipi di dato e Strutture dati elementari

Tipi di dato e Strutture dati elementari Tipi di dato e Strutture dati elementari Ing. Paolo Craca Anno accademico 2007/2008 Tipi di dato e Strutture dati elementari 1 / 40 Cosa vedremo in questo seminario 1 Introduzione 2 Pile 3 Code 4 5 Bibliografia

Dettagli

ADT albero binario completo

ADT albero binario completo ADT albero binario completo Un albero binario completo è un albero binario in cui ogni livello, fino al penultimo, è completamente riempito. L'ultimo livello è riempito da sinistra a destra a 1 nodo b

Dettagli

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

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni

Dettagli

Calcolare x n = x x x (n volte)

Calcolare x n = x x x (n volte) Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile

Dettagli

Esercitazione 6. Alberi binari di ricerca

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)

Dettagli

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

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

Dettagli

Alberi ed Alberi Binari

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,

Dettagli

Fondamenti teorici e programmazione

Fondamenti teorici e programmazione Fondamenti teorici e programmazione FTP(A) - modb Lezione 9 di ricerca binaria F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 1 liberi Un albero libero è un

Dettagli

heap concetti ed applicazioni

heap concetti ed applicazioni heap concetti ed applicazioni ADT coda di priorità operazioni getfirst restituisce l'elemento nella struttura con massima priorità deletefirst cancella l'elemento nella struttura con massima priorità insert

Dettagli

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 8 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

Gestione dinamica di una lista

Gestione dinamica di una lista Gestione dinamica di una lista La lista lineare è una struttura astratta di dati a lunghezza variabile in cui l'inserimento di un nuovo elemento e l'estrazione di un elemento può essere effettuata in una

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 15 Algoritmi su array: selection sort, insertion sort, fusione

Dettagli

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. 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

Dettagli

Heap Ordinamento e code di priorità. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 9

Heap Ordinamento e code di priorità. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 9 Heap Ordinamento e code di priorità Heap: definizione Definizione. Uno Heap (binario) è un albero binario finito i cui vertici sono etichettati da elementi di un insieme linearmente ordinato (chiavi),

Dettagli

Esercizio. Strutture Dati

Esercizio. Strutture Dati Esercizio Si scriva un metodo public Position sibling(position v) che preso in input un nodo v restituisca il fratello di v. Il metodo dovrà lanciare una BoundaryViolationException nel caso in cui

Dettagli

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

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

Dettagli

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

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

Dettagli

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

Alberi 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

Dettagli

Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona

Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona Lezione 15 programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Approfondimenti della programmazione OO Il modificatore abstract Le classi

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 14 Array parzialmente riempiti. Algoritmi sugli array. Arrayparzialmente

Dettagli

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

PROGRAMMAZIONE 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

Dettagli

In questa lezione. Heap binario heapsort. [CLRS10] cap. 6, par Prof. E. Fachini - Intr. Alg.

In questa lezione. Heap binario heapsort. [CLRS10] cap. 6, par Prof. E. Fachini - Intr. Alg. In questa lezione Heap binario heapsort [CLRS10] cap. 6, par. 6.1-6.4!1 Heap binari Un heap binario è una struttura dati consistente di un array visto come un albero binario. A= 5 60 65 30 50 18 40 25

Dettagli

Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi. Parte prima

Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi. Parte prima Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi Parte prima 1) Si dimostri il teorema sulla limitazione inferiore per il tempo asintotico di esecuzione nel caso

Dettagli

Lezione 12 Tabelle Hash

Lezione 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

Dettagli

Una definizione induttiva di albero binario astratto. Algoritmi e Laboratorio a.a Lezioni. Notazione lineare infissa per alberi binari.

Una definizione induttiva di albero binario astratto. Algoritmi e Laboratorio a.a Lezioni. Notazione lineare infissa per alberi binari. Una definizione induttiva di albero binario astratto Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2006-07 Lezioni

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

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,

Dettagli

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Dipartimento 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

Dettagli

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

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

Dettagli

Per semplicità eliminiamo le ripetizioni nell'albero.

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

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

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,

Dettagli

Esercizio 1 (6 punti)

Esercizio 1 (6 punti) Prova scritta del 22 gennaio 2018 di Fondamenti di Informatica II (prof. Di Gaspero) Per studenti di Ing. Gestionale immatricolati negli anni accademici 2016-17 e precedenti DURATA DELLA PROVA: 2 ORE A

Dettagli

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

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

Dettagli

Il vettore e la lista concatenate (o catena) sono due esempi di strutture interne.

Il vettore e la lista concatenate (o catena) sono due esempi di strutture interne. Strutture dati PILA e CODA Le strutture dati si dividono in interne e astratte. Quelle astratte sono rappresentazioni dei dati di un problema che rispecchiano le proprietà dei dati e le relazioni usate

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e strutture dati Roberto Cordone A. A. 2015-16 Capitolo 3 Implementazioni dei dizionari ordinati Nota: queste dispense sono un rapido riassunto delle lezioni svolte nel dicembre 2015 e gennaio

Dettagli

Alberi binari e alberi binari di ricerca

Alberi 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

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

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

Dettagli

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

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ Heap e Heapsort Algoritmi di ordinamento Insertion Sort Quicksort Heapsort Insertion Sort L

Dettagli

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmo di ordinamento sul posto che ha tempo di esecuzione : QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : O(n2 ) nel caso peggiore O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior algoritmo

Dettagli

Alberi binari e alberi binari di ricerca

Alberi 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

Dettagli

Struttura dati astratta Coda

Struttura dati astratta Coda CODE Struttura dati astratta Coda La coda o queue è una struttura dati astratta in cui l'inserimento e l estrazione sono consentite solo in specifiche posizioni; in particolare, l'inserimento è consentito

Dettagli

Prova di Algoritmi e s.d. (1o anno) 7 Febbraio TESTO e RISPOSTE

Prova 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

Dettagli

ADT Coda con priorità

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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Algoritmi (9 CFU) (A.A ) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1

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

Dettagli

Liste concatenate e allocazione dinamica

Liste concatenate e allocazione dinamica Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide, e seguita

Dettagli

Ricerca in una sequenza ordinata

Ricerca in una sequenza ordinata Ricerca su array ordinata Ricerca in una sequenza ordinata Se la sequenza è ordinata posso sfruttare l ordinamento per rendere più efficiente la ricerca, terminando se l elemento corrente risulta maggiore

Dettagli

Orario delle lezioni LABORATORIO TEORIA. mercoledì. martedì aula P/4. lab Turing. Strutture Dati

Orario delle lezioni LABORATORIO TEORIA. mercoledì. martedì aula P/4. lab Turing. Strutture Dati Orario delle lezioni LABORATORIO martedì 15.00-18.00 TEORIA mercoledì 16.00 18.00 lab Turing aula P/4 Libro di testo Data Structures & Algorithms in Java Michael T. Goodrich Roberto Tamassia John Wiley

Dettagli

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

Informatica 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

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione

Dettagli

Algoritmi di ordinamento: Array e ricorsione

Algoritmi di ordinamento: Array e ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion

Dettagli

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola

Algoritmi 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

Dettagli

Strutture Dinamiche. Strutture Dinamiche

Strutture Dinamiche. Strutture Dinamiche Corso di Informatica A Vito Perrone 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato)); Crea in memoria una variabile

Dettagli

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: 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

Dettagli

Parte 4. Liste. P. Picasso Guernica, AA. 2015/16

Parte 4. Liste. P. Picasso Guernica, AA. 2015/16 Parte 4 Liste - AA. 2015/16 P. Picasso Guernica, 1937 4.1 4.2 Strutture dati complesse Per la risoluzione di alcuni problemi vi è la necessità di utilizzare strutture dati dinamiche e complesse Si consideri

Dettagli

Programmazione in Java Parte II

Programmazione in Java Parte II Programmazione in Java Parte II Lezione 7 Dott. Marco Faella Il Java Collection Framework Java Collection Framework (JCF) è una parte della libreria standard dedicata alle collezioni, intese come classi

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Inserimento in ordine

Dettagli

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

Organigramma 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

Dettagli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento

Dettagli

Alberi binari e alberi binari di ricerca

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

Dettagli