Domanda

Ho il mio secondo incarico per la classe C ++, che comprende catene di Markov. L'assegnazione è semplice, ma io non sono in grado di capire qual è la migliore applicazione durante la lettura caratteri da file.

Ho un file intorno 300k. Una delle modalità di assegnazione è quello di utilizzare le classi Mappa e Vector. In Map (chiave è solo stringa) e valori saranno i vettori. Quando sto leggendo dal file, ho bisogno di iniziare a raccogliere coppie di chiavi.

Esempio:

File1.txt
1234567890
1234567890

Se Seleziona Markov k = 3, che dovrebbe avere nella mia mappa:

key     vector
123  -> 4
456  -> 7
789  -> 0
0/n1 -> 2
234  -> 5
567  -> 8
890  -> /n
/n   -> NULL

Il suggerimento del professore è quello di leggere char da char, quindi il mio algoritmo è il seguente

while (readchar != EOF){
tempstring += readchar
increment index
if index == Markovlevel {   
       get nextchar if =!EOF
       insert nextchar value in vector
       insert tempstring to Map and assign vector         
       unget char
}

}

Tralascio alcuni altri dettagli. La mia domanda principale è che se ho 318.000 caratteri, io cercherò di fare il condizionale ogni volta che rallenta il mio computer un sacco (nuovo Mac Pro). Un esempio di programma dal professore esegue questo file in circa 5 secondi.

Io non sono in grado di capire qual è il metodo migliore per leggere le parole di lunghezza fissa da un file di testo in C ++.

Grazie!

È stato utile?

Soluzione

Avete in realtà cronometrato il programma? 318.000 condizionali dovrebbe essere un pezzo di torta per il tuo nuovo Mac Pro. Questo dovrebbe prendere solo microsecondi.

ottimizzazione prematura è la radice di tutti i mali. Fai il tuo programma di lavoro prima, l'ottimizzazione è al secondo posto.

Altri suggerimenti

lettura del file ripetuto rallenterà il programma.

Leggere il file in blocchi, di dire Misura del 1024, ha messo in un buffer. Poi elaborare questo buffer come si richiede per l'assegnazione. Ripetere l'operazione per il blocco successivo fino a che si è fatto con il file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top