Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Уникальность crc32 для файлов 
Author Message
basileus



PostPosted: Tue Dec 08, 2009 02:59    Post subject: Reply with quote

Вставлю лыко в строку.
Любой ХЭШ есть сжатие с потерями.
Представляется наиболее разумным следуюющий подход:
Выбираем некую константу, для размера блока, меньшую сегмента памяти.
Скажем, 4 килобайта.
Все файлы, требующие сравнения, длина которых меньше этого блока,
просто сравниваются друг с другом. (строим дерево, для ускорения сравнения, представляя данные как очень длинное число)
Файлы большей длины обсчитываем быстрой CRC(иной хэш), разбивая на блоки такой длины, чтобы в общая длина всех CRC блоков + CRC всего файла занимали этот блок.
Далее - аналогично маленьким файлам.
Но, еще с одной итерацией.
Если, по Дирихле, в узел дерева (ящик Дирихле), попадёт более одного элемента - проводим полное сравнение файлов.
Чем больше длина блока -тем лучше работает метод.
Расход памяти на посроение деревьев и выделение блоков может быть значительным.
Возможно, имеет делать предварительное построение еще одного дерева по длинам файлов и запускать этот алогритм для каждого узла отдельно.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group