In questa lezione Strutture dati elementari: Pila Coda

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "In questa lezione Strutture dati elementari: Pila Coda"

Transcript

1 In questa lezione Strutture dati elementari: Pila Coda 1

2 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni che li modificano (insiemi dinamici). Le operazioni sono descritte sulla base del loro effetto. Esempio La struttura dati in cui si ha un insieme di elementi con le operazioni di inserimento, che ha come risultato quello di aggiungere una nuova elemento di cancellazione, che ha come effetto quello di eliminare un dato elemento dall insieme, se presente di ricerca di una elemento, che fornisce la possibilità di recuperare un dato elemento nell insieme, se presente, e ne segnala l assenza altrimenti è chiamata dizionario (dictionary) 2

3 strutture dati (astratte): i dati Gli elementi su cui si vogliono eseguire queste operazioni spesso sono complessi, sono oggetti rappresentati in memoria con strutture con molti campi. Assumeremo che un campo in particolare, la chiave (key), è quella su cui effettuiamo le nostre operazioni. Se infatti assumiamo che le chiavi sono tutte diverse, allora abbiamo a che fare con un insieme. Gli altri dati dell oggetto sono chiamati dati satellite (satellite data). 3

4 strutture dati lineari Si tratta di collezioni in cui gli elementi sono organizzati in sequenza, come in una lista Python. Gli elementi si possono inserire o prelevare solo a una delle due estremità della lista. Questo tipo di restrizioni caratterizza il tipo di dato astratto, per esempio in una pila gli elementi sono prelevati e aggiunti ad un solo estremo della sequenza. 4

5 Pila (stack) Una pila è un insieme dinamico di dati in cui la cancellazione è vincolata a un elemento particolare: l ultimo inserito. solo l elemento in cima è accessibile!! L ultimo ad essere inserito è il primo ad essere estratto: Last In First Out. 5

6 Operazioni Le operazioni fondamentali (di interfaccia) sono: push che inserisce un elemento in cima (top) alla pila pop che estrae l elemento in cima alla pila Esempio: Ogni browser ha uno stack, che viene usato quando si vuole tornere indietro all ultima pagina visitata prima della corrente. Ogni volta che si apre una nuova pagina, il suo indirizzo va nello stack (push). Quando si torna indietro si estrae dalla pila l ultimo indirizzo inserito (pop). Volendo si possono riesaminare tutte le pagine aperte nell ordine contrario a quello di apertura. 6

7 Operazioni - 2 Oltre alle operazioni fondamentali push, che inserisce un elemento in cima (top) alla pila e pop, che estrae l elemento in cima alla pila, si definiscono le operazioni pilavuota che dà true se la pila è vuota, false altrimenti top che dà l elemento in cima, senza estrarlo 7

8 Implementazione Per utilizzare una struttura dati astratta è necessario fornire un implementazione, cioè scegliere come rappresentare i dati (la struttura dati concreta) e definire gli algoritmi per i calcoli relativi alle operazioni. In programmazione il concetto di interfaccia viene usato per nascondere l implementazione e consentire l uso delle funzionalità in modo indipendente dall implementazione, esattamente come avviene per i tipi di dati elementari come i numeri interi. 8

9 Strutture dati astratte e concrete In generale il processo è il seguente: 1. si definisce la struttura dati astratta 2. si sceglie la struttura dati concreta con cui rappresentare i dati in memoria 3. si definiscono gli algoritmi che realizzano gli obiettivi specificati nelle funzioni. Array e liste concatenate sono le strutture dati concrete più usate nell implementazione di una pila 9

