AUSILIO DIDATTICO IN EXCEL-VISUAL BASIC PER IL RICAVO DEI CAMMINI DI COSTO MINIMO CON L'ALGORITMO DI FORD-MOORE-BELLMAN

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "AUSILIO DIDATTICO IN EXCEL-VISUAL BASIC PER IL RICAVO DEI CAMMINI DI COSTO MINIMO CON L'ALGORITMO DI FORD-MOORE-BELLMAN"

Transcript

1 Università degli studi di Padova Facoltà di Ingegneria Dipartimento di tecnica e gestione dei sistemi industriali Corso di laurea in Ingegneria Gestionale Tesi di laurea di Primo Livello AUSILIO DIDATTICO IN EXCEL-VISUAL BASIC PER IL RICAVO DEI CAMMINI DI COSTO MINIMO CON L'ALGORITMO DI FORD-MOORE-BELLMAN Relatore: Ch.mo Prof. GIORGIO ROMANIN JACUR Laureando: ENRICO SPERINDIO ANNO ACCADEMICO

2 Sommario 1. INTRODUZIONE TEORIA DEI GRAFI I grafi: notazione e nomenclatura Grafi, nodi, archi Cammini, cicli Alberi Rappresentazione di grafi Matrici di incidenza Matrici di adiacenza Liste di adiacenza CAMMINI MINIMI Il problema L algoritmo SPT Algoritmi a coda di priorità Algoritmi a selezione su lista L ALGORITMO DI FORD-MOORE-BELLMAN Storia L algoritmo La versione di Pape Esempio IMPLEMENTAZIONE IN EXCEL Interfaccia utente Strutture dati La classe Deque L algoritmo Note BIBLIOGRAFIA APPENDICE A: CODICE COMMENTATO... 30

3 1. INTRODUZIONE 3 1. INTRODUZIONE La tesi affronta il tema dei cammini minimi su grafi, con particolare riferimento all algoritmo di Ford-Bellman-Moore. Tale problema è stato affrontato dal punto di vista strettamente pratico, attraverso la realizzazione in Microsoft Excel di un programma che, elaborando i dati inseriti dall utente, permette di ottenere la soluzione del problema in maniera immediata. Il tutto s inquadra nella classe di problemi trattati dalla Ricerca operativa detti di ottimizzazione, ossia problemi in cui alle soluzioni ammissibili è associato un costo e si vuole determinare la soluzione che minimizza o massimizza tale costo. Questo tipo di problemi, e in particolare quello trattato sui cammini minimi, sono stati oggetto di ampi studi in periodi relativamente recenti (seconda metà del novecento), spinti evidentemente dalla proliferazione delle reti di calcolatori e dello sviluppo dei circuiti elettronici, campi in cui gli algoritmi preposti a offrire soluzioni efficienti a questa classe di problemi trovano maggiore applicazione. Alcuni esempi di applicazione sono: Pianificazione urbana del traffico Rotta ottima per i trasporti su strada in presenza anche di congestioni dovute al traffico Protocolli di routing (OSPF, BGP, RIP) Pipelining nei circuiti elettronici a larga scala d integrazione Navigazione dei robot Schedulazione degli operatori per il telemarketing Gestione delle subroutine negli algoritmi di alto livello Smistamento messaggi nelle telecomunicazioni La prima parte dell elaborato è più teorica e riporta, nel capitolo 2, i fondamenti della teoria dei grafi e nel capitolo 3 i concetti e le metodologie legate al problema dei cammini minimi. Nei capitoli 4 e 5 viene descritto l algoritmo di Ford-Moore-Bellman e la sua implementazione in Excel. In appendice è riportato il codice in Visual Basic.

4 Cammini minimi con l algoritmo di Ford-Moore-Bellman 4 2. TEORIA DEI GRAFI 2.1. I grafi: notazione e nomenclatura Un grafo,,, è una coppia ordinata di insiemi: è un insieme finito e non vuoto di elementi, mentre è un insieme finito di coppie di elementi distinti di Grafi, nodi, archi è detto insieme dei nodi (o vertici), e usualmente viene indicato mediante i primi numeri naturali: 1,2,,. L insieme, detto insieme degli archi, è in generale indicato con,,, ( ). Nel seguito un arco verrà indifferentemente denotato o da un nome che lo individua, ad esempio, oppure da una coppia di nodi, ad esempio, ; se la coppia non è ordinata, cioè, e, rappresentano lo stesso arco, allora l arco è detto non orientato, altrimenti è detto orientato e in tal caso, e, rappresentano due archi diversi. I nodi e sono detti estremi dell arco,, che è incidente in essi; in questo caso si dirà che i nodi e sono adiacenti. Se l arco è orientato, allora è la coda e è la testa di, ; l arco è uscente da ed entrante in. Un grafo i cui archi sono tutti non orientati è detto non orientato o simmetrico, ed è detto orientato se tutti i suoi archi sono orientati. In un certo senso i grafi orientati sono una generalizzazione dei grafi non orientati: infatti un arco non orientato può essere rappresentato per mezzo di una coppia di archi orientati, come indicato in figura 2.1. In figura 2.2 sono rappresentati un non grafo orientato (a) e un grafo orientato (b). Nel seguito pertanto i principali concetti verranno dati principalmente in termini di grafi orientati poiché la loro estensione ai grafi non orientati è in genere immediata. Figura 2.1. Equivalenza tra un arco non orientato ed una coppia di archi orientati Figura 2.2. Esempio di grafi

5 2. TEORIA DEI GRAFI 5 Una rete è un grafo ai cui nodi e/o archi sono associati dei pesi. Tali pesi possono avere significati diversi secondo il contesto; ad esempio, se il grafo rappresenta una rete idraulica, i pesi associati agli archi possono rappresentare la portata o il flusso, mentre i pesi associati ai nodi possono rappresentare la quantità di acqua immessa nella rete o da essa estratta. I grafi rappresentano la struttura topologica delle reti; nel seguito tuttavia si farà uso indifferentemente dei termini grafo o rete. Dato un grafo non orientato, per ogni nodo, si indica con l insieme dei nodi adiacenti a e con l insieme degli archi incidenti in ; è detto grado del nodo ed è indicato con. Dato un grafo orientato, per ogni nodo, si indica con e rispettivamente l insieme dei nodi successori e l insieme dei nodi predecessori: :,, :, ; mentre con e si indicano rispettivamente l insieme degli archi uscenti da e l insieme degli archi entranti in :, :,, :. e sono detti rispettivamente grado uscente e grado entrante di Cammini, cicli Dato un grafo orientato, un cammino tra il nodo e il nodo è una sequenza di nodi e di archi,,,,,,,,, in cui per ogni 1,,, è incidente in e. Se, per 1,, è,, allora è un cammino orientato da a. Il nodo è detto l origine e è detto la destinazione di. Una sottosequenza di è detta sottocammino. Se, è detto un ciclo (eventualmente orientato). Un cammino (ciclo) non contenente cicli come sottocammini (propri) è detto un cammino (ciclo) semplice (eventualmente orientato). Nei cammini (cicli) che non sono semplici vi è ripetizione di nodi; essi possono avere anche ripetizione di archi. Quando non s ingenerano equivoci, un cammino può essere descritto mediante la sola sequenza dei suoi nodi o dei suoi archi. Due nodi e sono connessi se esiste un cammino tra di essi; in un grafo orientato si dice che è connesso a i se esiste un cammino orientato da a. Un grafo connesso è un grafo in cui tutte le coppie di nodi sono connesse, altrimenti è detto non connesso. Un grafo fortemente connesso è un grafo orientato in cui per ogni coppia di nodi, si ha che è connesso a, cioè esiste un cammino orientato da a, e è connesso a. Un grafo si definisce planare se può essere raffigurato in un piano in modo che non si abbiano spigoli che s intersecano Alberi Un grafo connesso privo di cicli è detto albero. Un albero,, con, è tale che 1. Sono equivalenti alla precedente le seguenti definizioni: un albero è un grafo connesso con 1 archi; un albero è un grafo privo di cicli con 1 archi.

