Pregunta

Tengo mi segunda asignación para la clase de C ++ que incluye cadenas de Markov. El trabajo es sencillo pero no soy capaz de averiguar cuál es la mejor aplicación al leer caracteres de los archivos.

Tengo un archivo de alrededor de 300k. Una de las reglas para la asignación es utilizar Mapa del vector y clases. En mapa (clave es única cadena) y los valores serán los vectores. Cuando estoy leyendo desde el archivo, lo que necesito para comenzar a recoger pares de claves.

Ejemplo:

File1.txt
1234567890
1234567890

Si Seleccionar Markov k = 3, que debería tener en mi mapa:

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

La sugerencia del profesor es leer char char, por lo que mi algoritmo es el siguiente

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
}

}

Me omitir algunos otros detalles. Mi pregunta principal es que si tengo 318.000 caracteres, estaré haciendo el condicional cada vez que ralentiza el ordenador mucho (nuevo Mac Pro). Un ejemplo de programa de parte del profesor ejecuta este archivo en unos 5 segundos.

No soy capaz de averiguar cuál es el mejor método para leer palabras de longitud fija a partir de un archivo de texto en C ++.

Gracias!

¿Fue útil?

Solución

¿Usted realmente programado el programa? 318.000 condicionales deben ser un pedazo de la torta para su nuevo Mac Pro. Esto debería tomar sólo microsegundos.

La optimización prematura es la raíz de todo mal. Hacer que su programa de trabajo en primer lugar, la optimización ocupa el segundo lugar.

Otros consejos

archivo de lectura repetida se ralentizará el programa.

Leer el archivo en bloques, de tamaño digamos 1024, coloca en un búfer. A continuación, procesar este buffer como sea necesario para la tarea. Repita para el siguiente bloque hasta que haya terminado con el archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top