Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Scienze Matematiche Fisiche e Naturali
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Aniello Murano » 22.Esercitazione di laboratorio: Problema del venditore terza parte


Esercizio del venditore

Di seguito viene riepilogato l’esercizio completo del venditore introdotto nelle due precedenti lezioni con l’aggiunta di eventuali note e di due funzioni aggiuntive da implementare

Esercizio (prima parte)

Si consideri il seguente problema:

  • Un venditore ha n clienti sparsi in n diverse città. Per ognuna di queste città, il venditore conosce esattamente se e in che modo tale città è collegata alle altre (collegamento mono o bidirezionale) e, per ogni collegamento, la sua lunghezza. Per semplicità, assumiamo che se due città hanno un collegamento in entrambe le direzioni, la lunghezza dei due collegamenti sia la stessa.
  • Si supponga inoltre che il venditore conosca il fatturato per ogni singola città (compreso quello della sua città che è inclusa in n) e il tempo necessario da trascorrere in ogni città per ottenere il corrispondente fatturato.

Esercizio (prima parte)

Si implementino in linguaggio C le seguenti operazioni utilizzando come struttura dati di appoggio un grafo, scegliendo opportunamente una rappresentazione con liste di adiacenza o con matrice di adiacenza:

  • Creazione della struttura dati grafo contenente tutte le città con le relative informazioni.
  • Aggiunta di un collegamento.
  • Rimozione/modifica-lunghezza di un collegamento.
  • Aggiunta di una città
  • Cancellazione/modifica-dati di una città
  • Stampa di una visita completa di tutte le città

La scelta del tipo di grafo e della sua rappresentazione deve essere guidata da una implementazione in linguaggio C efficiente delle operazioni sopra richieste e di quelle richieste nelle pagine successive. Tutte le scelte devono essere debitamente motivate.

Esercizio (seconda parte)

In aggiunta alle operazioni precedenti, si implementino in modo efficiente, descrivendone le scelte opportune e le complessità asintotiche, le seguenti due operazioni:

  • Il venditore vuole vendere una connessione ad internet via cavo ai suoi clienti. Implementare in linguaggio C una funzione efficiente che permetta di definire la lunghezza minima di cavo necessaria per collegare tutte le città, partendo dalla città del venditore e sfruttando soltanto i collegamenti esistenti tra le città (senza tener necessariamente conto delle loro direzioni).
  • Si supponga inoltre che una volta completato il lavoro precedente, il venditore voglia visitare tutte le città per riscuotere il pagamento del servizio fornito. Si implementi dunque una funzione efficiente in linguaggio C che permetta di visitare (non necessariamente in modo ottimale) tutte le città, rispettando i collegamenti e le direzioni esistenti tra le varie città. Tale funzione deve indicare l’ordine di visita, la distanza totale percorsa, la somma riscossa e le eventuali città che non sono raggiungibili.

Esercizio (seconda parte)

  • Le funzioni precedenti devono gestire anche la possibilità di modifica del numero di città e di collegamenti. In pratica, se un collegamento tra due città salta, bisogna ristabilire il collegamento internet tra tutte le città utilizzando la parte di rete rimanente.
  • Nella realtà, la perdita di una città cliente può essere relativa ad una perdita del cliente o ad una perdita della città come territorio (ad esempio, vendita del cliente, dei cavi e dei relativi collegamenti). Il primo caso è riconducibile ad una cancellazione logica della città (quindi scompare l’entità cliente, ma città, collegamenti e cavi restano attivi). Il secondo caso invece è riconducibile ad una cancellazione fisica definitiva della città con i relativi collegamenti.

Esercizio (parte aggiuntiva)

In aggiunta alle operazioni precedenti, si implementi la seguente operazione:

  • Un tecnico si trova presso un cliente in una data città. Supponiamo, che è richiesto un suo intervento presso un altro cliente in un’altra città. Implementare in linguaggio C una funzione efficiente che permetta al tecnico di trovare il percorso più corto tra la città di partenza e quella di arrivo.

Facoltativo (parte aggiuntiva)

Si ricordi che per ogni città cliente il venditore conosce una serie di informazioni come fatturato realizzabile e tempo necessario per ottenerlo. In aggiunta alle operazioni richieste in precedenza, si implementi in linguaggio C una funzione che permetta di aumentare il numero di tali informazioni. In pratica, la struttura dati deve permettere di aggiungere per ogni cliente di nuove informazioni il cui tipo deve essere definito dall’esterno come ad esempio numero dipendenti, aziende collegate, ecc.

Consegna

Il progetto va consegnato va consegnato via mail al tutor e in cc al docente entro il 20 Dicembre.

Il codice deve essere ampiamente commentato, compilabile e perfettamente funzionate.

Unitamente al codice deve essere consegnata una relazione che giustifichi le scelte effettuate e la complessità asintotica delle funzioni implementate. Possibilmente, indicare anche graficamente la struttura dati implementata e includere esempi relativamente alle scelte implementative più significative.

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion