Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoPerlita Dolce Modificato 11 anni fa
1
Il problem-solving Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino
2
A.A. 2004/200514 Il problem-solving2 PRODOTTI-FORNITORI Problema di ottimizzazione Trovare un insieme minimo di fornitori in grado di fornire un dato insieme di prodotti Gli elenchi dei fornitori e dei prodotti, con nomi, e corrispondenze prodotto-fornitori, sono letti da file.
3
A.A. 2004/200514 Il problem-solving3 Problema in dettaglio Due file di testo contengono informazioni relative a una fornitura di prodotti per un dato acquirente. elenco.txt: contiene un elenco di prodotti, a ognuno dei quali sono associate le ditte che lo vendono acquisti.txt: elenco di acquisti
4
A.A. 2004/200514 Il problem-solving4 Problema in dettaglio Il programma, l etti i due file, determina un insieme minimo di ditte dalle quali acquistare tutti i prodotti elencati in acquisti.txt. Si deve cioè, sfruttando la possibilità di acquistare lo stesso prodotto da più ditte, fare in modo di scegliere linsieme di fornitori di cardinalità minima (minimo numero di fornitori in grado di fornire tutti i prodotti). (ricerca) determina un insieme di fornitori per un dato elenco di prodotti. E garantito che linsieme esiste, perché ogni prodotto ha almeno un fornitore. La difficoltà consiste nel determinate TUTTI gli insiemi di fornitori (ottimizzazione) è necessario minimizzare la cardinalità dellinsieme di fornitori
5
A.A. 2004/200514 Il problem-solving5 Formato file input elenco.txt prima riga: numero di ditte fornitrici nf e di prodotti np nf righe successive: nomi delle ditte (uno per riga) righe che seguono: elenco degli np prodotti; per li-esimo prodotto una prima riga contiene il nome del prodotto e il numero nf i di fornitori di tale prodotto. Nelle nf i righe successive sono elencati i nomi dei fornitori. Acquisti.txt nomi di prodotti, uno per riga (possibili ripetizioni, cioè righe contenenti lo stesso prodotto, indicanti più acquisti del relativo prodotto).
6
A.A. 2004/200514 Il problem-solving6 Algoritmo (soluzione esatta- ricorsiva) Strategia: Ricerca Visitare (enumerare in modo ricorsivo) tutte le possibili soluzioni. Ogni chiamata ricorsiva gestisce un prodotto tra quelli in elenco, e prova per questo tutti i fornitori possibili Ottimizzazione si mantengono soluzione corrente e soluzione migliore provvisoria. Ogni nuova soluzione viene confrontata con la migliore ed eventualmente la aggiorna (simile a ricerca di massimo/minimo)
7
A.A. 2004/200514 Il problem-solving7 Struttura dati Occorre prevedere strutture dati per: Elenco dei fornitori ed elenco dei prodotti Corrispondenze prodotti/fornitori. Sono informazioni simili ad archi in un grafo, sono quindi possibili: Rappresentazioni a matrice o liste delle adiacenze Soluzioni (corrente e migliore) Due vettori o due liste
8
A.A. 2004/200514 Il problem-solving8 Elenchi di fornitori e prodotti Elenco fornitori e prodotti: array di stringhe o di struct, contenenti i nomi dei fornitori/prodotti ed eventuali informazioni aggiuntive Semplicità di lettura e di gestione Possibile conversione da nome a indice (se il vettore è ordinato) di costo O(ln N)
9
A.A. 2004/200514 Il problem-solving9 Grafo prodotto-fornitori Le corrispondenze prodotti-fornitori costituiscono un grafo: La matrice di adiacenza fornisce test di corrispondenza O(1) tra un prodotto e un fornitore Elenco dei fornitori(prodotti), per un dato prodotto(fornitore), di costo O(N forn ) (O(N prod )) Le liste di adiacenza offrono costi inferiori (lunghezza max. di lista L) test di corrispondenza O(L) tra un prodotto e un fornitore Elenco dei fornitori(prodotti), per un dato prodotto(fornitore), di costo O(L forn ) (O(L prod ))
10
A.A. 2004/200514 Il problem-solving10 Grafo prodotto-fornitori: utilizzo Dato un insieme di prodotti già selezionati e un nuovo prodotto p i, cercare tutti i fornitori di p i Meglio la soluzione a liste di adiacenza
11
A.A. 2004/200514 Il problem-solving11 Il problema dei nomi Problema: passare dal nome di un fornitore/prodotto alle informazioni relative. Se le informazioni sono in uno o più vettori, occorre associare a ogni fornitore/prodotto un INDICE Se un fornitore/prodotto viene individuato per NOME, occorre un meccanismo di conversione NOME INDICE (ricerca) Siccome la ricerca NON ha costo O(1), conviene, ove possibile, limitarla alla fase preliminare, lavorando esclusivamente su indici nel corso della procedura ricorsiva.
12
A.A. 2004/200514 Il problem-solving12 Soluzione corrente/migliore Le due soluzioni gestite (corrente e migliore), rappresentano insiemi di fornitori: possono essere gestite come vettori o liste. Vista la dimensione ridotta e predicibile risulta più semplice gestire due vettori. Un insieme di prodotti può essere rappresentato in due modi Vettore di indici (nella prima parte del vettore si accumulano gli indici appartenenti allinsieme) Vettore di informazioni logiche (appartenenza al sottoinsieme). Vettore con una casella per ogni fornitore.
13
A.A. 2004/200514 Il problem-solving13 La soluzione proposta Variabili locali: modularità, ma molti parametri alle funzioni Vettore di struct per i prodotti, vettore di stringhe per i fornitori. I vettori vengono ordinati per garantire ricerche logaritmiche: la scelta può non essere necessaria – ma poco costosa – in quanto le ricerche sono limitate alla fase preliminare. Infatti, se complessità di ricerca ricorsiva >> complessità fase preliminare, si possono scegliere ricerche lineari. Liste (come vettori) di fornitori per un prodotto Soluzioni corrente e migliore: array di flag logici Viene proposta anche una soluzione greedy (discussa in seguito)
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.