6 Cammini minimi con l algoritmo di Ford-Moore-Bellman 6 Un albero radicato è un albero in cui sia stato selezionato un nodo, detto radice dell albero; in un tale albero i nodi possono essere ordinati per livelli in modo ricorsivo. Ogni arco di un albero radicato connette due nodi appartenenti a livelli adiacenti. Per ciascun arco, con a livello e a livello 1, è detto padre di e questo figlio di ; la radice non ha padre. Nodi aventi lo stesso padre sono detti fratelli. Un nodo senza figli è detto foglia dell albero radicato. Esiste un solo cammino tra la radice e qualsiasi nodo dell albero. Un albero radicato, i cui archi sono orientati, è detto orientato o arborescenza, se tutti i suoi archi sono orientati dal padre verso il figlio (o dal figlio verso il padre). Dato un grafo non orientato,, un suo grafo parziale, che sia un albero è detto albero di copertura di ; è detto albero di copertura orientato o arborescenza nel caso il grafo sia orientato Rappresentazione di grafi Esistono diversi modi per rappresentare un grafo. Se da un lato la rappresentazione grafica è il metodo più immediato e interpretabile all occhio umano, vi è la necessità di strutture tali da poter essere gestite dal calcolatore e manipolate dai vari algoritmi Matrici di incidenza Dato un grafo orientato,, la sua matrice di incidenza è una matrice (le righe corrispondono ai nodi e le colonne agli archi), così definita: 1, è, 1, è, 0,. La matrice di incidenza ha due soli elementi diversi da 0 per ogni colonna: un 1 e un 1. Un esempio di matrice di incidenza è riportato in figura 2.3. Ovviamente a ogni arco può essere associato il relativo peso, solitamente riportato in alto alla matrice. Figura 2.3. Un grafo e la sua matrice di incidenza Matrici di adiacenza La matrice di adiacenza A di un grafo è una matrice in cui ogni riga e ogni colonna rappresentano un nodo. Si ha che:

7 2. TEORIA DEI GRAFI 7 1 se esiste un arco tra il nodo e il nodo, 0,. Qualora al posto degli 1 sia indicato un numero, questo è da intendersi come il peso (costo) dell arco. Nel caso di grafi non orientati la matrice è simmetrica rispetto alla diagonale. Questa rappresentazione è conveniente nel caso di grafi densi ( ). Figura 2.4: Un grafo e la sua matrice di adiacenza Liste di adiacenza La lista di adiacenza di un grafo è un vettore di liste: il vettore ha dimensione e rappresenta i nodi del grafo, ogni lista associata rappresenta l insieme dei vicini del nodo. Da notare come l ordine degli elementi della lista non sia importante. Inoltre nel caso di grafi non orientati la rappresentazione di un arco appare due volte, ognuna in corrispondenza di uno dei nodi dell arco. Questa rappresentazione risulta conveniente nel caso di grafi sparsi ( ) e consente un efficiente memorizzazione dei grafi. Nell esempio in figura 2.3, la lista di adiacenza è 2,3, 4,5, 2,4,5, 5,6, 6,

8 Cammini minimi con l algoritmo di Ford-Moore-Bellman 8 3. CAMMINI MINIMI Diversi problemi di ottimizzazione sono caratterizzati da una struttura a grafo: in molti casi questa struttura emerge in modo naturale, in altri nasce dal particolare modo in cui i problemi vengono modellati. Ad esempio una rete stradale è naturalmente rappresentabile come un grafo in cui i nodi sono gli incroci e gli archi sono le strade; pertanto non è strano che il settore dei trasporti sia uno di quelli in cui la teoria dei grafi trova maggiore applicazione. In molti altri problemi, invece, la struttura di un grafo è più nascosta. In questo capitolo verrà studiato il problema dei cammini minimi su grafi (reti). Di esso si daranno le proprietà più importanti e verranno introdotti alcuni algoritmi risolutivi, senza entrare troppo nei dettagli implementativi e analizzare le numerose versioni proposte dai vari studiosi; per maggiori approfondimenti si rinvia alla letteratura avanzata nell area di Ricerca Operativa. I grafi considerati in questo capitolo sono, salvo diversa specificazione, grafi orientati. Nel caso della ricerca di cammini, infatti, è sempre possibile ricondursi con poca fatica a questo caso. Per fare questo è sufficiente sostituire ogni arco non orientato (e quindi percorribile in entrambi i versi) con due archi diretti in direzione opposta. Se esiste un cammino con le caratteristiche richieste nel grafo originario, allora esiste anche nel grafo trasformato e viceversa Il problema Si consideri il seguente problema di ottimizzazione su grafi detto dei cammini minimi o shortest paths: Dato un grafo orientato e pesato,, ovvero un grafo a cui ad ogni arco è associato un costo o peso o lunghezza, e dato un nodo, per ogni nodo, trovare il cammino da ad di costo minimo Risolvere il problema dei cammini minimi implica risolvere problemi tipo: o Internet è composta da un insieme di host e da un insieme di connessioni. Un host qualsiasi comunica con un host facendo fluire i propri dati lungo un cammino di connessioni. A ogni connessione è associato un costo. Determinare il cammino di costo minimo. o Una società di trasporti deve effettuare dei trasporti tra un insieme di città. Determinare i cammini di costo mimino tra tutte le coppie di città ove la funzione di costo è espressa dal tempo necessario per collegare la città con la città. Una soluzione ammissibile al problema dei cammini minimi consiste nel determinare 1 cammini, uno per ogni coppia di nodi, ognuno dei quali ha origine nel nodo e giunge ad uno dei rimanenti nodi del grafo. Condizioni necessarie perché esista una soluzione ammissibile sono: 1. Per ogni nodo, esista almeno un cammino che congiunga con. 2. Non esistano cicli di lunghezza negativa

9 3. CAMMINI MINIMI 9 Sotto queste ipotesi una soluzione ammissibile è un arborescenza di radice r, e la soluzione è una arborescenza di radice r di costo minimo. Dato un grafo,, orientato e pesato, sia arborescenza di costo minimo, ossia una soluzione ammissibile per il problema dei cammini minimi. A ogni nodo del grafo, diverso da (origine del cammino), è associata una quantità pari alla somma dei costi che appaiono sugli archi lungo un cammino da a in. Si definisce tale quantità come distanza e la denotiamo con. Le condizioni necessarie e sufficienti che devono essere verificate affinché sia una soluzione ottima sono contenute nel teorema di Bellman: Teorema. Una soluzione ammissibile è ottima se e solo se valgono le seguenti condizioni per ogni arco, : se, se, 3.2. L algoritmo SPT Le condizioni di ottimalità viste nel precedente paragrafo suggeriscono in modo naturale il seguente algoritmo per la determinazione di un albero dei cammini minimi: mediante una visita del grafo si determina un albero di copertura radicato e orientato (rappresentato dal vettore., il predecessore per ogni nodo) e le relative etichette, che rappresentano il costo dell unico cammino sull albero da a ; si controlla se esiste un arco, tale che ; in caso affermativo si modifica l albero togliendo l arco, e sostituendovi l arco, (ponendo ), si calcola il vettore delle etichette corrispondente al nuovo albero e si reitera; altrimenti l algoritmo termina avendo dimostrato che l albero corrente è ottimo (sono verificate le condizioni di Bellman). Per ottenere un algoritmo più efficiente è possibile differire l aggiornamento delle etichette. L algoritmo mantiene a ogni iterazione una soluzione ammissibile, rappresentata da un vettore di predecessori., una struttura, che indicheremo con, che contiene tutti i nodi i cui archi uscenti potrebbero violare le condizioni di Bellmann, e un vettore di etichette. in cui, in questo caso, rappresenta in generale un approssimazione superiore del costo dell unico cammino sull albero da a : all inizio, l albero è formato da archi fittizi, aventi costo molto grande ( e, per ).

