![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
![]()
Дано 2 текстовых файла. Общий размер этих файлов, допустим, влазит в оперативку (не больше 3 Gb). Нужно удалить из второго файла все строки, которые уже есть в первом файле. Язык - free pascal.
Вопрос первый и главный: как хранить данные в памяти? Сначала попробовал "в лоб" в дельфях TStringList и LoadFromFile - 28 Mb текстовый файл грузил примерно минут 5-6. Этот вариант отпал сразу. Далее попробовал описать массив так: Код:
Дальше сделал просто массив байт: Код:
Все хорошо с памятью, но проблема с сортировкой такого массива - индексов же нет, что бы вычислить нужный элемент нужно пробегать с самого начала массива по размерам строк. Это медленно. Пока сделал без сортировки, но работает адски медленно в сравнении с аналогами..
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
А вариант загрузить в базу какой-либо СУБД и запросом сделать что нужно не катит?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
![]()
Ну это по по муравью из танка получится. Тут утилитка то по идее на пару килобайт должна быть.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]() Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
![]() |
![]() |
![]() |
#5 | |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]() Цитата:
В разработке: воспроизводственный контур ИТ
|
|
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
![]() Цитата:
Не понял насчет сортированного массива - чего сортировать, хеши? Это же бессмыслица имхо?
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
|
![]() |
![]() |
![]() |
#7 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
То есть, поиск хеша в наборе должен происходить по волшебству простым перебором, а не методом деления надвое?
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
![]() Цитата:
Дык какую хеш-функцию заюзать? Наверное будет лучше, если результат работы хеш-функции будет в виде Int32, или если этого недостаточно, то в Int64, чтоб был массив простых чисел. Отсюда следует, что MD5 вряд-ли подходит, ибо на выходе оно выдает строку типа 'a3f5dedf87ad78d789d56d5', что не лезет в регистр процессора никак за раз. Но вопрос по прежнему с уникальностью - хватит ли Int32 (int64) для того, что бы не было коллизий?
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
![]()
Не, все это байда - хеши фигеши. Нужно полюбому сортировать первый файл и только потом искать
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
![]() |
![]() |
![]() |
#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 |