home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.disi.unige.it
/
2015-02-11.ftp.disi.unige.it.tar
/
ftp.disi.unige.it
/
pub
/
.person
/
CataniaB
/
teach-act
/
testi-esami
/
labo-7.97
/
bin.txt
Wrap
Text File
|
1999-03-11
|
2KB
|
68 lines
Prova di Laboratorio: Lunedi' 14 Luglio
- Bin Sorting -
Scopo dell'esercizio: ordinare un insieme di coppie (chiave,dato)
in base al valore della chiave, utilizzando l'algoritmo di bin-sorting.
L'idea \`e quindi: inserire i dati in una tabella di liste, una per ogni
valore delle chiavi, mantenendo un puntatore all'ultimo elemento;
ricostruire la lista ORDINATA IN BASE ALLE CHIAVI (NON in base al valore dei
dati!) semplicemente collegando tra loro le liste al passo precedente.
Il tutto deve avere complessita' lineare nel numero degli elementi da
ordinare.
Svolgimento dell'esercizio:
Le chiavi sono numeri interi compresi tra 0 e M-1 con M fissato a priori;
i dati sono stringhe (ad esempio: nomi).
Considerate un file di input contenente i seguenti dati:
- Un intero N che indica quante coppie (chiave,dato) leggere...;
- La sequenza delle coppie.
Ad esempio:
11 %n. di coppie da ordinare
1 Vittorio
1 Mario
2 Augusto
9 Nadia
2 Marco
5 Luca
1 Giovanni
3 Fabrizio
6 Giacomo
2 Roberto
9 Luca
Quindi:
1) Fissato M=10, definite la tabella dei bin utilizzando un array di LISTE
con un puntatore all'ultimo elemento (ad esempio: array di record
primo/ultimo).
2) Leggete il nome del file di input (questo per poter provare con file
diversi).
3) Leggete i dati dal file di cui al passo (2) ed inserite gli
elementi nella tabella in base alla chiave
(inserimento in tempo costante).
Ricordatevi di mantenere il puntatore all'ultimo elemento di ogni lista.
4) Passo delicato: ricostruite un'unica lista a partire dalla tabella
al passo 3, utilizzando il puntatore all'ultimo elemento
in modo che il costo di tale procedimento sia lineare nel numero
degli elementi.
5) Stampate la lista risultante (gli elementi devono essere ordinati rispetto
alle chiavi).
Ad esempio, dato il file precedente un possibile output e' il seguente:
Vittorio Mario Giovanni Augusto Roberto Marco Fabrizio Luca
Giacomo Nadia Luca
Oss: gli elementi con lo stesso codice (ad esempio Vittorio, Mario e Giovanni
che hanno codice 1) non sono necessariamente ordinati tra loro.
Luca compare due volte in posizioni diverse in quanto ha codice sia 5 che 9.