47 / 46 / 26
Регистрация: 16.06.2012
Сообщений: 177
|
||||||
1 | ||||||
Сравнение двух огромных (!) файлов16.10.2013, 10:50. Показов 2779. Ответов 4
Метки нет Все метки)
(
Привет. Потребовалось сравнивать текстовые файлы (несколько файлов сравниваются с другим):
Файл 1.txt содержит 1 миллион строк. Файл 2.txt содержит 10 миллионов строк. Файл 3.txt содержит 5 миллионов строк. Все их нужно сравнить с файлом keys.txt, который содержит 11 тысяч строк. Если в открытом файле текущая строка совпадает с одной из строк в файле keys.txt, то записывать её в выходной файл. Если сравнивать "в лоб", получается около 150 миллиардов операций. Сравнение в один поток даёт 1-3 операции за 1 мс. Подскажите, как уменьшить время сравнения. Добавлено через 10 минут p.s. Сейчас сравниваю так:
0
|
|
16.10.2013, 10:50 | |
Ответы с готовыми решениями:
4
Сравнение двух текстовых файлов
Сравнение даты изменения двух файлов с использованием edit Сравнение двух звуковых файлов. |
13095 / 5876 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||
16.10.2013, 16:40 | 2 | |||||
Скорость падает из-за того, что для проверки каждой строки заново с диска читается файл ключей. Файл ключей надо полностью в память загрузить - до начала проверок. Загрузить можно в экземпляр TStringList, например. Тогда проверка строки будет выглядеть так:
0
|
47 / 46 / 26
Регистрация: 16.06.2012
Сообщений: 177
|
|
16.10.2013, 18:09 [ТС] | 3 |
Спасибо, но! В файле ~11 тысяч строк. Что, если больше? А если строки длинные? (32 символа + каретка) * 11000. Память она не резиновая. На stackoverflow уже ответили. Использую TDictionary<string, boolean> скорость возросла в сотни раз.
0
|
16.10.2013, 18:31 | 5 |
Стандартное решение - использование Aho–Corasick string matching algorithm.
Этот алгоритм используют многие AV (с сотнями тысяч сигнатур в базе). В отличие от поиска в словаре за квадратичное время, время работы AC-автомата линейно. В одной из моих программ, таким образом в бинарных файлах отыскиваются вхождения первых 100,000 простых чисел. Думаю, это вполне сравнимо с вашими 11,000 строк.
0
|
16.10.2013, 18:31 | |
Помогаю со студенческими работами здесь
5
Сравнение файлов Сравнение текстовых файлов. Сравнение больших файлов Сравнение 2 xls файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |