Я ищу хэш-функцию над множествами H (.) И отношением R (.,.), Чтобы, если A входит в B, то R (H (A), H (B)). Конечно, R (.,.) Должно легко проверяться (постоянное время), а H (A) должно вычисляться за линейное время.
Одним из примеров H и R является:
- , где k - фиксированное целое число, а h (x) - хеш-функция над целыми числами.
- R (H (A), H (B)) = ((H (A) и H (B)) == H (A))
Есть ли другие хорошие примеры? (хорошо трудно определить, но интуитивно, если R (H (A), H (B)), тогда whp A включен в B).
Позже редактировать :
- Я ищу семейство хэш-функций. У меня много комплектов; 3 - 8 элементов в каждом наборе; 90% из них имеют 3 или 4 элемента. Пример хэш-функции, который я дал, не очень хорошо распределен для этого случая.
- Число битов H (.) (В моем примере k), которое должно быть небольшим (т. Е. H (.), Должно соответствовать целому или длинному).
- Одно приятное свойство R состоит в том, что если H (.) Имеет k битов, то R (.,.) Истинно для (3 ^ k - 2 ^ k) / 4 ^ k пар, т.е. для очень немногих пар.
- Фильтры Блума особенно хороши для больших наборов. Я пытался использовать BF для этой проблемы, но оптимальные результаты были только с одной функцией.
(кросс-пост из stackoverflow , я не получил достаточно хороший ответ)