Bộ lọc băm: nhiều hay lớn hơn?


15

Khi thực hiện bộ lọc Bloom, cách tiếp cận truyền thống yêu cầu nhiều hàm băm độc lập. Kirsch và Mitzenmacher đã chỉ ra rằng bạn thực sự chỉ cần hai và có thể tạo ra phần còn lại dưới dạng kết hợp tuyến tính của chúng.

Câu hỏi của tôi là: cái gì thực sự là sự khác biệt giữa hai hàm băm và một với hai lần entropy?

Điều này xuất phát từ việc xem xét những gì bạn thực sự làm với đầu ra của hàm băm: bạn sẽ lấy giá trị băm 64 bit của mình và chia tỷ lệ thành kích thước của vectơ bit của bạn, có thể nhỏ hơn đáng kể 2 64 . Đây rõ ràng là một biến đổi mất entropy (trừ trường hợp hiếm hoi kích thước băm và công suất lọc của bạn hoàn toàn trùng khớp). Giả sử bộ lọc của tôi có ít hơn 2 32 mục, điều gì ngăn tôi chia giá trị băm 64 bit của mình thành hai giá trị băm 32 bit và thực hiện kết hợp tuyến tính của các mục đó? Hoặc sử dụng nó để gieo PRNG?

Nói cách khác, tôi thực sự cần biết bao nhiêu thông tin về mỗi yếu tố tôi chèn vào bộ lọc Bloom để đảm bảo tỷ lệ dương tính giả giữ chuẩn? Hay nói chung hơn, mối quan hệ giữa mức độ tôi có thể phân biệt các yếu tố (tôi sử dụng bao nhiêu bit để mô tả chúng) và bộ lọc Bloom của tôi hoạt động như thế nào?

Có vẻ như tôi có thể lấy đi các bit cho kích thước bộ lọc là hoặc tương đương để lưu trữ phần tử có xác suất dương ....2lg(m)m2(lg(-nlnp)-2lg(ln2))np

Câu trả lời:


16

Bạn có quyền nghĩ về các hàm băm theo "các bit ngẫu nhiên được tạo ra". Vì vậy, nếu bạn có hàm băm tạo ra hàm băm 64 bit, bạn có thể coi là 4 băm 16 bit (bằng cách tách), v.v.

Đối với sơ đồ được mô tả ở trên (nên được quy cho Dillinger và Manolios; Kirsch / Mitzenmacher chỉ phân tích nó), điều đó có nghĩa là bạn đúng; nếu bạn có một hàm băm duy nhất với bit, bạn sẽ ổn.2lg(m)


5
Chào mừng đến với cstheory, Michael :)
Suresh Venkat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.