За реализацию пока не брался.. Собираю информацию:)... Нашел алгоритм, применяемый в rsync.
http://www.openbsd.ru/docs/rsync.html
Особое внимание уделил именно механизму поиска сигнатур. Может такой алгоритм производительный?. Пока разобрался только с работой Adler32 (получение контрльных сум). Однако есть ряд вопросов, весь день провел в размышлениях и поиске информации. Описание начиная с поиска сигнатур - сверхкраткое...
Цитата:
На первом уровне формируется хеш-таблица размером в 2^16 элементов.
тут, я так понимаю просто выделяется память под элементы (динамический массив, напрример.
Цитата:
Ключом хеш-функции является быстрая 32 битная сигнатура.
тоесть полученная контрльная сумма последовательности из двух байт.
Цитата:
Для каждой пары быстрой и стойкой сигнатуры, полученной от Beta, вычисляется 16 битный хеш 32 битной сигнатуры, после чего все это сортируется согласно 16 битному хешу.
здесь уже не понятно, откуда взялась стойкая сигнатура? Так же не понятно каким образом вычисляется хеш и какой сигнатуры (чувствую, что нестойкой). На счет сортировки понятно вроде.
Цитата:
Каждый элемент хеш-таблицы указывает на первый элемент сортированных сигнатур, хеш значения которых совпадают, либо хранит в себе NULL, если сигнатур с таким хешом нет.
Тут тоже непонятно. Происходит сравнение сигнатур пар байт, содержащикся в файле со всевозможными пар-байтами, тоесть с выделенным и уже заполненным масивом?.
Цитата:
Номер элемента хеш-таблицы соответствует значению хеш-функции, а именно сумме двух половин быстрой 32 битной сигнатуры.
на счет суммы двух половин понятно, в принципе и начало понятно, номер же всегда должен чему-то соответствовать, только вот тут складывается впечатление, что используется еще какая-то хэш-таблица...
****
что усложняет ситуацию, так это то, что данный материал один-в-один выложен на многих ресурсах. Другими словами, после тщатильных поисков ни чего, кроме копий этой статьи найдено не было....