Questo progetto sostituisce l'esame scritto del corso. Svolto in C/C++ (o altro linguaggio da concordare con il docente), il progetto richiede di applicare le strutture di dati e gli algoritmi sui grafi all'analisi delle reti sociali (Social Network Analysis) utilizzando un particolare caso di studio: i dati disponibili sui film presenti nell'Internet Movie DataBase (IMDB).
È possibile in tal modo definire implicitamente un grafo non diretto G=(V,E) dove:
Il progetto si compone di varie fasi:
Nota sul formato dei file. I file che terminano in *.tsv (tab separated values), sono utilizzati come formato semplice di scambio: ogni riga testuale rappresenta un “record” i cui campi sono separati da una spaziatura tabulata ('\t' in C/C++). . Occorre quindi leggere una linea alla volta di ciascun file e separare i campi. Per esempio, possiamo reindirizzare l'input da tastiera in modo che il comando di lettura cin
legga da file invece che da tastiera, usando il comando:
freopen("file.tsv", "r", stdin);
A questo punto possiamo leggere ogni riga di file.tsv
come stringa C++ ed estrarne i campi separati dal delimitatore '\t'. Iterando più volte sulla riga, possiamo ottenere tutti i campi.
using namespace std; string s; cin >> s; string delimitatore = “\t”; string campo = s.substr(0, s.find(delimitatore));
Per decomprimere i file *.tsv.gz lanciare il comando
gunzip *.tsv.gz
Per scorrere un file *.tsv usare il comando “less” (“more” oppure “cat”) seguito dal nome del file *.tsv, poiché alcuni editor potrebbero non essere in grado di aprire tali file.
Per vedere le prime N linee di un file *.tsv (o le ultime N righe) lanciare il comando “head -N” (oppure “tail -N”) seguito dal nome del file *.tsv, dove N è appunto il numero di righe che si vuole esaminare. Per vedere i singoli caratteri, i tab, ecc., lanciare il comando “od -c” seguito dal nome del file *.tsv.