Re: Хэш периодической последовательности
От: batu Украина  
Дата: 10.07.10 19:40
Оценка:
Здравствуйте, sz36, Вы писали:

S>Hi, All!


S> Существует периодическая последовательность данных, в которой непрерывно друг за другом идут одинаковые блоки данных по 64 бит. Границ между блоками нет, то есть, начиная с любого места мы можем взять 64 бита данных — это некий код, который раз за разом повторяется.


S> Вопрос. Существует ли какой-нибудь алгоритм сравнения двух таких последовательностей, помимо брутфорса (то есть сдвига на единичку и сравнения 64*64)? Может, например, можно вычислить какой-нибудь хеш, значение которого не будет зависеть от места, с которого мы начали его вычислять?

Прийдется повторится. Лучше никто не предложил. Итак, адресация у тебя побайтная. Т.е. 64 разряда это 8 байт. Берем то что проверяем (эталон) и собираем массив из 8 элементов по 4 байта первый из которых эталон, а остальные получается сдвигом на 1, 2, 3..7 эталона. Сдвиг больше чем на 8 не имеет смысла, это уже другой байт получится. Обозначим байты этого массива Aij -где i-количество сдвигов относительно эталона (от 0 до 7). j-номер байта эталона или сдвинутого элемента (от 0 до 7).
Начинаем проверку входящей последовательности со второго байта, и сравниваем его со всеми элементами Ai2. Если ни один не совпадет, то нет смысла проверять дальше. Все возможные комбинации перебраны. Середина (а именно второй байт) не совпадает ни с каким сдвигом. Это означает что у первого байта входной последовательности совпадений с эталоном нет. Можно смело проверять следующий (третий) байт входящей последовательности на те же элементы Ai2.
Если какой-то (i) из сдвигов совпадает, то проверяем третий байт входной последовательности на совпадение с элементом Ai3 (подозреваемй сдвиг уже определен как i). Итак, должны совпасть все байты вплоть до 6-го (Ai6). Первый и последний байт проверяется соответсвующей логической операцией что уже просто так как подозреваемый сдвиг (i) определен.
Фактически хэшем является набор сдвинутых вторых байтов. Эдакий хэш-массив. И этот хэш продолжается третьим и т.д. до шестого байта.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.