Асоціативне змішування хешу


14

Розгляньте низькоокремо пов'язаний список у суто функціональній обстановці. Його похвали співали з вершин гори і продовжують співати. Тут я торкнуся однієї з її численних сильних сторін і питання про те, як вона може бути поширена на ширший клас суто функціональних послідовностей на основі дерев.

Проблема полягає в наступному: Ви хочете перевірити майже певну структурну рівність за час O (1) за допомогою сильного хешування. Якщо хеш-функція структурно рекурсивна, тобто хеш (x: xs) = змішати x (хеш xs), ви можете прозоро кешувати хеш-значення у списках та оновлювати їх у O (1) час, коли елемент перенесений на існуючий список . Більшість алгоритмів складання списків хешування є структурно рекурсивними, тому такий підхід є чітко використаним на практиці.

Але припустимо, що замість списків, пов’язаних окремо, у вас є дерева-послідовності, які підтримують об'єднання двох послідовностей довжиною O (n) за час O (log n). Щоб кеш хешу працював тут, функція змішування хешу повинна бути асоціативною, щоб дотримуватися ступеня свободи, яку має дерево, представляючи ту саму лінійну послідовність. Змішувач повинен приймати хеш-значення підтрубок і обчислювати хеш-значення всього дерева.

Тут я був півроку тому, коли я провів день, обмірковуючи та досліджуючи цю проблему. Схоже, в літературі про структуру даних не звертали уваги. Я зіткнувся з алгоритмом хешування Tillich-Zemor з криптографії. Він спирається на матричне множення 2х2 (яке є асоціативним), де біти 0 і 1 відповідають двом генераторам подалгебри із записами в поле Галуа.

Моє запитання: що я пропустив? У літературі про криптографію та структурах даних, які я не знайшов під час пошуку, повинні бути актуальні статті. Будемо дуже вдячні за будь-які коментарі щодо цієї проблеми та можливі місця для вивчення.

Редагувати: Мене цікавить це питання як щодо м'яких, так і криптографічно міцних кінців спектру. На більш м'якій стороні його можна використовувати для хеш-таблиць, де слід уникати зіткнень, але не катастрофічно. З сильної сторони його можна використовувати для перевірки рівності.

Відповіді:


2

Додано : Прочитавши коментарі Пер, я вважаю, що ця відповідь - це лише (погана) зміна алгоритму хешування Тілліча-Земора, про який вже йдеться в питанні. Я відкликаю цю відповідь, але залишаю її, сподіваючись, що вона (та коментарі) може бути інформативною для деяких читачів.


Редагувати : Попередня редакція цієї відповіді пропонувала використовувати моноїдну операцію на [ m ], але, як Пер зазначив у коментарі, бажано використовувати групову операцію.

Ця відповідь стосується побудови хеш-функції для хеш-таблиць, яку легко здійснити. Достовірної гарантії на якість не очікується.

Якщо припустити, що ви вже маєте хеш-функцію для кожного елемента послідовності до кінцевого набору [ m ] = {1, ..., m }, як щодо інтерпретації кожного елемента [ m ] як елемента в кінцевій групі G та з використанням групова операція на G ? Ви можете використовувати будь-яке відображення від [ m ] до G , але бажано, щоб відображення було ін’єктивним, щоб ми не втратили інформацію в хеш-значенні кожного елемента. Також бажано, щоб група не була комутативною, щоб хеш-функція могла фіксувати різницю в порядку елементів у послідовності.

Я не знаю багато про кінцеві групи, які дозволяють швидко працювати, але я думаю, що такі групи відомі в теорії кодування. Використання симетричної групи порядку принаймні m може бути не так вже й погано.


1
Так, хешинг Тілліха-Земора також використовує матричне множення. Те, що ви пропонуєте, не може працювати без додаткових модифікацій a la Tillich-Zemor. Наприклад, ви повинні уникати сингулярних матриць або отримуєте накопичення при 0, руйнуючи хеш-статистику. Тіллі-Земор працює над полем Галуа; Більш рання версія їх алгоритму мала проблеми, оскільки вони використовували генеруючий поліном, який мав неоптимальну статистику, тому конкретне поле Галуа може бути дуже важливим.
Пер Вогсен

@Per: Я бачу. Дякую за пояснення. Тоді як щодо використання будь-яких кінцевих груп? Я змінив відповідь на це.
Цуйосі Іто,

Я згоден. Найкращий спосіб генерування нескінченних родин груп - це матричні групи над кінцевими полями (див. Теорему класифікації для кінцевих простих груп), тому, схоже, алгоритми цієї форми будуть типом Тілліча-Земора.
Per Vognsen

@Per: Я не знайомий з теорією груп, і я не можу зрозуміти, чому матричні групи над кінцевими полями в цьому контексті кращі, ніж симетричні групи. Чи можете ви це детальніше розробити?
Цуйосі Іто,

1
Є кілька причин. Для одного, ви не можете ефективно обчислити великі симетричні групи, і вам потрібно, щоб групи були на порядку 2 ^ 128 для опору зіткнення. Навпаки, ви можете обчислити матриці над характерними 2 кінцевими полями дуже ефективно, особливо якщо ви вибираєте багаточлен генератора; це просто купа маніпуляцій.
Per Vognsen

1

Майже універсальне сімейство хеш-функцій

{ha(x)=aiximodp:aZp}

ha(x)+a|x|ha(y)=ha(xy)a|x|O(1)Zp

xyO(min(|x|,|y|)/p)


1

nn,ny,yny=H(y,y)HO(1)O(lgn)

H(x1,,xm)x1,,xmm

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.