|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.10.2013, 17:09 | #1 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Удалить дубликаты строк
Дано 2 текстовых файла. Общий размер этих файлов, допустим, влазит в оперативку (не больше 3 Gb). Нужно удалить из второго файла все строки, которые уже есть в первом файле. Язык - free pascal.
Вопрос первый и главный: как хранить данные в памяти? Сначала попробовал "в лоб" в дельфях TStringList и LoadFromFile - 28 Mb текстовый файл грузил примерно минут 5-6. Этот вариант отпал сразу. Далее попробовал описать массив так: Код:
Дальше сделал просто массив байт: Код:
Все хорошо с памятью, но проблема с сортировкой такого массива - индексов же нет, что бы вычислить нужный элемент нужно пробегать с самого начала массива по размерам строк. Это медленно. Пока сделал без сортировки, но работает адски медленно в сравнении с аналогами..
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
05.10.2013, 17:41 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А вариант загрузить в базу какой-либо СУБД и запросом сделать что нужно не катит?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
05.10.2013, 17:46 | #3 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Ну это по по муравью из танка получится. Тут утилитка то по идее на пару килобайт должна быть.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
05.10.2013, 17:52 | #4 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
05.10.2013, 18:51 | #5 | |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,777
|
Цитата:
|
|
05.10.2013, 18:55 | #6 | |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Цитата:
Не понял насчет сортированного массива - чего сортировать, хеши? Это же бессмыслица имхо?
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
|
05.10.2013, 19:07 | #7 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,777
|
|
05.10.2013, 19:13 | #8 | |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Цитата:
Дык какую хеш-функцию заюзать? Наверное будет лучше, если результат работы хеш-функции будет в виде Int32, или если этого недостаточно, то в Int64, чтоб был массив простых чисел. Отсюда следует, что MD5 вряд-ли подходит, ибо на выходе оно выдает строку типа 'a3f5dedf87ad78d789d56d5', что не лезет в регистр процессора никак за раз. Но вопрос по прежнему с уникальностью - хватит ли Int32 (int64) для того, что бы не было коллизий?
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
|
06.10.2013, 16:03 | #9 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Не, все это байда - хеши фигеши. Нужно полюбому сортировать первый файл и только потом искать
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
06.10.2013, 16:26 | #10 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
И в данном случае лучше брать не крипографический хеш, а какой-нибудь быстрый (CRC). для избавления от возможных коллизий, можно его (хеш) чуть улучшить. Например, добавить в начало хеша длину строки. А сортировать нужно как раз по хешу. И его использовать для поиска совпадения. Впрочем, мне почему то кажется, что Вы уже для себя всё решили! Последний раз редактировалось Serge_Bliznykov; 06.10.2013 в 16:29. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удалить дубликаты из разных книг (листов) | mojo | Microsoft Office Excel | 2 | 04.08.2012 13:28 |
удалить много строк из listbox delphi | SonicBob | Помощь студентам | 3 | 19.09.2011 10:46 |
удалить дубликаты в stringlist | yuran111 | Общие вопросы Delphi | 3 | 29.04.2011 18:24 |
Удалить повторы строк | Federal | Помощь студентам | 16 | 27.02.2011 02:37 |
Как в удалить кучу строк, через одну? | levohotnik | Microsoft Office Excel | 6 | 09.09.2010 21:08 |