10 Cammini minimi con l algoritmo di Ford-Moore-Bellman 10 Procedure SPT (r,p,d): begin for 1 to do begin ; d[i]:=m; end ; 0; : ; repeat select from ; \ ; for each, do if, then begin, ; ; if then end until end. Algoritmo SPT L algoritmo, che viene chiamato SPT, controlla se le condizioni di Bellman sono verificate, e ogni volta che trova un arco, per cui esse sono violate, cioè per cui, modifica la coppia, ponendo e. A seguito della diminuzione di, tutti gli archi uscenti da j possono violare le condizioni di Bellmann; viene detto per questo nodo candidato, e viene inserito in. Ad ogni iterazione si verifica se è vuoto: in questo caso l algoritmo termina avendo determinato una soluzione ottima. Altrimenti, si estrae un nodo da e si controlla se le condizioni di ottimalità valgono per ciascun arco della sua stella uscente. Per ogni arco, che non soddisfa le condizioni, si pone e l etichetta di viene aggiornata. Non si effettua però l aggiornamento delle etichette in tutti i nodi del sottoalbero di radice, ma s inserisce in : si effettua cioè un aggiornamento differito delle etichette. Si può dimostrare che, se il grafo non contiene cicli di costo negativo, la procedura SPT termina dopo un numero finito di passi. Se invece il grafo contiene un ciclo negativo (e almeno uno dei nodi del ciclo è raggiungibile da ), allora la procedura SPT non termina. L algoritmo SPT è un algoritmo molto generale il cui effettivo comportamento dipende dal modo con cui viene implementato l insieme dei nodi candidati. In effetti, a implementazioni diverse corrispondono comportamenti molto diversi in termini di complessità computazionale. Ad alto livello si può pensare a due scelte alternative: 1. è una coda di priorità, cioè un insieme in cui ogni elemento ha associato un valore (chiave), e la scelta dell elemento da estrarre avviene sulla base di questo valore; 2. viene implementato come una lista e la scelta dell elemento da estrarre è determinata dalla posizione dell elemento nella lista.

11 3. CAMMINI MINIMI Algoritmi a coda di priorità L insieme viene implementato come coda di priorità; a ogni elemento è cioè associata una chiave di priorità, che nel caso in esame è l etichetta, e la priorità di cresce al decrescere di. Le operazioni eseguibili su sono: inserimento di un elemento con l etichetta associata, modifica (riduzione) dell etichetta di un elemento di, selezione dell elemento con etichetta minima e sua rimozione da. Sia chiamata SPT.S (da Shortest-first) la versione di SPT in cui a ogni iterazione si estrae da un elemento a etichetta minima; l operazione select from ; viene realizzata come: select from such that : L algoritmo risultante è noto come algoritmo di Dijkstra, poiché descritto per la prima volta dall informatico olandese in [Dij59]. Vale il seguente teorema: Teorema. [Dijkstra, 1959] Nel funzionamento di SPT.S su grafi con costi non negativi, ogni nodo verrà inserito in (e rimosso da esso) al più una volta. Il fatto che un nodo non possa essere inserito in, e quindi estratto, più di una volta fa sì che il generico arco, posa essere esaminato al più una volta, cioè quando viene selezionato il nodo, e pertanto SPT.S ha complessità polinomiale. Si può invece dimostrare che, nel caso di costi negativi, l algoritmo opportunamente modificato per gestire questa evenienza ha complessità esponenziale, in quanto esistono alcuni grafi per i quali l algoritmo esegue un numero esponenziale di operazioni, come descritto in [Joh73]. È quindi ben chiaro il motivo per cui in tali situazioni esso non viene in pratica mai preso in considerazione. Sono possibili diverse implementazioni dell algoritmo SPT.S, che differiscono per il modo in cui è implementata la coda di priorità. La scelta dell implementazione di non cambia il comportamento dell algoritmo, ma ne influenza la complessità e l efficienza computazionale. La struttura originaria utilizzata per l algoritmo è una lista non ordinata; esempi di strutture più efficienti introdotte in seguito sono heap binari e di Fibonacci. L algoritmo di Dijkstra viene detto di tipo label setting: una alla volta le etichette sono rese definitive. Un etichetta diventa definitiva quando rappresenta l esatta lunghezza del cammino più breve cui si riferisce. In ciascun iterazione, come si è visto, esattamente una delle etichette viene selezionata e resa permanente, quella avente minima Algoritmi a selezione su lista In questi algoritmi l insieme viene implementato come una lista, cioè una sequenza di elementi su cui si possono effettuare operazioni di rimozione e inserzione alle estremità della sequenza, chiamate rispettivamente testa e coda della lista. Le operazioni elementari eseguibili sulle liste sono: inserimento di un elemento come nuova testa della lista, inserimento di un elemento come nuova coda della lista, rimozione dell elemento testa dalla lista.

12 Cammini minimi con l algoritmo di Ford-Moore-Bellman 12 Si noti che l aggiornamento dell etichetta di un nodo che appartiene a non influisce sulla posizione dell elemento nella lista, ossia non causa la rimozione del nodo da e il suo reinserimento in una posizione diversa (formalmente, questo corrisponde al controllo nell algoritmo SPT). Si distinguono diversi tipi di liste, tra cui hanno particolare rilevanza le seguenti: fila: l inserzione viene effettuata in coda e la rimozione dalla testa (regola FIFO); pila: l inserzione e la rimozione vengono effettuate in testa (regola LIFO); deque (double-ended queue) o lista a doppio ingresso: l inserzione viene effettuata sia in testa sia in coda e la rimozione solo dalla testa. Vengono indicate con SPT.L le versioni di SPT nelle quali l insieme è implementato come lista. La lista può essere realizzata in diversi modi (lista a puntatori, vettore di puntatori, lineare o circolare, semplice o doppia, ecc.), ed è sempre possibile fare in modo che le operazioni elementari abbiano complessità computazionale costante, 1. La complessità di SPT.L, anche nel caso di costi negativi, dipende quindi dal numero di controlli delle condizioni di Bellman sugli archi uscenti dai nodi estratti da. Di questo insieme di algoritmi fanno parte l algoritmo di Ford-Moore-Bellman e le relative varianti, che verranno descritte nel capitolo successivo.

