Please read the new rule regarding the restriction on the use of AI tools. ×

Хешируемое множество со сравнением за O(1)

Revision ru1, by teraqqq, 2021-03-27 13:03:26

Итак, многие из Вас знают как можно легко и просто хешировать множества, например, множество $$$s = { s_1, s_2, ..., s_n }$$$ можно захешировать числом $$$x^{s_1} + x^{s_2} + ... + x^{s_n}$$$ или даже $$$x_{s_1} \text{xor} ... \text{xor} x_{s_n}$$$ (где $$$x$$$ -- какое-то случайное число). С такими хешом можно поддерживать операции добавления и удаления элемента, слияния множеств, нахождения симметричной разности множеств и так далее. Но у такого подхода есть и достаточно серьезный минус, например, имея на руках только хеш мы никак не определим, содержится ли элемент в нашем множестве, какие вообще элементы содержатся в этом множестве ну и так далее. После недолгих рассуждений придумал простую (на этом надо сделать акцент) структуру данных, основанную на дереве отрезков, которая позволяет совершать различные операции с множествами и сравнивать эти самые множества за O(1).

Tags дерево отрезков, хеширование, структуры данных, жизнь прекрасна

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru10 Russian teraqqq 2022-02-25 14:35:46 21
ru9 Russian teraqqq 2022-02-25 13:54:51 20
ru8 Russian teraqqq 2022-02-25 13:53:54 146
ru7 Russian teraqqq 2022-02-25 13:39:28 2259 Мелкая правка: 'научиться <<хешировать>> деки и по' -> 'научиться "хешировать" деки и по' (опубликовано)
ru6 Russian teraqqq 2021-03-27 20:26:21 1570
ru5 Russian teraqqq 2021-03-27 15:51:21 16 Мелкая правка: ' класс $h$ эквивалентности, который ' -> ' класс $h$, который '
ru4 Russian teraqqq 2021-03-27 15:50:32 128
ru3 Russian teraqqq 2021-03-27 14:33:50 28
ru2 Russian teraqqq 2021-03-27 14:12:52 5245 Мелкая правка: 'дачах.\n\n\n\n[cut]\n\n\n\nИтак, ' -> 'дачах.\n\nИтак, '
ru1 Russian teraqqq 2021-03-27 13:03:26 917 Первая редакция (сохранено в черновиках)