Мелочь, но важно.

Apr 26, 2013 00:33

Подумал я о необходимости хеш-функции для множеств. Чтобы из хеша для set и элемента a быстро получить hash setHash a. Ну, и чтобы порядок получения множества не влиял на результат: hash (hash set a) b = hash (hash set b) a.

Пришел к выводу, что это возможно с помощью hash hashSet a = hashSet `xor` cryptoHash aВроде, всё соблюдается. Особенно, ( Read more... )

криптография

Leave a comment

Comments 7

nponeccop April 25 2013, 21:18:23 UTC
Ещё решение со сложением по модулю.

Reply

thesz April 25 2013, 22:13:33 UTC
Вот спасибо!

Reply


soloviewoff April 25 2013, 21:31:32 UTC
Да, вроде нормально - благодаря коммутативности xor'а. Дополнительный бонус - можно обновлять таким же макаром хеш и при удалении.

При добавлении дубликатов надо осторожно.

Reply

thesz April 25 2013, 22:13:12 UTC
Правильные множества не содержат дубликатов.

Плюс, тут рядом дали ссылку на решение со сложением, там и дубликаты правильно отработаны будут.

Reply

soloviewoff April 25 2013, 22:24:08 UTC
Я имел в виду, что если поддерживать значение хеша для множества как член класса (и обновлять при добавлении или удалении элемента), то при добавлении элемента важно его обновить, только если элемент был добавлен, а не содержится уже.

Reply

thesz April 25 2013, 22:31:16 UTC
Не надо обновлять. Только неприятностей наживете.

Лучше создавать новое.

Reply


antilamer April 26 2013, 02:49:35 UTC
Ага, как-то раз такое делал (на java, но с immutable деревьями) и использовал точно такой же хеш.

Reply


Leave a comment

Up