13 4. L ALGORITMO DI FORD-MOORE-BELLMAN L ALGORITMO DI FORD-MOORE-BELLMAN 4.1. Storia Lo sviluppo dell algoritmo di Ford-Bellman-Moore si deve ai lavori svolti indipendentemente da L. R. Ford, E. F. Moore e R. Bellman verso la fine degli anni cinquanta. Lawler [Law76] presenta le equazioni di Bellman e il metodo di Bellman-Ford, con riferimento all articolo di Ford del 1956 [For56] e agli studi di Bellman del 1958 [1958]. Egli cita anche gli studi di Moore del 1957 [Moo59]. Tarjan [Tar83] introduce il metodo di Ford basato sulle etichette [For56], e poi un metodo di ricerca in ampiezza (breadth-first) basato sulle idee indipendenti di Bellman [Bel58] e Moore [Moo59]. Anche Deo e Pang [DP84] indicano questi tre articoli, affermando, Gli algoritmi che permettono di risolvere i problemi basati su una singola sorgente sono solitamente basati sui metodi proposti da Bellman [Bel58], Dijkstra [Dij59], Ford [For56] e Moore [Moo59]. La presentazione dettagliata dei tre articoli viene omessa (si rinvia alla bibliografia), tuttavia in figura 4.1 possiamo vedere la sintesi dei lavori derivanti dagli scritti di Bellman e Ford, che è effettivamente l algoritmo di Bellman-Ford come è conosciuto attualmente nella sua versione più semplice. In figura 4.2 è riportata una possibile implementazione di uno degli algoritmi in cui Moore tratta della selezione e dell ordine con cui vengono trattati nodi e archi. Anche se non esplicitamente specificato da Moore stesso, viene naturale l utilizzo di una struttura come una coda, come effettivamente previsto dall algoritmo di Bellman-Ford-Moore e dalle sue numerose varianti, dove alla procedura base si adattano strutture che permettono particolari criteri di selezione. %Le strutture dati per questo algoritmo sono un vettore d, un vettore pi, % ciascuno con un elemento per ogni v nell insieme dei vertici, e una % matrice w(i,j), dove ciascun elemento è la distanza dal nodo i al nodo j. %Inizializzazione do for each vertex v V d[v] pi[v] nil end do for each d[s] 0 %Elabora la distanza da s a tutti gli altri nodi v for k = 1 to the number of vertices minus 1 end for do for each edge(i,j) E if d[j] > d[i] + w(i,j) then d[j] d[i] + w(i,j) pi[j] i end if end do for each Figura 4.1. Tipico esempio di pseudo codice per l attuale algoritmo di Bellman-Ford

