Хеші фільтрів Bloom: більше чи більше?


15

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

Моє запитання: чим насправді різниця між двома хеш-функціями та однією з подвійною ентропією?

Це відбувається з огляду на те, що ви насправді робите з результатами своїх хеш-функцій: ви збираєтесь приймати (скажімо) 64-бітове хеш-значення і масштабувати його до розміру вашого бітового вектора, який, ймовірно, значно менший за 2 64 . Це явно перетворення, що втрачає ентропію (за винятком випадків, коли розмір хешу та ємність фільтра точно збігаються). Якщо припустити, що мій фільтр містить менше 2 32 записів, що не може розділити моє 64-бітове хеш-значення на два 32-бітні хеші та взяти лінійні комбінації з них? Або використовувати його для посіву PRNG?

Іншими словами, скільки інформації насправді потрібно знати про кожен елемент, який я вставляю у фільтр Bloom, щоб гарантувати стандартну помилкову позитивну швидкість? Або загалом, який взаємозв'язок між тим, наскільки добре я можу розрізнити елементи (скільки біт я використовую для їх опису) та тим, як працює мій фільтр Bloom?

2lg(м)м2(lg(-нlnp)-2lg(ln2))нp

Відповіді:


16

Ви праві вважати хеш-функції з точки зору "вироблених випадкових біт". Отже, якщо у вас є хеш-функція, яка виробляє 64-бітний хеш, ви можете розглядати це як 4 16-бітові хеші (шляхом розщеплення) тощо.

2lg(м)


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