Bộ lọc Bloom và băm hoàn hảo


7

Một Bloom lọc sử dụng một hàm băm để thành viên thử nghiệm trong một tập hợp , bằng cách kiểm tra nếu một mục hiện diện của không ở vị trí quy định.S

Để giảm thiểu ảnh hưởng của va chạm băm, nhiều hàm được sử dụng, mang lại ràng buộc xác suất nếu sử dụng hàm băm phổ quát.

Chúng tôi có thể sử dụng 10 bit cho mỗi phần tử để có tỷ lệ lỗi 'hợp lý'.

Nếu chúng ta có thể trực tiếp xây dựng hàm băm hoàn hảo cho tập , trong đó phần tử cuối cùng không có trong , thì chúng ta chỉ có thể sử dụng 1 bit cho mỗi phần tử và có khả năng phục hồi hoàn hảo.S+S

Những lý do cơ bản tại sao lý do này là sai?


1
lớn đến mức nào và tại sao 10 bit "hợp lý"? S
Pål GD

Tại sao kích thước S sẽ đi vào chơi? Tôi có thể đang thiếu một cái gì đó.
nicolas

2
Tại sao bạn nghĩ có gì đó không đúng với lý luận của bạn?
JeffE

@JeffE Thật kỳ lạ khi tìm thấy một sự tiết kiệm không gian khổng lồ khi bộ lọc nở hoa chất lượng được công nhận là sự khó hiểu của nó. Điều đó nói rằng, họ dựa vào các hàm băm phổ quát nên điều này có thể không gây ngạc nhiên. Tôi đoán trong trường hợp cực đoan, độ dài của chương trình cần thiết để mô tả hàm băm sẽ có một số kolmogorov (?) Bị ràng buộc làm hạn chế tính hiệu quả. tương tự như vậy, nếu chúng ta tìm thấy một hàm băm "tốt hơn" thì điều này có thể sẽ đến với một số chi phí không gian chương trình bù đắp cho lợi nhuận. nhưng tôi không biết gì về điều này, vì vậy câu hỏi của tôi ...
nicolas

2
Lý luận của bạn là hoàn hảo âm thanh. Bạn có thể phục hồi hoàn hảo chỉ bằng một bit cho mỗi phần tử với hàm băm hoàn hảo. Cấu trúc dữ liệu kết quả sẽ hoàn toàn vô dụng, bởi vì một hàm băm hoàn hảo sẽ mất quá nhiều thời gian để đánh giá, nhưng nó sẽ tiết kiệm rất nhiều không gian!
JeffE

Câu trả lời:


7

Tôi nghĩ rằng lý luận của bạn là về nguyên tắc chính xác. Băm hoàn hảo là một thay thế cho bộ lọc Bloom. Tuy nhiên, băm hoàn hảo năng động cổ điển là một kết quả lý thuyết hơn là một giải pháp thực tế. Băm cuckoo có lẽ là sự thay thế "hợp lý" hơn.

Lưu ý rằng cả băm hoàn hảo năng động và hiệu suất băm cuckoo tiêu chuẩn chỉ được khấu hao (bạn có thể cần phải xây dựng lại cấu trúc dữ liệu hoàn toàn theo thời gian). Ngoài ra bộ lọc Bloom dễ thực hiện hơn. Đây có thể là đối số cho việc sử dụng bộ lọc Bloom, đặc biệt là nếu bạn có thể sống với dương tính giả.


2

Tôi nghĩ rằng bộ lọc Bloom cung cấp cho bạn một cái gì đó mà hàm băm hoàn hảo không có - nó có thể kiểm tra tư cách thành viên.

PHF tôi biết trả về một số câu trả lời cho bất kỳ khóa nào bạn áp dụng chúng. Nếu khóa bạn cung cấp không nằm trong bộ băm của bạn, một số giá trị vẫn được cung cấp. Điều này tốt nếu bạn lưu trữ tất cả các khóa trong bộ của mình ở đâu đó và PHF chỉ cung cấp một con trỏ hoặc nếu bạn chỉ sử dụng PHF để tra cứu dữ liệu vệ tinh có kích thước trên các khóa bạn xảy ra biết để được trong cấu trúc của bạn. Tuy nhiên, kiểm tra thành viên là khó khăn hơn.O(1)

Cụ thể, việc lưu trữ phần tử riêng biệt không có lỗi đòi hỏi bit lưu trữ.nnlog2n

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.