In questa lezione Strutture dati elementari: Pila Coda

Размер: px
Начинать показ со страницы:

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

Транскрипт

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

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,

Подробнее

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

Подробнее

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla [email protected] Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Ilaria Castelli [email protected] Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010

Подробнее

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

Подробнее

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 - [email protected] Introduzione Una coda (o queue) è una struttura dati astratta

Подробнее

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 [email protected] Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso

Подробнее

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)

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

Lezione 12 Tabelle Hash

Lezione 12 Tabelle Hash Lezione 12 Tabelle Hash Rossano Venturini [email protected] Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 2 ABR: Visita Scrivere un programma che legga

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla [email protected] Ultimo aggiornamento: 29 novembre 2010 1 Rotazioni semplici in ABR Si consideri l operazione di rotazione semplice applicata

Подробнее

Alberi Binari di Ricerca

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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 è

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее