Pergunta

Eu tenho minha 2ª tarefa para a classe C ++, que inclui cadeias de Markov. A tarefa é simples, mas não consigo descobrir qual é a melhor implementação ao ler chars a partir de arquivos.

Eu tenho um arquivo em torno de 300k. Uma das regras para a tarefa é usar classes de mapa e vetor. No mapa (a chave é apenas a string) e os valores serão os vetores. Quando estou lendo o arquivo, preciso começar a coletar pares de chaves.

Exemplo:

File1.txt
1234567890
1234567890

Se selecionar Markov K = 3, eu deveria ter no meu mapa:

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

A sugestão do professor é ler char por char, então meu algoritmo é o seguinte

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
}

}

Eu omito alguns outros detalhes. Minha principal pergunta é que, se eu tiver 318.000 caracteres, estarei fazendo o condicional toda vez que diminui muito o meu computador (novo Mac Pro). Um programa de amostra do professor executa esse arquivo em cerca de 5 segundos.

Não consigo descobrir qual é o melhor método para ler palavras de comprimento fixo de um arquivo de texto em C ++.

Obrigado!

Foi útil?

Solução

Você realmente cronometrou o programa? 318.000 condicionais devem ser um pedaço de bolo para o seu novo Mac Pro. Isso deve levar apenas microssegundos.

Otimização prematura é a raiz de todo o mal. Faça o seu programa funcionar primeiro, a otimização fica em segundo lugar.

Outras dicas

A leitura repetida de arquivos desacelerará o programa.

Leia o arquivo em blocos, do tamanho 1024, colocado em um buffer. Em seguida, processe esse buffer conforme necessário para a atribuição. Repita o próximo bloco até terminar o arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top