Розгляньте низькоокремо пов'язаний список у суто функціональній обстановці. Його похвали співали з вершин гори і продовжують співати. Тут я торкнуся однієї з її численних сильних сторін і питання про те, як вона може бути поширена на ширший клас суто функціональних послідовностей на основі дерев.
Проблема полягає в наступному: Ви хочете перевірити майже певну структурну рівність за час O (1) за допомогою сильного хешування. Якщо хеш-функція структурно рекурсивна, тобто хеш (x: xs) = змішати x (хеш xs), ви можете прозоро кешувати хеш-значення у списках та оновлювати їх у O (1) час, коли елемент перенесений на існуючий список . Більшість алгоритмів складання списків хешування є структурно рекурсивними, тому такий підхід є чітко використаним на практиці.
Але припустимо, що замість списків, пов’язаних окремо, у вас є дерева-послідовності, які підтримують об'єднання двох послідовностей довжиною O (n) за час O (log n). Щоб кеш хешу працював тут, функція змішування хешу повинна бути асоціативною, щоб дотримуватися ступеня свободи, яку має дерево, представляючи ту саму лінійну послідовність. Змішувач повинен приймати хеш-значення підтрубок і обчислювати хеш-значення всього дерева.
Тут я був півроку тому, коли я провів день, обмірковуючи та досліджуючи цю проблему. Схоже, в літературі про структуру даних не звертали уваги. Я зіткнувся з алгоритмом хешування Tillich-Zemor з криптографії. Він спирається на матричне множення 2х2 (яке є асоціативним), де біти 0 і 1 відповідають двом генераторам подалгебри із записами в поле Галуа.
Моє запитання: що я пропустив? У літературі про криптографію та структурах даних, які я не знайшов під час пошуку, повинні бути актуальні статті. Будемо дуже вдячні за будь-які коментарі щодо цієї проблеми та можливі місця для вивчення.
Редагувати: Мене цікавить це питання як щодо м'яких, так і криптографічно міцних кінців спектру. На більш м'якій стороні його можна використовувати для хеш-таблиць, де слід уникати зіткнень, але не катастрофічно. З сильної сторони його можна використовувати для перевірки рівності.