[C++] problema di ordinamento

di il
1 risposte

[C++] problema di ordinamento

Buongiorno,
Espongo il mio problema.
Ho due files contenenti per ogni riga una parola, (un array di char)
vorrei "unirli" in un terzo file contenente su ogni riga ancora una singola parola, ma senza ripetere la stessa parole due volte..
In altri termini, nel terzo file ci saranno tutte le parole contenute nei due files, ma non saranno ripetute.

Potrei scorrere il primo file cercando tutte le parole contenute nel secondo e se non trovo corrispondenza, aggiungere la parola nel terzo file,
poi alla fine aggiungere le parole del secondo file in coda al terzo.

però ...
le righe dei file sono veramente molte, parliamo di alcuni milioni.
se cerco una parola nel file, farei molto prima, se le parole fossero ordinate.

Inoltre se le parole fossero ordinate, per unire due files, mi basterebbe scorrerli entrambi mettendo nel terzo la parola, "maggiore" tra le due considerate.

Il problema quindi è quello di ordinare un file contenente tante righe.

leggere il file, costruire un array in memoria, e quindi ordinarlo finisco la memoria solo a "pensarlo"

lavorare su di un file ad accesso casuale ci ho provato ma i metodi ricorsivi mi mandano ancora in crisi la memoria.
i metodi non ricorsivi sono comunque lenti, impiego circa mezzora per ordinare un file con 300000 parole. (ho provato il "bubble")

Il metodo "più meglio" che ho trovato è quello di ordinare le prime n righe con un ciclo for, scrivendo il terzo file parzialmente ordinato,
e quindi incrementando n moltiplicandolo per 10.

Sicuramente il metodo è più lento, ma mi permette di interromper il programma (ctrl c) salvando parte del lavoro.

Il mio dubbio è che il mio metodo "più meglio" sia una emerita "pirlata", quindi infine la domanda:

Voi come fareste?

1 Risposte

  • Re: [C++] problema di ordinamento

    Dovresti utilizzare le funzioni di ordinamento che il linguaggio ti mette a disposizione, come std::sort

    Ma std::set no?
Devi accedere o registrarti per scrivere nel forum
1 risposte