C/Visual C - student

 
Vista:

student

Publicado por Pepe (2 intervenciones) el 18/07/2005 18:33:31
Hola,
soy nuevo en esto de C++ y tengo unas dudas sobre cual es el mejor modo de leer un fichero de texto.
Estoy intentando hacer una aplicacion que lea un fichero de texto y busque todas las veces que se repite una cadena, no se, por ejemplo "no tengo ni idea de C++"

Cuando el archivo de texto no tiene muchas lineas la busqueda se hace bastante rapida, pero cuando intento ejecutarlo sobre archivos muy grandes (supongamos que la cadena a buscar se repite 30.000 veces) el tiempo empleado creo que es demasiado largo.
he visto otros programas de algunos amigos que lo hacen en mucho menos tiempo

A alguien se le ocurre cual podria ser la mejor manera de optimizar la busqueda?
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:student

Publicado por fernando.gomez (1603 intervenciones) el 18/07/2005 19:18:22
Un método que empleaba un conocido era ordenar el archivo de texto en uno temporal, que en Quicksort o parecidos debe ser tiempo logarítmico. Una vez ordenado, haces una búsqueda binaria y en muy pocas comparaciones encuentras la ocurrencia de la primera cadena. Si hay cadenas repetidas, estas estarán inmediatas a la primera ocurrencia (porque está ordenado). Así, se lograba reducir el tiempo de lineal (comparar una a una las cadenas de texto) a logarítmica (que en el caso de la búsqueda binaria es bastante rápido).

En CodeProject.com, en la sección de algoritmos, puedes encontrar artículos relacionados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:student

Publicado por chuidiang (677 intervenciones) el 18/07/2005 23:44:27
Hola:

Una cosa básica al leer ficheros grandes, para conseguir efectividad, es leer muchos caracteres de golpe. Es mucho más lenta 1000 lecturas de un caracter que una lectura de 1000 caracteres. En vez de leer linea a linea o caracter a caracter, lee por ejemplo, de 1000 en 1000 y luego buscas en lo leido.

Se bueno.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar