L algoritmo di Dijkstra
|
|
|
- Gastone Abbate
- 9 anni fa
- Visualizzazioni
Transcript
1 L algoritmo di Dijkstra Sebastiano Vigna March 2, 200 Introduzione Supponiamo di assegnare a ciascuno degli archi a di un grafo orientato G un certo peso intero e positivo p a. Ai cammini (orientati) nel grafo (cioè sequenze di archi consecutivi) verrà a questo punto assegnato un peso, dato dalla somma dei pesi degli archi che lo compongono. Dati due nodi x e y, il problema del cammino minimo consiste nel fornire un cammino da x a y di peso minimo. Se tutti gli archi sono pesati (cioè p a = per ogni arco a) il problema si riduce a quello delle distanze minime, facilmente risolubile con una visita in ampiezza. Se però ci sono pesi diversi da, è facile rendersi conto che una visita in ampiezza non è sufficiente. Ad esempio, se nel grafo seguente vogliamo sapere qual è un cammino minimo dal nodo 0 al nodo, una visita in ampiezza a partire dal nodo 0 assegnerebbe immediatamente al nodo un cammino minimo di peso, e (nel caso migliore) al passo successivo un cammino di peso (attraverso il nodo ), ma, inevitabilmente, al momento di visitare il nodo assegneremmo al nodo un cammino di peso, mentre aspettando un po se ne sarebbe potuto trovare uno di peso inferiore passante per il nodo e il nodo. Per evitare fenomeni di questo tipo, è necessario visitare per primi i nodi che hanno cammini minimi da 0 più brevi. 2 L algoritmo di Dijkstra Edsger W. Dijkstra ha proposto nel 99 [] un algoritmo molto elegante che risolve questo problema. Vediamo innanzitutto come funziona l algoritmo in astratto forniremo poi diverse implementazioni con diversi compromessi tra efficienza, generalità e semplicità. L algoritmo di Dijkstra visita i nodi nel grafo, in maniera simile a una ricerca in ampiezza o in profondità. In ogni istante, l insieme N dei nodi del grafo è diviso in tre parti: l insieme dei nodi visitati V, l insieme dei nodi di frontiera F, che sono successori dei nodi visitati, e i nodi sconosciuti, che sono ancora da esaminare. Per ogni nodo z, l algoritmo tiene traccia di un valore d z, inizialmente posto uguale a, e di un nodo u z, inizialmente indefinito. Un successore di z è un nodo raggiungibile lungo un arco uscente da z.
2 L algoritmo consiste semplicemente nel ripetere il seguente passo: si prende dall insieme F un qualunque nodo z con d z minimo, si sposta z da F in V, si spostano tutti i successori di z sconosciuti in F, e per ogni successore w di z si aggiornano i valori d w e u w. L aggiornamento viene effettuato con la regola d w min{d w, d z + p a }, dove a è l arco che collega z a w. Se il valore di d w è stato effettivamente modificato, allora u w viene posto uguale z. La regola segue un idea piuttosto naturale: se sappiamo che con peso d z possiamo arrivare fino a z, allora arrivare a w non può costare più di arrivare a z e spostarsi lungo un arco fino a w. L aggiornamento di u w ci permette di ricordare che, al momento, il cammino di peso minimo che conosciamo per arrivare da x in w ha come penultimo nodo z. L algoritmo parte con V =, F = {x }, d x = 0 e prosegue finché y non viene visitato, o finché F = : in questo caso, y non è raggiungibile da x lungo un arco orientato. Se usciamo solo nel secondo caso, alla fine dell algoritmo d z contiene, per ogni nodo z, il peso di un cammino minimo da x a z; inoltre, il vettore u permette di ricostruire l albero dei cammini minimi con origine in x. Mostriamo il funzionamento dell algoritmo sull esempio che abbiamo visto all inizio, e supponiamo di voler trovare il cammino minimo da 0 a. La configurazione iniziale è quindi d: 0 u:?????? Al primo passo, il nodo 0 viene visitato (nella figura, viene barrato), mentre e 2 passano nella frontiera (denotata da un ulteriore cerchio attorno al nodo) d: 0 2 u:? 0 0? 0? Ora dobbiamo andare a prendere il nodo della frontiera che ha distanza minima da 0, e possiamo vedere come l algoritmo di Dijkstra risolva i problemi posti da una visita in ampiezza: essendo i nodi e molto distanti da 0 (in termini di cammini di peso minimo), prima visitiamo il nodo, il che ha l effetto di aggiornare d, d, u e u : d: u:? 0 0? 2
3 Ancora una volta, invece di scegliere i nodi aggiunti inizialmente alla frontiera, proseguiamo con quello che ha d minimo, cioè 2. L effetto è solo quello di spostare il nodo tra quelli visitati, dato che per l unico successore (il nodo ) conosciamo già un cammino di peso minimo migliore di quello che passerebbe per il nodo 2: d: u:? 0 0? Visitiamo ora il nodo, aggiornando nuovamente d e u : A questo punto visitiamo il nodo d: u:? 0 0? d: u:? 0 0 e la visita successiva ci dirà che esiste un cammino minimo da 0 e di distanza : inseguendo i puntatori all indietro in u il cammino risulta in effetti essere 0,,,,. Per dimostrare che l algoritmo funziona correttamente, bisogna dimostrare che a ogni passo vengono mantenute le seguenti proprietà:. i nodi in F sono tutti e soli i successori non ancora visitati di nodi visitati (cioè sono i successori di nodi in V, a parte quelli già in V ); 2. per ogni nodo z in V, d z è il peso di un cammino minimo da x in z; inoltre, uno dei cammini minimi ha come penultimo nodo u z ;. per ogni nodo z in F, d z è il peso minimo di un cammino di x in z che passa solo per nodi in V, ad esclusione di z stesso; inoltre, un tale cammino ha come penultimo nodo u z. Le proprietà sono vere in maniera ovvia al primo passo, ed è anche banale che la proprietà () rimanga sempre vera dopo il primo passo. Dobbiamo innanzitutto mostrare che quando spostiamo un nodo z con d z minimo da F in V, d z è il peso di un cammino minimo da x a z. Infatti, se per assurdo ci fosse un cammino di peso inferiore d, esso dovrebbe partire da x, viaggiare entro V, passare per qualche nodo z in F diverso da z (altrimenti la proprietà ()
4 sarebbe violata), e infine arrivare in z. Ma allora il cammino da x a z avrebbe peso inferiore a d z, e quindi d z < d z, contrariamente a quanto assunto. Quindi la proprietà (2) è ancora verificata. Dobbiamo ora dimostrare che () rimane vera. Per i nodi in F che non sono successori di z, la proprietà rimane ovviamente vera, perché l aggiunta di z a V non ha generato nuovi cammini che li raggiungono entro V. Per gli altri nodi, la regola di aggiornamento di d e u fa sì che la proprietà () rimanga vera. Concludiamo che non appena y cade dentro V, possiamo fermare l algoritmo e restituire d y come peso di un cammino minimo. Inoltre, per costruire un cammino minimo ci basta inseguire all indietro i puntatori u y, u u y, ecc., fino a x. Dato che qualunque porzione di un cammino di peso minimo è a sua volta un cammino di peso minimo (o potremmo sostituire la porzione con una di peso minore, ottenendo un cammino complessivo più breve), in questo modo ricostruiremo un cammino minimo da x a y. Infine, se prima che y cada dentro V succede che F =, allora la proprietà () garantisce che non ci sono altri nodi raggiungibili da x, e che, in particolare, y non è raggiungibile da x. Implementazioni Per semplificare un esempio di implementazione, assumiamo un limite superiore MAXV al numero di vertici, e calcoliamo solo d, tralasciando u (le modifiche per calcolare anche u sono banali).. Matrice di adiacenza Le strutture dati in gioco sono le seguenti: int n; int G[MAXV][MAXV]; int d[maxv]; char v[maxv]; dove G è la matrice di adiacenza pesata, n il numero di nodi e v è un vettore di booleani che serve a marcare i nodi visitati (d è il vettore delle distanze). La prima implementazione è quella immediata: a ogni passo scandiamo il vettore d e cerchiamo, tra i nodi non visitati, quello con d minimo. A questo punto scandiamo la riga corrispondente della matrice di adiacenza e aggiorniamo d per tutti i successori del nodo scelto: for(i=0; i<n; i++) d[i] = INT_MAX; d[x] = 0; for(;;) { for(m=int_max, i=0; i<n; i++) if (!v[i] && d[i] <= m) m = d[j = i]; v[j] = ; if (j == y m == INT_MAX) break; for(i=0; i<n; i++) if (G[j][i] && d[i] > d[j] + G[j][i])
5 } d[i] = d[j] + G[j][i]; La complessità di questo algoritmo è O ( n 2), dato che nel caso peggiore y viene raggiunto per ultimo, e quindi dobbiamo eseguire n passi, ciascuno dei quali richiede O(n) iterazioni..2 Liste di adiacenza Per migliorare le prestazioni dell algoritmo su grafi sparsi, cioè in cui il numero di archi a è molto più piccolo di n 2 (per esempio, per i grafi planari è lineare in n) rappresentati tramite liste di adiacenza, è possibile utilizzare una coda con priorità. In una coda normale (come quella utilizzata per le visite in ampiezza) il primo nodo inserito è anche il primo a essere rimosso. In una coda con priorità, invece, ogni nodo viene inserito con una priorità associata, e il nodo rimosso è quello di priorità maggiore. A questo punto la ricerca del minimo ha un costo pari all estrazione dell elemento di priorità massima dalla coda, e l aggiornamento dei valori di d, essendo effettuato una sola volta per ogni arco, è dato da a volte il costo di inserimento nella coda o di aggiornamento di priorità. Come vedremo, è possibile implementare una coda con priorità in modo che qualunque operazione sia logaritmico nel numero di elementi della coda. Dato che la coda non contiene mai più di n elementi, l algoritmo richiede complessivamente O(a log n) operazioni, e se a = o ( n 2 / log n ) risulta vantaggioso. In questo caso, le strutture dati sono int n; struct arc { struct arc *next; int v; int w; }; struct arc *adj[maxv]; int d[maxv]; char v[maxv]; La struttura del grafo viene memorizzata costruendo una lista di successori per ogni nodo (la lista indica anche il peso dell arco di collegamento). La coda con priorità mette a disposizione le seguenti operazioni: void enqueue(int v, int p); /* Aggiunge v con priorità p */ int dequeue(void); /* Rimuove e restituisce il nodo con massima priorità */ void update(int v, int p); /* Aggiorna la priorità di v a p; se v non è nella coda, lo inserisce */ int empty(void); /* Controlla se la coda è vuota */ Per semplicità, anche se questo non è completamente pulito, assumiamo che le operazioni sulla coda manipolino direttamente d. Ovviamente, la priorità è più alta quanto più d è piccolo. L algoritmo a questo punto è semplicissimo:
6 for(i=0; i<n; i++) d[i] = INT_MAX; enqueue(x, 0); while(!empty()) { j = dequeue(); p = adj[j]; } while(p) { update(p->v, d[j] + p->w); p = p->next; } La complessità dell algoritmo è in effetti scaricata sulla coda con priorità, la cui implementazione (tutt altro che banale) tramite uno heap viene descritta con cura in un altra dispensa. References [] Edsger W. Dijkstra. A note on two problem in connexion with graphs. Numerische Mathematik, :29 27, 99.
Cammini minimi fra tutte le coppie
Capitolo 12 Cammini minimi fra tutte le coppie Consideriamo il problema dei cammini minimi fra tutte le coppie in un grafo G = (V, E, w) orientato, pesato, dove possono essere presenti archi (ma non cicli)
Algoritmi e strutture dati
Algoritmi e Strutture Dati Cammini minimi Definizioni Sia G = (V,E) un grafo orientato pesato sugli archi. Il costo di un cammino π = è dato da: Un cammino minimo tra una coppia di
Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Grafi: visite Una breve presentazione Visite di grafi Scopo e tipi di visita Una visita (o attraversamento) di un grafo G permette di esaminare i nodi e gli archi di G in modo sistematico Problema di base
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
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
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
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
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
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,
11.4 Chiusura transitiva
6 11.4 Chiusura transitiva Il problema che consideriamo in questa sezione riguarda il calcolo della chiusura transitiva di un grafo. Dato un grafo orientato G = hv,ei, si vuole determinare il grafo orientato)
Grafi (orientati): cammini minimi
Grafi (orientati): cammini minimi Una breve presentazione Definizioni Sia G=(V,E) un grafo orientato con costi w sugli archi. Il costo di un cammino π= è dato da: Un cammino minimo tra
Esercizi proposti 10
Esercizi proposti 10 In questo gruppo di esercizi assumiamo, dove non sia specificato diversamente, di rappresentare i grafi mediante liste di archi, con il tipo di dati così dichiarato: type a graph =
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
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)
Alberi di copertura. Mauro Passacantando. Dipartimento di Informatica Largo B. Pontecorvo 3, Pisa
Alberi di copertura Mauro Passacantando Dipartimento di Informatica Largo B. Pontecorvo, Pisa [email protected] M. Passacantando TFA 0/ - Corso di Ricerca Operativa Università di Pisa / 9 Definizioni
UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013
A UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa Seconda prova intermedia 7 giugno 0 Nome: Cognome: Matricola: Orale /06/0 ore aula N Orale 0/07/0 ore aula N
Grafi pesati Minimo albero ricoprente
Algoritmi e Strutture Dati Definizioni Grafi pesati Minimo albero ricoprente Sia G=(V,E) un grafo non orientato e connesso. Un albero ricoprente di G è un sottografo T G tale che: T è un albero; T contiene
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Capitolo 12 Grafi e visite di grafi Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione Un grafo G=(V,E) consiste in: - un insieme V di vertici (o nodi) - un insieme
Algoritmi e strutture dati
Algoritmi e strutture dati Roberto Cordone A. A. 2015-16 Capitolo 4 Implementazioni delle partizioni Nota: queste dispense sono un rapido riassunto delle lezioni svolte nel dicembre 2015 e gennaio 2016.
Possibile applicazione
p. 1/4 Assegnamento Siano dati due insiemi A e B entrambi di cardinalità n. Ad ogni coppia (a i,b j ) A B è associato un valore d ij 0 che misura la "incompatibilità" tra a i e b j, anche interpretabile
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
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
Minimo albero di copertura
apitolo 0 Minimo albero di copertura efinizione 0.. ato un grafo G = (V, E) non orientato e connesso, un albero di copertura di G è un sottoinsieme T E tale che il sottografo (V, T ) è un albero libero.
Cammini minimi. Definizioni. Distanza fra vertici. Proprietà dei cammini minimi. Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Definizioni Sia G=(V,E) un grafo orientato con costi w sugli archi. Il costo di un cammino π= è dato da: Cammini minimi Un cammino minimo tra una coppia di
2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1
. Cammini ottimi E. Amaldi Fondamenti di R.O. Politecnico di Milano .. Cammini minimi e algoritmo di Dijkstra Dato un grafo orientato G = (N, A) con una funzione di costo c : A c ij R e due nodi s e t,
Introduzione. Il routing permette la comunicazione tra due nodi differenti anche se non sono collegati direttamente
Routing Introduzione Il livello 3 della pila ethernet ha il compito di muovere i pacchetti dalla sorgente attraversando più sistemi Il livello di network deve quindi: Scegliere di volta in volta il cammino
Programmazione dinamica
Programmazione dinamica Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Programmazione
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
Fondamenti di Internet e Reti 097246
sul livello di Rete Instradamento. o Si consideri la rete in figura.. Si rappresenti, mediante un grafo, la rete per il calcolo dei cammini minimi (solo i nodi e gli archi no reti). Si calcoli il cammino
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
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
Progettazione di Algoritmi
Corso di laurea in Informatica Prova scritta del: Progettazione di Algoritmi 0/06/06 Prof. De Prisco Inserire i propri dati nell apposito spazio. Non voltare la finché non sarà dato il via. Dal via avrai
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
Grafi: definizioni e visite
Grafi: definizioni e visite Grafi (non orientati) Grafo (non orientato): G = (V, E) V = nodi (o vertici) E = archi fra coppie di nodi distinti. Modella relazioni fra coppie di oggetti. Parametri della
Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione
Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica (IN0 Fondamenti) Grafi e alberi: introduzione Marco Liverani ([email protected])
Branch-and-bound per KNAPSACK
p. 1/1 Branch-and-bound per KNAPSACK Rispetto allo schema generale visto in precedenza dobbiamo specificare: come si calcola un upper bound su un sottinsieme; come si effettua il branching; come si individuano
Esercizi per il corso di. Logistica I. a.a Daniela Favaretto. Dipartimento di Matematica Applicata Università Ca Foscari di Venezia
sercizi per il corso di Logistica I a.a. - aniela avaretto ipartimento di Matematica pplicata Università a oscari di Venezia sercizio Individuare un albero di supporto di lunghezza minima (SST) sul seguente
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,
Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015
1 Lunedí 20 Aprile 2015 1 Istituto di Analisi dei Sistemi ed Informatica IASI - CNR Rilassamento di un problema Rilassare un problema di Programmazione Matematica vuol dire trascurare alcuni (tutti i)
Il problema del commesso viaggiatore
Il problema del commesso viaggiatore Mauro Passacantando Dipartimento di Informatica Largo B. Pontecorvo 3, Pisa [email protected] M. Passacantando TFA 2012/13 - Corso di Ricerca Operativa Università
4c. Esercizi sul livello di Rete Instradamento in Internet
c. sul livello di Rete Instradamento in Internet c- o Si consideri la rete in figura. Si rappresenti, mediante un grafo, la rete per il calcolo dei cammini minimi (solo i nodi e gli archi no reti). Si
UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 20 giugno 2014
A Ricerca Operativa 1 Seconda prova intermedia Un tifoso di calcio in partenza da Roma vuole raggiungere Rio De Janeiro per la finale del mondiale spendendo il meno possibile. Sono date le seguenti disponibilità
Progettazione di Algoritmi
Corso di laurea in Informatica Prova scritta del: Progettazione di Algoritmi 29/01/2016 Prof. De Prisco Inserire i propri dati nell apposito spazio. Non voltare la finché non sarà dato il via. Dal via
PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE
PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE 1 ALGORITMO, PROGRAMMA, PROCESSO Algoritmo Procedimento logico che deve essere eseguito per risolvere un determinato problema. Programma Descrizione di un
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
Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che:
Esercizi su Python 14 maggio 2012 1. Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che: 1. conti quanti elementi pari sono presenti nella lista; 2. conti quanti quadrati
In questa lezione Strutture dati elementari: Pila Coda
In questa lezione Strutture dati elementari: Pila Coda 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni che li modificano (insiemi dinamici). Le
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
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
Problema del trasporto
p. 1/1 Problema del trasporto Supponiamo di avere m depositi in cui è immagazzinato un prodotto e n negozi che richiedono tale prodotto. p. 1/1 Problema del trasporto Supponiamo di avere m depositi in
Routing IP. IP routing
Routing IP IP routing IP routing (inoltro IP): meccanismo per la scelta del percorso in Internet attraverso il quale inviare i datagram IP routing effettuato dai router (scelgono il percorso) Routing diretto
Introduzione al Metodo del Simplesso. 1 Soluzioni di base e problemi in forma standard
Introduzione al Metodo del Simplesso Giacomo Zambelli 1 Soluzioni di base e problemi in forma standard Consideriamo il seguente problema di programmazione lineare (PL), relativo all esempio di produzione
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
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
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
Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla
Camil Demetrescu Irene Finocchi Giuseppe F. Italiano Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla Indice 1 Un introduzione informale agli algoritmi 1 2 Modelli di calcolo e metodologie di
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
Codice Gray. (versione Marzo 2007)
Codice Gray (versione Marzo 27) Data una formula booleana con n variabili, per costruire una tavola di verità per questa formula è necessario generare tutte le combinazioni di valori per le n variabili.
1 Definizione di sistema lineare omogeneo.
Geometria Lingotto. LeLing1: Sistemi lineari omogenei. Ārgomenti svolti: Definizione di sistema lineare omogeneo. La matrice associata. Concetto di soluzione. Sistemi equivalenti. Operazioni elementari
Cercare il percorso minimo Ant Colony Optimization
Cercare il percorso minimo Ant Colony Optimization Author: Luca Albergante 1 Dipartimento di Matematica, Università degli Studi di Milano 4 Aprile 2011 L. Albergante (Univ. of Milan) PSO 4 Aprile 2011
A.A CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5.
A.A. 2015-2016. CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5. Esercizio 5.1. Determinare le ultime tre cifre di n = 13 1625. (Suggerimento. Sfruttare il Teorema di Eulero-Fermat)
Dati e Algoritmi 1: A. Pietracaprina. Grafi (II parte)
Dati e Algoritmi 1: A. Pietracaprina Grafi (II parte) 1 Breath-First Search (algoritmo iterativo) Si assume una rappresentazione tramite liste di adiacenza. L ordine con cui si visitano i vicini di un
Sommario. Rappresentazione dei grafi. Ordinamento topologico. Visita in ampiezza Visita in profondità
Visite Grafi Sommario Rappresentazione dei grafi Visita in ampiezza Visita in profondità Ordinamento topologico Visita in ampiezza La visita in ampiezza breadth-first-search (BFS) di un grafo dato un vertice
Progettazione di Algoritmi
Corso di laurea in Informatica Prova scritta del: Progettazione di Algoritmi 1/01/016 Prof. De Prisco Inserire i propri dati nell apposito spazio. Non voltare la finché non sarà dato il via. Dal via avrai
Tracce. 1. Data una lista di elementi di tipo intero, implementare in C++ le seguenti funzioni
Algoritmi e Strutture Dati Tracce 1. Data una lista di elementi di tipo intero, implementare in C++ le seguenti funzioni int freq(list &L, int k): restituisce il numero di occorrenze dei multipli
Informatica Generale Homework di Recupero 2016
Informatica Generale Homework di Recupero 016 docente: Ivano Salvo Sapienza Università di Roma Gruppo 1 Esercizio 1.1 Scrivere un programma C che presi in input due interi positivi a ed b (a, b > 0) calcola
CONSIGLI PER LA RISOLUZIONE DEI CIRCUITI ELETTRICI
CONSIGLI PER L RISOLUZIONE DEI CIRCUITI ELETTRICI In questa lezione lo scopo è quello di mostrare che, con i principi e i teoremi proposti, si possono ottenere i risultati richiesti. Per mostrare l efficacia
Riassumiamo le proprietà dei numeri reali da noi utilizzate nel corso di Geometria.
Capitolo 2 Campi 2.1 Introduzione Studiamo ora i campi. Essi sono una generalizzazione dell insieme R dei numeri reali con le operazioni di addizione e di moltiplicazione. Nel secondo paragrafo ricordiamo
Convergenza del Simplesso e regole anti-ciclaggio
Convergenza del Simplesso e regole anti-ciclaggio degenerazione e ciclaggio un esempio di ciclaggio regole anti-ciclaggio rif. Fi 3.2.6, BT 3.4 (Esempio 3.6), BT 3.7; Sulla convergenza del metodo del simplesso
PROGRAMMAZIONE: Le strutture di controllo
PROGRAMMAZIONE: Le strutture di controllo Prof. Enrico Terrone A. S: 2008/09 Le tre modalità La modalità basilare di esecuzione di un programma è la sequenza: le istruzioni vengono eseguite una dopo l
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
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
Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura
Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura [email protected] 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina
2.2 Alberi di supporto di costo ottimo
. Alberi di supporto di costo ottimo Problemi relativi ad alberi hanno numerose applicazioni: progettazione di reti (comunicazione, teleriscaldamento,...) memorizzazione compatta di sequenze (DNA) diffusione
Esercizi di Matematica per la prova di ammissione alla Scuola Galileiana /16
Esercizi di Matematica per la prova di ammissione alla Scuola Galileiana - 015/16 Esercizio 1 Per quali valori n Z \ {0} l espressione è un numero intero positivo? (n + 5)(n + 6) 6n Soluzione. Il problema
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
