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