Марков C ++ Читать из производительности файла

StackOverflow https://stackoverflow.com/questions/2153856

  •  23-09-2019
  •  | 
  •  

Вопрос

У меня есть второе назначение для класса C ++, которое включает в себя цепи Маркова. Назначение простое, но я не могу выяснить, какая лучшая реализация при чтении Chars из файлов.

У меня есть файл около 300 тысяч. Одним из правил назначения является использование классов карты и векторов. В карте (ключ - только строка), а значения будут векторами. Когда я читаю из файла, мне нужно начать собирать пары ключей.

Пример:

File1.txt
1234567890
1234567890

Если выберите Марков K = 3, я должен иметь на своей карте:

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

Предложение профессора состоит в том, чтобы прочитать Чар Чар, поэтому мой алгоритм является следующим

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
}

}

Я опускаю некоторые другие детали. Мой главный вопрос заключается в том, что если у меня будет 318 000 символов, я буду делать все условные каждый раз, что сильно замедляет мой компьютер (новый Mac Pro). Образец программы от профессора выполняет этот файл примерно через 5 секунд.

Я не могу выяснить, какой метод лучше всего читать слова с фиксированной длиной из текстового файла в C ++.

Спасибо!

Это было полезно?

Решение

Вы действительно рассчитали программу? 318 000 условий должны быть кусочком торта для вашего нового Mac Pro. Это должно занять только микросекунд.

Превосходная оптимизация является корнем всего зла. Заставьте свою программу работать в первую очередь, оптимизация заняла второе место.

Другие советы

Повторное чтение файлов замедлит программу.

Прочитайте файл в блоках, SAM Size 1024, положите в буфер. Затем обработайте этот буфер по мере необходимости для назначения. Повторите для следующего блока, пока вы не закончите с файлом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top