14 Cammini minimi con l algoritmo di Ford-Moore-Bellman 14 %Le strutture dati per questo algoritmo sono un vettore d, % un vettore ne come lista dei nodi adiacenti, e una coda q utilizzata % per l ordine con cui processare i nodi adiacenti a partire da s. % Inizializzazione dalla sorgente s for each node i from i = 1 to n do d[i] end do d[s] 0 %Inizializzazione della coda current-node-ptr 1 q[current-node-ptr] s %si inizia da s end-of-queue 2 %Elabora la distanza da s a tutti gli altri nodi do while current-node-ptr < end-of-queue node q[current-node-ptr] do for each neighbor in ne[node] if d[node] + w[node,neighbor] < d[neighbor] then d[neighbor] d[node] + w[node,neighbor] q[end-of-queue neighbor end-of-queue end-of-queue + 1 end if end do for each current-node-ptr current-node-ptr + 1 end do while Figura 4.2. Possibile implementazione dell algoritmo di Moore

15 4. L ALGORITMO DI FORD-MOORE-BELLMAN L algoritmo Tornando a quanto detto nel capitolo 3 si esamineranno ora gli algoritmi SPT.L, gli algoritmi cioè a selezione su lista. In particolare quando si realizza la lista Q come fila (queue) l inserzione dei nodi avviene in coda e la rimozione in testa (regola FIFO). Questo è esattamente il principio di funzionamento dell algoritmo di Ford-Moore-Bellman. In figura 4.3 è riportato lo pseudo-codice di tale algoritmo. Q := l[v] := p[v] := 0 l[s] := 0 p[s] := s EnQueue (s,q) while do u := DeQueue (Q) for each v Adj(u) do if l[v] > l[u] + d(u,v) then l[v] := l[u] + d(u,v) l[v] := u if v Q then EnQueue (v,q) endif endfor endwhile Figura 4.3. Algoritmo di Ford-Moore-Bellman L utilizzo di una strategia FIFO corrisponde a una visita a ventaglio del grafo (BFS, breadth-first search); si può dimostrare che tale strategia garantisce che, in assenza di cicli negativi, nessun nodo sia inserito più di 1 volte in, e quindi che il numero di volte che si esamina un nodo o un arco è limitato superiormente da. Siccome tutte le operazioni sui nodi (estrazione) sono implementabili in modo da avere complessità costante, la complessità della procedura nel peggiore dei casi è, ed è data dal massimo numero di volte che si esamina lo stesso arco 1 per il numero di archi. SPT.L con implementato come fila può essere utilizzata per controllare se un grafo possiede cicli negativi. Infatti poiché, in assenza di cicli negativi, un nodo non può essere estratto da più di 1 volte, è sufficiente contare il numero di estrazioni da di ciascun nodo: appena un nodo viene estratto per l -esima volta, si può affermare che quel nodo appartiene a un ciclo negativo. Il ciclo può poi essere percorso all indietro, a partire dal nodo trovato, per mezzo del predecessore.. Descrizione dell algoritmo: Si costruiscono 2 liste, quella delle lunghezze (si indica con la lunghezza del miglior cammino da a correntemente trovato) e quella dei predecessori (si indica con il predecessore di ).

16 Cammini minimi con l algoritmo di Ford-Moore-Bellman 16 PASSO 1. PASSO 2. PASSO 3. (Inizializzazione) 0 0 (Criterio di arresto) Se:,, Allora l algoritmo ha termine. In caso contrario, si va al passo 3. (Aggiornamento) Se, è tale che, allora si pone, Si torna al passo La versione di Pape Ai fini dell implementazione l ordine con cui vengono esaminati gli archi ha rilevanza per l efficienza dell algoritmo. Come approccio alternativo alla strategia FIFO appena vista sono state proposte diverse realizzazioni dell insieme come lista. Molto utilizzata è la lista a doppio ingresso, o deque, in cui o nodi sono inseriti in coda a la prima volta, mentre tutte le altre volte vengono inseriti in testa a. L algoritmo viene chiamato di Pape. (Figura 4.4) Più precisamente gli archi vanno scelti in questo modo: i. Come vertice iniziale dell arco viene scelto il primo vertice di un opportuna lista o coda. Cioè, se,,, allora si pone e si cancella dalla lista : \ ii. Si opera il confronto, per tutti i nodi adiacenti a. Se esiste un vertice tale che, allora, oltre a cambiare l etichetta del nodo s inserisce il nodo nella lista stessa (sempre che esso non sia già presente). Inizialmente si pone iii. L inserimento di in avviene secondo questa regola di natura euristica: se è la prima volta che viene inserito, esso deve essere posto in coda alla lista; se invece era già stato inserito in precedenza, allora si pone all inizio della lista stessa.

17 4. L ALGORITMO DI FORD-MOORE-BELLMAN 17 La motivazione per l uso di una deque risiede nel fatto che, se un nodo viene inserito in dopo essere stato precedentemente rimosso, la sua etichetta è stata utilizzata per aggiornare etichette di altri nodi, discendenti da nell albero corrente. Una nuova inserzione di in avviene poiché è stata diminuita; appare pertanto conveniente correggere quanto prima le etichette dei discendenti di (sia pure senza ricalcolare immediatamente tutte le etichette del sottoalbero), in modo da evitare il più possibile che vengano compiute iterazioni con valori delle etichette che rappresentano una cattiva approssimazione del valore reale del costo del cammino. Quest algoritmo in cui è implementata come deque ha però complessità esponenziale 2 ; esistono infatti grafi per i quali tale versione effettua un numero esponenziale di inserimenti e rimozioni di nodi da. Comunque, l analisi della complessità computazionale nel caso peggiore fornisce solo una misura di salvaguardia nella crescita del numero di operazioni: infatti, nei problemi reali in cui le reti sono abbastanza sparse ( ) questa variante ha un comportamento molto buono, anzi spesso risulta il più efficiente algoritmo per i cammini minimi. Ciò è particolarmente vero per reti stradali, in cui spesso si è osservato sperimentalmente che il numero medio di estrazioni di uno stesso nodo da è inferiore a 2. S := l[v] := p[v] := 0 v s l[s] := 0 p[s] := s EnQueue (s,q) while Q do u := DeQueue(Q) for each v Adj(u) do if l[v] > l[u] + d(u,v) then endif endfor endwhile if v Q then endif if D[v] = then else endif EnQueueB(v; Q) EnQueueF(v; Q) l[v] := l[u] + d(u,v) p[v] := u Figura 4.4. Versione di Pape, pseudocodice

18 Cammini minimi con l algoritmo di Ford-Moore-Bellman Esempio Si consideri il grafo orientato in figura 4.5 e si vogliano trovare i cammini minimi da agli altri nodi. Figura 4.5 L etichettatura iniziale è la seguente: nodo s a b c d 0 s Si pone ed il nodo viene cancellato da. Vengono esaminati gli archi uscenti da che sono, e,. Poiché, 0 7 si opera il seguente aggiornamento: 7 Poi, dato che, 0 5 Si opera il seguente aggiornamento: 5

19 4. L ALGORITMO DI FORD-MOORE-BELLMAN 19, L etichettatura così aggiornata è la seguente: nodo s a b c d s s 0 s 0 Si pone ora e si esaminano tutti gli archi uscenti da che sono, e,. Poiché, 7 5 e, 7 2 si aggiorna l etichettatura come segue: nodo s a b c d s s a s a,,. Si pone ora e si esaminano tutti gli archi uscenti da :, e,. Si ha:, e, e quindi non si aggiorna la tabella ma diventa,. Posto, si considerano gli archi:,,,,,,,. Si ha:, 2 1 0, 2 6 7, 2 2 5, La tabella viene aggiornata come segue: nodo s a b c d s s a b a

20 Cammini minimi con l algoritmo di Ford-Moore-Bellman 20 Il nodo va inserito nella lista. Tenuto conto che era già stato presente nella lista, va inserito al primo posto:,. Posto, si considerano gli archi, e,. Si ha:, 4 1 2, E quindi non si aggiorna la tabella ma diventa. Posto, si esamina l arco,. Si ha:, e quindi non si aggiorna la tabella. Poiché l algoritmo ha termine e l ultima tabella fornisce la soluzione ottima. L arborescenza minima di radice è rappresentata in figura 4.6. Figura 4.6

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza Il problema di flusso di costo minimo (MCF) Dati : grafo orientato G = ( N, A ) i N, deficit del nodo i : b i (i, j) A u ij, capacità superiore (max quantità di flusso che può transitare) c ij, costo di

Dettagli

Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini

Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini Introduzione all utilizzo di Visual Basic for Application Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini PROGRAMMAZIONE Insieme delle attività da svolgersi per creare

Dettagli

Esercizi Capitolo 5 - Alberi

Esercizi Capitolo 5 - Alberi Esercizi Capitolo 5 - Alberi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle

Dettagli

I tipi di dato astratti

I tipi di dato astratti I tipi di dato astratti.0 I tipi di dato astratti c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 001/00.0 0 I tipi di dato astratti La nozione di tipo di dato

Dettagli

Appunti di Algoritmi e Strutture Dati. Grafi. Gianfranco Gallizia

Appunti di Algoritmi e Strutture Dati. Grafi. Gianfranco Gallizia Appunti di Algoritmi e Strutture Dati Grafi Gianfranco Gallizia 12 Dicembre 2004 2 Indice 1 Grafi 5 1.1 Definizione.............................. 5 1.2 Implementazione........................... 5 1.2.1

Dettagli

Svantaggi della Commutazione di Circuito. Commutazione di Pacchetto. Struttura di un Pacchetto

Svantaggi della Commutazione di Circuito. Commutazione di Pacchetto. Struttura di un Pacchetto Università degli studi di Salerno Laurea in Informatica I semestre / Commutazione di Pacchetto Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Svantaggi della Commutazione

Dettagli

Struttura logica di un programma

Struttura logica di un programma Struttura logica di un programma Tutti i programmi per computer prevedono tre operazioni principali: l input di dati (cioè l inserimento delle informazioni da elaborare) il calcolo dei risultati cercati

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati schifano@fe.infn.it Laurea di Informatica - Università di Ferrara 2011-2012 [1] Strutture dati Dinamiche: Le liste Una lista è una sequenza di elementi di un certo tipo in cui è possibile aggiungere e/o

Dettagli

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione.

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione. Grafi ed Alberi Pag. /26 Grafi ed Alberi In questo capitolo richiameremo i principali concetti di due ADT che ricorreranno puntualmente nel corso della nostra trattazione: i grafi e gli alberi. Naturale

Dettagli

Livello di Rete. Prof. Filippo Lanubile. Obiettivo

Livello di Rete. Prof. Filippo Lanubile. Obiettivo Livello di Rete Circuiti virtuali e datagram La funzione di instradamento Costruzione della tabella di routing Algoritmi di routing adattivi: distance vector routing e link-state routing Routing gerarchico

Dettagli

Visual Basic for Applications (VBA) Francesco Brun Fondamenti di Informatica a.a. 2014/2015

Visual Basic for Applications (VBA) Francesco Brun Fondamenti di Informatica a.a. 2014/2015 Francesco Brun Fondamenti di Informatica a.a. 2014/2015 Scopo di questo approfondimento Lo scopo di questo approfondimento è rispondere alla domanda: e se nella vita mi troverò a dover utilizzare un linguaggio

Dettagli

16.3.1 Alberi binari di ricerca

16.3.1 Alberi binari di ricerca 442 CAPITOLO 16. STRUTTURE DI DATI DINAMICHE root 7 5 11 2 8 13 10 Figura 16.11 Esempio di albero binario: ogni nodo contiene il dato da immagazzinare e tre puntatori che definiscono le sue relazioni di

Dettagli

Corso di Visual Basic (Parte 8)

Corso di Visual Basic (Parte 8) Corso di Visual Basic (Parte 8) di MAURIZIO CRESPI Questo mese il corso di programmazione in Visual Basic focalizza la propria attenzione sulle procedure, talvolta dette subroutine L oggetto dell ottava

Dettagli

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona e e Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario e ed implementazione in Java Visita di un grafo e e Concetti di base Struttura

Dettagli

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

Dettagli

MATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010

MATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010 elementi di teoria dei grafi anno acc. 2009/2010 Grafi semplici Un grafo semplice G è una coppia ordinata (V(G), L(G)), ove V(G) è un insieme finito e non vuoto di elementi detti vertici o nodi di G, mentre

Dettagli

Programmazione in Excel con il linguaggio Visual Basic

Programmazione in Excel con il linguaggio Visual Basic Programmazione in Excel con il linguaggio Visual Basic L'ambiente di programmazione Il foglio elettronico Excel, così come gli altri prodotti Office di Microsoft, possiede un vero e proprio ambiente di

Dettagli

GESTIONE INFORMATICA DEI DATI AZIENDALI

GESTIONE INFORMATICA DEI DATI AZIENDALI GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming

Dettagli

Esercizi Capitolo 6 - Alberi binari di ricerca

Esercizi Capitolo 6 - Alberi binari di ricerca Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 23 settembre 200 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile

Dettagli

TSP con eliminazione di sottocicli

TSP con eliminazione di sottocicli TSP con eliminazione di sottocicli Un commesso viaggiatore deve visitare 7 clienti in modo da minimizzare la distanza percorsa. Le distanze (in Km) tra ognuno dei clienti sono come segue: 3 5 7-8 9 57

Dettagli

Fondamenti di Ricerca Operativa

Fondamenti di Ricerca Operativa Politecnico di Milano Anno Accademico 2010/2011 Fondamenti di Ricerca Operativa Corso del Prof. Edoardo Amaldi Stefano Invernizzi Facoltà di Ingegneria dell Informazione Corso di Laurea Magistrale in Ingegneria

Dettagli

DAL DIAGRAMMA AL CODICE

DAL DIAGRAMMA AL CODICE DAL DIAGRAMMA AL CODICE Un diagramma di flusso Appare, come un insieme di blocchi di forme diverse che contengono le istruzioni da eseguire, collegati fra loro da linee orientate che specificano la sequenza

Dettagli

TSP con eliminazione di sottocicli

TSP con eliminazione di sottocicli TSP con eliminazione di sottocicli Un commesso viaggiatore deve visitare 7 clienti in modo da minimizzare la distanza percorsa. Le distanze (in Km) tra ognuno dei clienti sono come segue: 7-8 9 7 9-8 79

Dettagli

Esercizi Capitolo 14 - Algoritmi Greedy

Esercizi Capitolo 14 - Algoritmi Greedy Esercizi Capitolo 14 - Algoritmi Greedy Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare

Dettagli

Elementi di Informatica

Elementi di Informatica Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica Algoritmi, e Programmi D. Gubiani 29 marzo 2010 D. Gubiani Algoritmi, e Programmi

Dettagli

1. Considerazioni generali

1. Considerazioni generali 1. Considerazioni generali Modelli di shop scheduling In molti ambienti produttivi l esecuzione di un job richiede l esecuzione non simultanea di un certo numero di operazioni su macchine dedicate. Ogni

Dettagli

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello dell 8 Febbraio 2005 Esercizio 1 (ASD) 1. Dire quale delle seguenti affermazioni è vera giustificando la risposta. (a) lg

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

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata Esempi di Problema: Prendere un Caffè al Distributore Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica, e Programmi D. Gubiani

Dettagli

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

Algebra Booleana ed Espressioni Booleane

Algebra Booleana ed Espressioni Booleane Algebra Booleana ed Espressioni Booleane Che cosa è un Algebra? Dato un insieme E di elementi (qualsiasi, non necessariamente numerico) ed una o più operazioni definite sugli elementi appartenenti a tale

Dettagli

Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo

Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo L. De Giovanni G. Zambelli 1 Problema del flusso a costo minimo Il problema del flusso a costo minimo é definito

Dettagli

Corso di Laurea in INFORMATICA

Corso di Laurea in INFORMATICA Corso di Laurea in INFORMATICA Algoritmi e Strutture Dati MODULO 2. Algebre di dati Dati e rappresentazioni, requisiti delle astrazioni di dati, costrutti. Astrazioni di dati e dati primitivi. Specifica

Dettagli

B-Tree. Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in:

B-Tree. Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in: B-Tree Prof. Rudolf Bayer Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in: Filesystem: btrfs, NTFS, ReiserFS, NSS, XFS, JFS

Dettagli

4.1 Modelli di calcolo analisi asintotica e ricorrenze

4.1 Modelli di calcolo analisi asintotica e ricorrenze 4 Esercizi Prima Parte 4.1 Modelli di calcolo analisi asintotica e ricorrenze Esercizio 4 1 Rispondere alle seguenti domande: 1. Come misuriamo l efficienza di un algoritmo?. Quali sono gli algoritmi più

Dettagli

DNA sequence alignment

DNA sequence alignment DNA sequence alignment - Introduzione: un possibile modello per rappresentare il DNA. Il DNA (Acido desossiribonucleico) è una sostanza presente nei nuclei cellulari, sia vegetali che animali; a questo

Dettagli

Alberto Montresor Università di Trento

Alberto Montresor Università di Trento !! Algoritmi e Strutture Dati! Capitolo 3 - Tipi di dato e strutture di dati!!! Alberto Montresor Università di Trento!! This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Dettagli

Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante

Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante Introduzione Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante Il problema del massimo flusso è uno dei fondamentali problemi nell ottimizzazione su rete. Esso è presente

Dettagli

Note del Corso di Modelli Biologici Discreti: Un paio di algoritmi DNA per risolvere SAT

Note del Corso di Modelli Biologici Discreti: Un paio di algoritmi DNA per risolvere SAT Note del Corso di Modelli Biologici Discreti: Un paio di algoritmi DNA per risolvere SAT Giuditta Franco Corso di Laurea in Bioinformatica - AA 2012/2013 Uno dei più grossi risultati nell informatica degli

Dettagli

40 Algoritmi sui Grafi

40 Algoritmi sui Grafi Università degli Studi di Napoli Parthenope Corso di Laurea in Informatica A.A 2014/15 PROGETTO PROGRAMMAZIONE III 40 Algoritmi sui Grafi Relatore: Prof. Raffaele Montella Studente: Diego Parlato Matricola:

Dettagli

IL PROBLEMA DELLO SHORTEST SPANNING TREE

IL PROBLEMA DELLO SHORTEST SPANNING TREE IL PROBLEMA DELLO SHORTEST SPANNING TREE n. 1 - Formulazione del problema Consideriamo il seguente problema: Abbiamo un certo numero di città a cui deve essere fornito un servizio, quale può essere l energia

Dettagli

Algoritmi per la Visualizzazione. Disegno 2D ortogonale. Disegno ortogonale 2D (1) Disegno ortogonale 2D (2)

Algoritmi per la Visualizzazione. Disegno 2D ortogonale. Disegno ortogonale 2D (1) Disegno ortogonale 2D (2) Algoritmi per la visualizzazione DISEGNO DI GRAFI: ALCUNI CASI PARTICOLARI Disegno 2D ortogonale Disegno ortogonale 2D () Disegno ortogonale 2D (2) Punto di vista umano: primo criterio per giudicare la

Dettagli

Algoritmi di Visita di Grafi. Damiano Macedonio mace@unive.it

Algoritmi di Visita di Grafi. Damiano Macedonio mace@unive.it lgoritmi di Visita di rafi amiano Macedonio mace@unive.it Original work opyright lberto Montresor, Università di Trento, Italy Modifications opyright 00 0, Moreno Marzolla, Università di ologna, Italy

Dettagli

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Esercizi II parte Esercizio 1 Discutere la correttezza di ciascuna delle seguenti affermazioni. Dimostrare formalmente la validità

Dettagli

Esercizi di Ricerca Operativa I

Esercizi di Ricerca Operativa I Esercizi di Ricerca Operativa I Dario Bauso, Raffaele Pesenti May 10, 2006 Domande Programmazione lineare intera 1. Gli algoritmi per la programmazione lineare continua possono essere usati per la soluzione

Dettagli

Flusso a costo minimo e simplesso su reti

Flusso a costo minimo e simplesso su reti Flusso a costo minimo e simplesso su reti La particolare struttura di alcuni problemi di PL può essere talvolta utilizzata per la progettazione di tecniche risolutive molto più efficienti dell algoritmo

Dettagli

Uso di Excel per l analisi e soluzione di Modelli di Programmazione Matematica

Uso di Excel per l analisi e soluzione di Modelli di Programmazione Matematica Capitolo 9 Uso di Excel per l analisi e soluzione di Modelli di Programmazione Matematica 9.1 Introduzione La soluzione grafica di problemi di ottimizzazione che abbiamo visto nel Capitolo 4 può essere

Dettagli

STRUTTURE NON LINEARI

STRUTTURE NON LINEARI PR1 Lezione 13: STRUTTURE NON LINEARI Michele Nappi mnappi@unisa.it www.dmi.unisa.it/people/nappi Per la realizzazione della presentazione è stato utilizzato in parte materiale didattico prodotto da Oronzo

Dettagli

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012 Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012 Concetti importanti da (ri)vedere Programmazione imperativa Strutture di

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 18 dicembre 2007 Esercizio 1: rappresentazione di una tabella di occorrenze L obiettivo è quello di rappresentare in modo efficiente

Dettagli

Tipologie di macchine di Turing

Tipologie di macchine di Turing Tipologie di macchine di Turing - Macchina di Turing standard - Macchina di Turing con un nastro illimitato in una sola direzione - Macchina di Turing multinastro - Macchina di Turing non deterministica

Dettagli

Verifica della correttezza formale del numero di partita IVA

Verifica della correttezza formale del numero di partita IVA Verifica della correttezza formale del numero di partita IVA A tutti i soggetti che intraprendono un attività rilevante ai fini Iva (impresa, arte, professione), al momento della presentazione della dichiarazione

Dettagli

Ricerca non informata in uno spazio di stati

Ricerca non informata in uno spazio di stati Università di Bergamo Facoltà di Ingegneria Intelligenza Artificiale Paolo Salvaneschi A5_2 V2.4 Ricerca non informata in uno spazio di stati Il contenuto del documento è liberamente utilizzabile dagli

Dettagli

6. Applicazione: gestione del centro sportivo Olympic

6. Applicazione: gestione del centro sportivo Olympic LIBRERIA WEB 6. Applicazione: gestione del centro sportivo Olympic PROGETTO Il centro sportivo Olympic organizza corsi di tipo diverso: nuoto, danza, karate, ecc. Ogni corso ha un unico istruttore prevalente,

Dettagli

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Parte 3: Gestione dei progetti, Shop scheduling

Parte 3: Gestione dei progetti, Shop scheduling Parte : Gestione dei progetti, Shop scheduling Rappresentazione reticolare di un progetto Insieme di attività {,...,n} p i durata (nota e deterministica dell attività i) relazione di precedenza fra attività:

Dettagli

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006 Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006 Esercizio 1 - Heapsort Si consideri la seguente struttura dati, chiamata heap. Essa è un albero binario semi-completo (ossia un

Dettagli

Ricerca Operativa 2. Introduzione al metodo del Simplesso

Ricerca Operativa 2. Introduzione al metodo del Simplesso Ricerca Operativa 2. Introduzione al metodo del Simplesso Luigi De Giovanni Giacomo Zambelli 1 Problemi di programmazione lineare Un problema di ottimizzazione vincolata è definito dalla massimizzazione

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 E08 Soluzione Esercizi F. Gasparetti, C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Soluzione Esercizi

Dettagli

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno UD 3.1b: Costrutti di un Algoritmo Dispense 1.2 I Costrutti di base 13 apr 2010

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Il problema del commesso viaggiatore

Il problema del commesso viaggiatore ITTS Vito Volterra Progetto ABACUS Ottimizzazione combinatoria Il problema del commesso viaggiatore Studente: Davide Talon Esame di stato 2013 Anno scolastico 2012-2013 Indice 1. Introduzione........................................

Dettagli

Algoritmi e strutture dati. Codici di Huffman

Algoritmi e strutture dati. Codici di Huffman Algoritmi e strutture dati Codici di Huffman Memorizzazione dei dati Quando un file viene memorizzato, esso va memorizzato in qualche formato binario Modo più semplice: memorizzare il codice ASCII per

Dettagli

GUIDA BASE DI PASCAL

GUIDA BASE DI PASCAL 1 GUIDA BASE DI PASCAL Un algoritmo, nel suo significato più ampio, è sequenza logica di istruzioni elementari (univocamente interpretabili) che, eseguite in un ordine stabilito, permettono la soluzione

Dettagli

Esercizi per il corso di Algoritmi e Strutture Dati

Esercizi per il corso di Algoritmi e Strutture Dati 1 Esercizi per il corso di Algoritmi e Strutture Dati Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, né in C++, etc. ). Di tutti gli algoritmi

Dettagli

- Trovare soluzione ottima primale ( con il simplesso o algoritmo analogo)

- Trovare soluzione ottima primale ( con il simplesso o algoritmo analogo) Se si ha un problema lineare e' possibile risolverlo in piu' modi (equivalenti ) - Trovare soluzione ottima primale ( con il simplesso o algoritmo analogo) - Trovare soluzione ottima duale (con il simplesso

Dettagli

CAPITOLO 27 SCAMBIO DI MESSAGGI

CAPITOLO 27 SCAMBIO DI MESSAGGI CAPITOLO 27 SCAMBIO DI MESSAGGI SCAMBIO DI MESSAGGI Sia che si guardi al microkernel, sia a SMP, sia ai sistemi distribuiti, Quando i processi interagiscono fra loro, devono soddisfare due requisiti fondamentali:

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 18 marzo 2011 Problema basato su 10.5 del libro di testo La CINA (Compagnia Italiana per il Noleggio di Automobili) dispone di

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Corso di Visual Basic (Parte 9)

Corso di Visual Basic (Parte 9) Corso di Visual Basic (Parte 9) di Maurizio Crespi La nona lezione del corso dedicato alla programmazione in Visual Basic si pone lo scopo di illustrare le funzioni definibili dall'utente e il concetto

Dettagli

ALGORITMI 1. GLI ALGORITMI 2. IL LINGUAGGIO DI PROGETTO

ALGORITMI 1. GLI ALGORITMI 2. IL LINGUAGGIO DI PROGETTO ALGORITMI 1. GLI ALGORITMI Un algoritmo è la descrizione del percorso risolutivo di un problema per giungere dai dati iniziali ai risultati finali. Scriviamo l algoritmo pensando di rivolgerci a un esecutore,

Dettagli

Introduzione alla tecnica di Programmazione Dinamica

Introduzione alla tecnica di Programmazione Dinamica Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 1/37 Sommario della lezione Introduzione alla tecnica di Programmazione Dinamica Esempio di applicazione n. 1:

Dettagli

Breve introduzione al Calcolo Evoluzionistico

Breve introduzione al Calcolo Evoluzionistico Breve introduzione al Calcolo Evoluzionistico Stefano Cagnoni Dipartimento di Ingegneria dell Informazione, Università di Parma cagnoni@ce.unipr.it 1 Introduzione Il mondo fisico ed i fenomeni naturali

Dettagli

Programmazione dinamica

Programmazione dinamica Capitolo 6 Programmazione dinamica 6.4 Il problema della distanza di edit tra due stringhe x e y chiede di calcolare il minimo numero di operazioni su singoli caratteri (inserimento, cancellazione e sostituzione)

Dettagli

Planning as Model Checking Presentazione della Tesina di Intelligenza Artificiale

Planning as Model Checking Presentazione della Tesina di Intelligenza Artificiale Planning as Model Checking Presentazione della Tesina di Intelligenza Artificiale di Francesco Maria Milizia francescomilizia@libero.it Model Checking vuol dire cercare di stabilire se una formula è vera

Dettagli

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Visual Basic Visual Basic Linguaggio di programmazione

Dettagli

Sommario della lezione

Sommario della lezione Sommario della lezione Ulteriori applicazioni del Massimo Flusso 1. Connettività di grafi. Selezione di progetti 3. Trasporto in reti 4. Eliminazione in tornei Università degli Studi di Salerno Corso di

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 Scopo: Stimare l onere computazionale per risolvere problemi di ottimizzazione e di altra natura

Dettagli

ASP 3.0 Il Sito Dinamico

ASP 3.0 Il Sito Dinamico www.idstudio.it ASP 3.0 Il Sito Dinamico di Lorenzo Garassino Introduzione e scopo del libro 1. Scenario 1.1. Il panorama 1.2. Sito Statico o Dinamico? 1.3. Prospettive 2. Cos è ASP 2.1. Descrizione 2.2.

Dettagli

Indirizzamento Aperto

Indirizzamento Aperto Indirizzamento Aperto Sommario Metodo di indirizzamento aperto Scansione lineare Scansione quadratica Hashing doppio Metodo di indirizzamento aperto L idea è di memorizzare tutti gli elementi nella tabella

Dettagli

Alcuni Preliminari. Prodotto Cartesiano

Alcuni Preliminari. Prodotto Cartesiano Alcuni Preliminari Prodotto Cartesiano Dati due insiemi A e B, si definisce il loro prodotto cartesiano A x B come l insieme di tutte le coppie ordinate (a,b) con a! A e b! B. Es: dati A= {a,b,c} e B={,2,3}

Dettagli

Cicli in Visual Basic for Application. For contatore = inizio To fine istruzioni Next contatore

Cicli in Visual Basic for Application. For contatore = inizio To fine istruzioni Next contatore Cicli in Visual Basic for Application Le strutture del programma che ripetono l'esecuzione di una o più istruzioni sono chiamate Cicli. Alcune strutture per i cicli sono costruite in modo da venire eseguite

Dettagli

Calcolo della funzione di Sprague-Grundy

Calcolo della funzione di Sprague-Grundy Calcolo della funzione di Sprague-Grundy Paola Lorusso e Walter Mottinelli 23 aprile 2008 La funzione di Sprague-Grundy è utilizzata nella teoria dei giochi per determinare se esiste una strategia vincente

Dettagli

per le decisioni economiche e

per le decisioni economiche e Elaborazione automatica dei dati per le decisioni economiche e finanziarie VBA-MODULO 1 Introduzione al Visual Basic for Applications Università di Foggia Facoltà di Economia Prof. Crescenzio Gallo c.gallo@unifg.it

Dettagli

Matematica in laboratorio

Matematica in laboratorio Unità 1 Attività guidate Attività 1 Foglio elettronico Divisibilità tra numeri naturali Costruisci un foglio di lavoro per determinare se a è divisibile per b, essendo a e b due numeri naturali, con a

Dettagli

MICROSOFT EXCEL INTRODUZIONE PRIMI PASSI

MICROSOFT EXCEL INTRODUZIONE PRIMI PASSI MICROSOFT EXCEL INTRODUZIONE Si tratta di un software appartenente alla categoria dei fogli di calcolo: con essi si intendono veri e propri fogli elettronici, ciascuno dei quali è diviso in righe e colonne,

Dettagli

Corso di Calcolo Numerico

Corso di Calcolo Numerico Corso di Calcolo Numerico Dott.ssa M.C. De Bonis Università degli Studi della Basilicata, Potenza Facoltà di Ingegneria Corso di Laurea in Ingegneria Meccanica Sistemi di Numerazione Sistema decimale La

Dettagli

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base: LA STRUTTURA DI RIPETIZIONE La ripetizione POST-condizionale La ripetizione PRE-condizionale INTRODUZIONE (1/3) Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali a Visual Basic Lezione 1 Concetti base e istruzioni condizionali Mario Alviano Introduzione all informatica Università della Calabria http://alviano.net/introinfo A.A. 2008/09 Introduzione Un esempio:

Dettagli

www.wlascuola.4000.it

www.wlascuola.4000.it 1 Cenni di programmazione Risolvere un problema significa trovare un procedimento che consenta di produrre i risultati, a partire dai dati iniziali, attraverso un processo di elaborazione. La metodologia

Dettagli

Piccola guida a VBA per Word

Piccola guida a VBA per Word Piccola guida a VBA per Word La differenza tra VBA (Visual Basic for Applications) e VB6 (Visual Basic versione 6) Il modello di un documento Word Il progetto di un documento Word Come creare un nuovo

Dettagli

RETI DI CALCOLATORI Lucidi delle Lezioni Capitolo VIII

RETI DI CALCOLATORI Lucidi delle Lezioni Capitolo VIII Prof. Giuseppe F. Rossi E-mail: giuseppe.rossi@unipv.it Homepage: http://www.unipv.it/retical/home.html UNIVERSITA' DEGLI STUDI DI PAVIA A.A. 2011/12 - II Semestre RETI DI CALCOLATORI Lucidi delle Lezioni

Dettagli

Il modello TCP/IP. Sommario

Il modello TCP/IP. Sommario Il modello TCP/IP Il protocollo IP Mario Cannataro Sommario Introduzione al modello TCP/IP Richiami al modello ISO/OSI Struttura del modello TCP/IP Il protocollo IP Indirizzi IP Concetto di sottorete Struttura

Dettagli

Fondamenti di routing (pag.34)

Fondamenti di routing (pag.34) Fondamenti di routing (pag.34) UdA2L1 Il livello di rete (Network layer) è il livello 3 della pila ISO/OSI. Questo livello riceve datagrammi (pacchetti) dal livello di trasporto e forma pacchetti che vengono

Dettagli

Ricerca informata. Scelta dell euristica

Ricerca informata. Scelta dell euristica Ricerca informata Scelta dell euristica SMA* (Simplified Memory-Bounded A*) SMA* espande sempre la foglia migliore finché la memoria è piena A questo punto deve cancellare un nodo in memoria SMA* cancella

Dettagli

Reti sequenziali e strutturazione firmware

Reti sequenziali e strutturazione firmware Architettura degli Elaboratori, a.a. 25-6 Reti sequenziali e strutturazione firmware Alla parte di corso sulle reti sequenziali è apportata una sensibile semplificazione rispetto a quanto contenuto nel

Dettagli

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Algoritmi Algoritmi Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Il procedimento (chiamato algoritmo) è composto da passi elementari

Dettagli

b i 1,1,1 1,1,1 0,1,2 0,3,4

b i 1,1,1 1,1,1 0,1,2 0,3,4 V o Appello // RICERCA OPERATIVA - Corso A (a.a. 9/) Nome Cognome: Corso di Laurea: L C6 LS LM Matricola: ) Si consideri il problema di flusso di costo minimo in figura. Si verifichi se il flusso ammissibile

Dettagli