10 Il problema delle parentesi ben bilanciate Consideriamo l insieme delle parentesi ben bilanciate, cioè di stringhe di parentesi, di tre tipi, in cui ogni parentesi aperta ha la sua corrispondente chiusa e tutte sono propriamente annidate. Per esempio le seguenti sono ben bilanciate: ([({})[]]) (({[]})()) ([((()){[]})()]) mentre le seguenti NO (([({)[]])} ())) ([]{}(() 10

11 Uso uno stack? Consideriamo il problema di stabilire se una stringa in input è una sequenza di parentesi ben bilanciata. Per definizione una sequenza è ben bilanciata se ogni aperta ha una sua chiusa corrispondente e se sono correttamente annidate. Guardando a questo esempio x = ([({})[]]) leggendo da sinistra a destra ogni volta l ultima aperta sospesa è la prima a essere accoppiata. Dunque serve uno stack! 11

12 l algoritmo in bozza Alg Verificaparentesi(x) input: x è un espressione aritmetica, prec: le parentesi che occorrono in x sono del tipo: (,[,{ postc: restituisce vero se le parentesi in x sono ben bilanciata, falso altrimenti Si impilano le aperte e si eliminano dalla cima dello stack le aperte in corrispondenza di ogni chiusa della stesso tipo. Quindi quando si considera un carattere c: se c è una parentesi aperta viene impilato se c è una parentesi chiusa, viene confrontato con l aperta in cima alla pila e se risultano dello stesso tipo si esegue una pop 12

13 Esempio di uso dello stack: l algoritmo Alg Verificaparentesi(x) crea una pila vuota; leggi il primo carattere di x e mettilo in c finchè ci sono caratteri da leggere in x se c non è una parentesi, passa al carattere successivo se c è una parentesi aperta, esegui una push di c nella pila altrimenti %c è una parentesi chiusa se la pila è vuota, restituisci false altrimenti %la pila non è vuota, salva l elemento in cima in d e esegui una pop se la parentesi aperta d e quella chiusa c sono dello stesso tipo, leggi il successivo carattere e mettilo in c altrimenti restituisci false se la pila è vuota, restituisci true altrimenti restituisci false La pila in ogni passo di esecuzione del ciclo contiene le parentesi aperte non accoppiate con una chiusa fino a quel passo. Ogni parentesi aperta viene inserita ed estratta dalla pila una sola volta, quindi T(n) = Θ(n), inoltre l algoritmo usa uno spazio lineare per la coda 13

14 Esempio di esecuzione x = ( [ ] { { [ ] } ( ) } ) x[0] = ( va conservata, quindi push di ( x[1] = [ va conservata, quindi push di [ x[2] = ] chiude x[1] : pop x[3], x[4] e x[5] vanno conservate, [ quindi si eseguono i relativi push x[6] = ] chiude x[5] : pop ( ( ( [ { { ( { { ( { ( ( { ( { ( x[7] = } chiude x[4] : pop x[8] = ( va conservata, quindi push di ( L evoluzione della pila x[9] = ) chiude x[8] : pop x[10] = } chiude x[3] : pop x[11] = ) chiude x[0] : pop 14

15 Coda Una coda è un insieme dinamico di dati in cui la cancellazione è vincolata a un elemento particolare: il primo inserito. solo il primo elemento inserito è accessibile Il primo ad essere inserito è il primo ad essere estratto: First In First Out 15

16 Le operazioni Ogni coda ha un inizio, la testa (head) della coda, e una fine (tail). Le operazioni sono: Accoda (Enqueue): inserisce un elemento alla fine della coda, (tail) estrazione (Dequeue): cancella l elemento in testa alla coda, (head) front:dà, senza estrarlo l elemento in testa alla coda codavuota: dà true se la coda è vuota, false altrimenti 16

17 APPLICAZIONE DELLA CODA: VISITA PER LIVELLI DI UN ALBERO BINARIO 1 Livello Livello Livello 2 4 Livello 3 Si vuole visitare i nodi su ogni livello da sinistra a destra e in ordine discendente di livello. Risultato visita:

18 VISITA PER LIVELLI DI UN ALBERO BINARIO 1 Livello Livello Livello Livello 3 10 Livello 4 Risultato visita: Osserviamo che se per esempio abbiamo visitato 6 il prossimo da visitare è suo fratello ma il successivo è il figlio del primo nodo sul suo livello. Allora se man mano che si visita un livello si tiene memoria degli eventuali figli, cioè dei nodi del livello successivo, il primo memorizzato è il primo da estrarre. Quindi serve una coda! 18

19 Cosa fare in un passo generico Alg VisitaPerLivelli(T) //T è un albero binario postc: stampa la sequenza dei nodi di T per livelli da sinistra a destra. In un generico passo, potremmo trovarci alla fine di un livello i e nella necessità di stampare i nodi del livello successivo, partendo da sinistra. Quindi bisogna che quei nodi del livello i +1 siano stati accodati nell ordine da sinistra verso destra, e l unica possibilità di farlo è nel quando si stampa il loro padre. Quindi l azione da fare sul nodo in esame è la sua stampa e l accodamento dei suoi figli. Infine un nodo stampato non serve più e quindi deve essere tolto dalla coda Nodi nella coda prima della stampa di 7 Nodi nella coda dopo la stampa di 7 Q= Q=

20 Cosa fare in un passo generico 1 Una situazione del tutto analoga si verifica se consideriamo un passo intermedio in cui ci troviamo su un generico nodo di un livello. Infatti quel nodo va stampato e tolto dalla coda, che deve contenere i restanti nodi di quel livello, ancora da stampare, e anche i figli dei nodi già stampati. Inoltre bisogna accodare i figli del nodo tolto e stampato Nodi nella coda prima della stampa di 5 Q= Nodi nella coda dopo la stampa di 5 Q=

21 Visita per livelli: l'algoritmo la coda contiene i tutti i nodi di un livello oppure i nodi dal k-simo fino all ultimo di un livello e tutti i nodi del livello successivo figli dei nodi alla sinistra del k-simo. In ogni caso i nodi sono nell ordine da sinistra verso destra. Alg VisitaPerLivelli(T) //T è un albero binario postc: stampa la sequenza dei nodi di T per livelli da sinistra a destra. Q è una coda inizialmente vuota accoda in Q il nodo radice, se l'albero è non vuoto while la coda non è vuota do y = dequeue(q) stampa y if il figlio sinistro,x, di y è presente then Enqueue(Q,x) if se il figlio destro,x, di y è presente then Enqueue(Q,x) N.B. L algoritmo è formulato in modo da prescindere dalla rappresentazione in memoria di T, nel senso che la struttura che rappresenta un nodo potrebbe contenere, oltre al campo chiave, due o tre campi puntatore. 21

22 Visita per livelli: esempio di esecuzione 1 Contenuto coda all inizio: Nodo estratto e stampato: Nodo estratto e stampato: Nodo estratto e stampato: Nodo estratto e stampato: Nodo estratto e stampato: Nodo estratto e stampato: 9 4 Nodo estratto e stampato: 4 22

23 Visita per livelli: analisi Alg VisitaPerLivelli(T) //T è un albero binario postc: stampa la sequenza dei nodi di T per livelli da sinistra a destra. Q è una coda inizialmente vuota accoda in Q il nodo radice, se l'albero è non vuoto while la coda non è vuota do y = dequeue(q) stampa y if il figlio sinistro,x, è presente then Enqueue(Q,x) if se il figlio destro,x, è presente then Enqueue(Q,x) Ogni nodo viene inserito ed estratto dalla coda una sola volta, quindi T(n) = Θ(n) 23

24 Esercizi Es Mostrate come implementare una pila usando due code. Bisogna definire le operazioni Top,push e pop usando enqueue e dequeue. Si analizzi la complessità asintotica delle operazioni push e pop in questa nuova implementazione. Es Mostrate come implementare una coda usando due pile. Bisogna definire le operazioni enqueue e dequeue usando push e pop. Si analizzi la complessità asintotica delle operazioni enqueue e dequeue in questa nuova implementazione. 24

25 Calcolare lo Span di un array di numeri Dato un array X, lo span S[i] di X[i] è il massimo numero di elementi consecutivi X[j] immediatamente precedenti e tali che X[j] X[i] quindi il minimo span di X[i] è 1, perché lui stesso conta Esempio: X= S= In altri termini S[i] = i - j se X[j] > X[i] e X[j+1],,X[i-1],X[i] X[i] 25

26 Un Algoritmo per calcolare lo span Algorithm span1(x) Input:array X di n interi, con indici da 0 Output: array S di span di X crea un nuovo array di n elementi for i = 0 to n-1 s=1 while (s i and X[i-s] X[i]): s = s+1 S[i] = s return S Nel caso peggiore per ogni i esamino tutti i precedenti. Allora il ciclo esterno comporta l esecuzione di (n 1) istruzioni Algoritmo span1 ha complessità O(n 2 ) 26

27 Analisi del problema S[i] = s se X[i-s],,X[i-1], X[i] X[i] e X[i-(s+1)]>X[i] X[m] X[k] X[j] X[i] X[k-1] X[m+1] X[k+1] X[j-1] X[j+1] X[i-1] m m+1 k-1 k k+1 j-1 j j+1 i-1 i Supponiamo che X[j], X[k], X[i] e anche che X[j+1] X[j+2] X[i] mentre X[j] > X[j+1] X[k+1] X[k+2] X[j] e X[k] > X[k+1] X[m+1] X[m+2] X[k] e X[m] > X[m+1] m è l indice del primo elemento verso destra tale che X[m] > X[i]. Per definizione sappiamo che S[i] = i - m 27

28 Analisi del problema: caso X[i+1] X[i] S[i] = s se X[i-s],,X[i-1], X[i] X[i] e X[i-(s+1)]>X[i] X[m] X[k] X[j] X[i+1] X[m+1] X[k-1] X[k+1] X[j-1] X[j+1] X[i-1] X[i] m m+1 k-1 k k+1 j-1 j j+1 i-1 i i+1 S[i+1] = S[i] + S[j] +S[k] perché se X[j+1] X[j+2] X[i], già S[i] tiene conto degli elementi da X[j+1] a X[i], che sono tutti più piccoli di X[j], così come S[k] per gli elementi da X[k+1] a X[j]. Essendo X[m] > X[i+1], è m l indice sul quale fermare la somma 28

29 Analisi del problema: caso X[i+1]<X[i] S[i] = s se X[i-s],,X[i-1], X[i] X[i] e X[i-(s+1)]>X[i] X[m] X[k] X[j] X[k-1] X[m+1] X[k+1] X[j-1] X[j+1] X[i-1] X[i] X[i+1] m m+1 k-1 k k+1 j-1 j j+1 i-1 i i+1 S[i+1] = 1 perché se X[i+1] < X[i] l unico elemento minore o uguale a X[i+1] è X[i+1] stesso. 29

30 Passo di calcolo, quando X[i+1] X[i] S[i] = s se X[i-s],,X[i-1], X[i] X[i] e X[i-(s+1)]>X[i] X[m] X[k] X[j] X[i+1] X[k-1] X[m+1] X[k+1] X[j-1] X[j+1] X[i-1] X[i] m m+1 k-1 k k+1 j-1 j j+1 i-1 i i+1 S[i+1]=S[i] + S[j] +S[k] Ci servirebbe conoscere j,k e m per poter confrontare X[i+1] con X[j], X[k] e X[m]. Se impilassimo l indice h quando consideriamo X[h] e lo estraessimo dalla pila se X[h+1] > X[h], nel nostro esempio nella pila dovremmo avere, quando consideriamo i+1 e prima di ogni confronto, gli indici i,j,k,m con i in cima. Se eliminassimo dalla pila gli indici corrispondenti a elementi minori o uguali a X[i+1], rimarremmo con m in cima alla pila e potremmo porre S[i+1] = i+1 - m, semplicemente perché questo è il numero degli elementi compresi tra gli indici m+1 e i+1 (i+1-(m+1) + 1 = i+1-m), che ora sappiamo sono tutti quelli più piccoli, consecutivi e immediatamente precedenti a X[i+1]. 30

31 Passo di calcolo, quando X[i+1]<X[i] S[i] = s se X[i-s],,X[i-1], X[i] X[i] e X[i-(s+1)]>X[i] X[m] X[k] X[j] X[k-1] X[m+1] X[k+1] X[j-1] X[j+1] X[i-1] X[i] X[i+1] m m+1 k-1 k k+1 j-1 j j+1 i-1 i i+1 Nella pila ci sono i,j,k,m con i in cima, ma X[i+1] < X[i], per cui i non deve essere tolto dalla pila (più avanti potrei incontrare un elemento maggiore). Sappiamo che S[i+1] deve essere 1, e possiamo ottenerlo sempre usando l elemento in cima alla pila perché S[i+1] = i+1 - i = 1 31

32 L algoritmo in bozza Quando prendiamo in considerazione l elemento di indice i: 1. eliminiamo dalla pila gli indici j tali che X[i] X[j] 2. se la pila è vuota si pone S[i] = i+1 3. altrimenti S[i] = i h, dove h è l indice in cima alla pila, 4. si impila i La correttezza segue da quanto visto prima, infatti esaminiamo i vari casi: se la pila è vuota si danno due casi 1. all inizio e allora S[0] =1, 2. considerando X[i], tutti gli indici impilati sono stati eliminati dalla pila, quindi erano tutti relativi ad elementi minori o uguali a quello che si sta considerando, dunque S[i] = i+1. altrimenti la cima della pila contiene l indice, h, del primo elemento da destra maggiore di X[i] e quindi S[i] = i-h 32

33 Algoritmo2 per span Algorithm span2(x, n) sia S un array of n interi sia A una pila vuota for i = 0 to n 1 do while (not A.isEmpty() and X[A.top()] X[i] ) do A.pop() if A.isEmpty() then S[i] = i + 1 all inizio S[0] = 1, e se la pila si svuota vuol dire che tutti i precedenti sono minori o uguali a X[i] else A.push(i) return S S[i] = i A.top() X[A.top()] > X[i] N.B. : A.top() è l elemento in cima alla pila A A.pop() elimina dalla pila A l elemento in cima A.push(x) inserisce x come elemento in cima alla pila A A.isEmpty() dà true se A è vuota, false altrimenti 33

34 É lineare? Algorithm span2(x, n) sia S un array of n interi sia A una pila vuota for i = 0 to n 1 do while (nota.isempty() and X[A.top()] X[i] ) do A.pop() if A.isEmpty() then S[i] = i + 1 else S[i] = i A.top() A.push(i) return S Ogni indice dell array è impilato ed eventualmente tolto dalla pila una volta sola. Quindi il ciclo for esterno è eseguito al più n volte. L algoritmo span2 ha tempo di esecuzione asintotico O(n), e necessita di spazio O(n), per la pila. 34

Il problema delle azioni

Il problema delle azioni Il problema delle azioni Per studiare l andamento del mercato azionario bisogna seguire i prezzi delle azioni in un lasso di tempo abbastanza lungo, diciamo n giorni. Se si dispone dei prezzi di un azione

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

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

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

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it 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

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

Note per la Lezione 4 Ugo Vaccaro

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

Dettagli

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza

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

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

Fondamenti di Informatica II

Fondamenti di Informatica II Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Tipi di dati astratti(adt)- seconda parte Coda Struttura

Dettagli

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto Argomenti della lezione Introduzione agli Algoritmi e alle Strutture Dati Operazioni su Liste Dr. Emanuela Merelli Tipi di Dato Astratto Lista Lineare Pila Coda Concetto di Struttura dati dinamiche Lista

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario

Dettagli

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; } Liste con sentinella Un ulteriore semplificazione delle operazioni sulle liste si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine e l inizio

Dettagli

Analisi ammortizzata (Tarjan in 1985)

Analisi ammortizzata (Tarjan in 1985) In questa lezione Analisi della complessità di una sequenza di operazioni di estrazione e inserimento in una tabella memorizzata su un array, usando l analisi ammortizzata. Analisi ammortizzata (Tarjan

Dettagli

In questa lezione Alberi binari di ricerca: la cancellazione

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

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010

Dettagli

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

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2 INDICI MULTILIVELLO DINAMICI Indici multilivello dinamici (B-alberi e B + -alberi) Gli indici multilivello dinamici (B-alberi e B + -alberi) sono casi speciali di strutture ad albero. Un albero è formato

Dettagli

Grafi: visita generica

Grafi: visita generica .. Grafi: visita generica Una presentazione alternativa (con ulteriori dettagli) Algoritmi di visita Scopo: visitare tutti i vertici di un grafo (si osservi che per poter visitare un vertice occorre prima

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 09 ADT: Lista, Pila, Coda A. Miola Marzo 2007 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti Tipo

Dettagli

La struttura dati CODA

La struttura dati CODA Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta

Dettagli

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste Sequenze Sommario Le strutture dati elementari per implementare sequenze: Vettori Liste Strutture dati elementari Le strutture dati vettore e lista sono fra le strutture dati più usate e semplici Il loro

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

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

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte) ADT: Abstract Data Type I tipi di dati astratti (I parte) Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Scopo Livello di astrazione sui dati tale da mascherare completamente

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

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

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

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

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

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

Introduzione agli algoritmi Prova di esame del 30/6/2016 Prof.sse E. Fachini - R. Petreschi B Introduzione agli algoritmi Prova di esame del 30/6/2016 Prof.sse E. Fachini - R. Petreschi Si consideri l operazione di inserimento in un AVL. Si supponga di trovarsi nel caso in cui una rotazione a

Dettagli

Problemi, istanze, soluzioni

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

Dettagli

Introduzione agli Algoritmi ed alle Strutture Dati Anno Accademico 2015/2016 Appello 23/6/2016

Introduzione agli Algoritmi ed alle Strutture Dati Anno Accademico 2015/2016 Appello 23/6/2016 1. Indicare quali delle seguenti affermazioni sono vere e quali sono false. a. n 3 = Θ (n 3log n ) b. n! = Ω(n n ) c. log n = Θ (log( n 2 )) d. n 3 =Ω(n) e. 9 log 3 n = Θ (n) 2. Si dimostri in modo formale

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

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

Università degli Studi di L Aquila Facoltà di Scienze M.F.N. Corso di Laurea in Informatica. Modulo di Laboratorio di Algoritmi e Strutture Dati Università degli Studi di L Aquila Facoltà di Scienze M.F.N. Corso di Laurea in Informatica Modulo di Laboratorio di Algoritmi e Strutture Dati Alberi binari Giovanna Melideo melideo@di.univaq.it 1 Alberi

Dettagli

Lezione 6 Le pile. Informatica. 28 Aprile 2016

Lezione 6 Le pile. Informatica. 28 Aprile 2016 Lezione 6 Le pile Informatica 28 Aprile 2016 Il porto di Anversa Il terminal del porto merci di Anversa usa delle gru a cavaliere per movimentare i container: I container arrivano per nave e vengono messi

Dettagli

PILE E CODE. Pile (stack):

PILE E CODE. Pile (stack): PILE E CODE Sono tipi di dato che consentono di rappresentare sequenze di elementi in cui gli inserimenti e le cancellazioni sono eseguiti con particolari modalita` (politiche o discipline). Pile (stack):

Dettagli

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

Alberi. Se x è il genitore di y, allora y è un figlio di x. Un albero binario è un albero in cui ogni nodo ha al massimo due figli. Alberi Un albero è un insieme di oggetti, chiamati nodi, su cui è definita una relazione binaria G(x, y) che leggiamo x è genitore di y tale che: 1. esiste un unico nodo, chiamato radice, che non ha genitori;

Dettagli

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica AlgoBuild: Strutture selettive, iterative ed array Prof. Arcangelo Castiglione A.A. 2016/17 AlgoBuild : Strutture iterative e selettive OUTLINE Struttura selettiva Esempi Struttura

Dettagli

Alberi Binari di Ricerca

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

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

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

Dettagli

Implementazione ADT: Alberi

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

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

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di

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

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 29 novembre 2010 1 Rotazioni semplici in ABR Si consideri l operazione di rotazione semplice applicata

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Prof. G. M. Farinella gfarinella@dmi.unict.it www.dmi.unict.it/farinella Riferimenti Bibliografici Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms, Third Edition,

Dettagli

Progettazione di algoritmi

Progettazione di algoritmi Progettazione di algoritmi Discussione dell'esercizio [palindroma] Dobbiamo trovare un algoritmo efficiente che data una stringa s di n caratteri trova la più lunga sottostringa di s che sia palindroma.

Dettagli

Laboratorio di Informatica

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

Dettagli

Pile: implementazioni. Pile. Pile: liste /1. Pile: liste /2. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche

Pile: implementazioni. Pile. Pile: liste /1. Pile: liste /2. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche Pile Prof. Stefano Guerrini guerrini@di.uniroma1.it Programmazione II (can. P-Z) A.A. 2005-06 Pile: implementazioni Liste

Dettagli

I Tipi di Dato Astratto

I Tipi di Dato Astratto I Tipi di Dato Astratto Sommario Cosa sono le Strutture Dati Astratte? Le strutture dati Le operazioni Come scegliere fra varie implementazioni? Quale è la questione? Come organizzare (strutturare) i dati

Dettagli

Progettazione di algoritmi

Progettazione di algoritmi Progettazione di algoritmi Discussione dell'esercizio [labirinto] Nel testo dell'esercizio abbiamo considerato come lunghezza del percorso il numero di bivi ma possiamo stimare meglio la lunghezza reale

Dettagli

Esempi. non. orientato. orientato

Esempi. non. orientato. orientato Definizione! Un grafo G = (V,E) è costituito da un insieme di vertici V ed un insieme di archi E ciascuno dei quali connette due vertici in V detti estremi dell arco.! Un grafo è orientato quando vi è

Dettagli

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

Dettagli

Contenitori: Pile e Code

Contenitori: Pile e Code Contenitori: Pile e Code D O T T. I N G. L E O N A R D O R I G U T I N I D I PA R T I M E N T O I N G E G N E R I A D E L L I N F O R M A Z I O N E U N I V E R S I T À D I S I E N A V I A R O M A 5 6 5

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

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3 Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali

Dettagli

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

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: Ordered search table Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: possiamo memorizzare le entrate di D in un array list S in ordine non decrescente di chiavi:

Dettagli

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

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

Dettagli

Esempio: rappresentare gli insiemi

Esempio: rappresentare gli insiemi Esempio: rappresentare gli insiemi Problema: rappresentare gli insiemi Vedremo che la scelta della rappresentazione per implementarli non è così ovvia come era stato per i numeri razionali In realtà ci

Dettagli

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso Laboratorio di Informatica Esercitazione su algoritmi e diagrammi di flusso Algoritmi, programmi e dati Algoritmo = insieme di istruzioni che indicano come svolgere operazioni complesse su dei dati attraverso

Dettagli

Problema del cammino minimo

Problema del cammino minimo Algoritmi e Strutture di Dati II Problema del cammino minimo Un viaggiatore vuole trovare la via più corta per andare da una città ad un altra. Possiamo rappresentare ogni città con un nodo e ogni collegamento

Dettagli

Sistemi Web per il turismo - lezione 3 -

Sistemi Web per il turismo - lezione 3 - Sistemi Web per il turismo - lezione 3 - Software Si definisce software il complesso di comandi che fanno eseguire al computer delle operazioni. Il termine si contrappone ad hardware, che invece designa

Dettagli

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 12 Array e Oggetti A. Miola Dicembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Array e Oggetti 1 Contenuti Array paralleli

Dettagli

Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive

Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di

Dettagli

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero);

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero); Heap Heap scenario Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero); Voglio poter: inserire: nuovi elementi, ciascuno con una data priorità

Dettagli

Analisi asintotica della complessità di tempo degli algoritmi

Analisi asintotica della complessità di tempo degli algoritmi Analisi asintotica della complessità di tempo degli algoritmi Due esempi di funzioni di Python: 1. nel primo mettiamo in evidenza l importanza di una buona organizzazione dei dati in memoria, cioè di una

Dettagli

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

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

Dettagli

Ordinamenti per confronto: albero di decisione

Ordinamenti per confronto: albero di decisione Ordinamenti per confronto: albero di decisione Albero di decisione = rappresentazione grafica di tutte le possibili sequenze di confronti eseguite da un algoritmo assegnato di ordinamento per confronto

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

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

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

Dettagli

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl Approfondimento 2.1 Non è questo il testo dove trattare esaurientemente queste tecniche semantiche. Ci accontenteremo di dare un semplice esempio delle tecniche basate sui sistemi di transizione per dare

Dettagli

Laboratorio di algoritmi e strutture dati

Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati mercoledì 26 novembre 2008 L obiettivo di questo esercitazione è sperimentare definizione, implementazione e uso del tipi di dati astratti.

Dettagli

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output F = { (s, s ) } per ogni s esiste una e una sola coppia (s, s ). Esempio: un algoritmo che calcola il quadrato di

Dettagli

Tipi di dato strutturati: Array

Tipi di dato strutturati: Array Tipi di dato strutturati: Array I dati visti finora sono: numeri (interi o razionali), booleani le stringhe (sequenze di caratteri) ma i dati manipolati nelle applicazioni reali sono spesso complessi (o

Dettagli

Scope, Memoria e Tabella dei Simboli

Scope, Memoria e Tabella dei Simboli Scope, Memoria e Tabella dei Simboli La tabella dei simboli è uno strumento fondamentale attraverso il quale interpreti e compilatori implementano la traduzione da un programma scritto in un linguaggio

Dettagli

Programmazione Funzionale

Programmazione Funzionale 1/11 Programmazione Funzionale Esercizi in preparazione dell esame Davide Mottin - Themis Palpanas May 28, 2014 Svolgimento d esame Inferire il tipo di un espressione Esercizi sul lambda-calcolo Esercizi

Dettagli

Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi

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

Dettagli

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Operazioni sulle liste Definiamo una serie di procedure e funzioni per operare sulle liste. Usiamo liste di interi per semplicità, ma tutte le operazioni sono realizzabili in modo del tutto analogo su

Dettagli

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste 4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1

Dettagli

Liste, Pile e Code. 1. L ADT Lista. Liste Pile e Code Pag. 1/18

Liste, Pile e Code. 1. L ADT Lista. Liste Pile e Code Pag. 1/18 Liste Pile e Code Pag. 1/18 Liste, Pile e Code Le liste, le pile e le code rappresentano tre ADT elementari che ricorrono frequentemente nella vita reale. Esempi usuali di una lista, una pila ed una coda

Dettagli

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi Informatica Generale Andrea Corradini 12 - Gli algoritmi e la risoluzione di problemi Sommario Che significa risolvere un problema? Algoritmi e programmi Rappresentazione di algoritmi Lo pseudocodice Primitive

Dettagli

Stringhe e allocazione dinamica della memoria

Stringhe e allocazione dinamica della memoria Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per

Dettagli

Alberi binari. Esercizi su alberi binari

Alberi binari. Esercizi su alberi binari Alberi binari Definizione della struttura dati: struct tree int dato; struct tree *sx, *dx; ; typedef struct tree tree; Esercizi su alberi binari 1. Scrivere una funzione che cerchi un intero k all'interno

Dettagli

Algoritmi e Strutture Dati. HeapSort

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

Dettagli

Da infissa a Postfissa

Da infissa a Postfissa Da infissa a Postfissa Facciamo vedere come si può convertire un'espressione aritmetica infissa in una equivalente postfissa, come secondo esempio di uso della pila e per completare il nostro primo caso

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

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

Strutture dati per insiemi disgiunti (union-find)

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

Dettagli

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

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 Dudo Frodo Daisy Alberi Gli alberi sono una generalizzazione

Dettagli

Informatica 1. Prova di recupero 21 Settembre 2001

Informatica 1. Prova di recupero 21 Settembre 2001 Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo

Dettagli

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Dettagli

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Programmazione a blocchi. Algobuild Prof. Sergio Roselli Programmazione a blocchi Algobuild Prof. Sergio Roselli Blocchi base Inizio programma I Fine programma F Input IN A Output Esecuzione OUT A A = 5 + 1 L interprete Algobuild Algobuildpermette di trascrivere

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla

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

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy

Dettagli

Individuazione di sottoproblemi

Individuazione di sottoproblemi Individuazione di sottoproblemi Quando il problema è complesso conviene partire con una individuazione di sottoproblemi Scriviamo un algoritmo contenente azioni o condizioni complesse per l esecutore che

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