Băm bộ số nguyên để kiểm tra bao gồm


10

Tôi đang tìm một hàm băm qua các bộ H (.) Và một mối quan hệ R (.,.) Để nếu A được bao gồm trong B thì R (H (A), H (B)). Tất nhiên, R (.,.) Phải dễ xác minh (thời gian không đổi) và H (A) nên được tính theo thời gian tuyến tính.

Một ví dụ về H và R là:

  • H(Một)= =xMột1<<(h(x)modk) , trong đó k là một số nguyên cố định và h (x) một hàm băm trên các số nguyên.
  • R (H (A), H (B)) = ((H (A) & H (B)) == H (A))

Có ví dụ nào tốt không? (tốt là khó xác định nhưng bằng trực giác nếu R (H (A), H (B)) thì whp A được bao gồm trong B).

Chỉnh sửa sau:

  1. Tôi đang tìm một họ hàm băm. Tôi có nhiều bộ; 3 - 8 yếu tố trong mỗi bộ; 90% trong số họ có 3 hoặc 4 yếu tố. Hàm băm ví dụ tôi đưa ra không được phân phối tốt cho trường hợp này.
  2. Số bit của H (.) (Trong ví dụ của tôi, k) phải nhỏ (tức là H (.) Phải vừa với một số nguyên hoặc dài).
  3. Một đặc tính tốt của R là nếu H (.) Có k bit thì R (.,.) Đúng với (3 ^ k - 2 ^ k) / 4 ^ k cặp, tức là. cho rất ít cặp.
  4. Bộ lọc Bloom đặc biệt tốt cho các bộ lớn. Tôi đã thử sử dụng BF cho vấn đề này, nhưng kết quả tối ưu chỉ có một chức năng.

(crosspost từ stackoverflow , tôi đã không nhận được câu trả lời đủ tốt)


"Whp" hơn cái gì? Bạn có cho rằng đầu vào của bạn đến từ một phân phối nhất định?
Jukka Suomela

Và bạn có thực sự đang tìm kiếm một hàm băm duy nhất, cố định và không phải là một nhóm hàm băm không?
Jukka Suomela

@Jukka: Tôi nghĩ rằng anh ta có nghĩa là nếu R (H (A), H (B)), thì với xác suất cao, chúng tôi kết luận rằng A là tập con của B. Xác suất được đưa ra qua các lựa chọn ngẫu nhiên của A và B, cũng như tung đồng xu nội bộ của H và R (nếu có).
MS Dousti

Tôi đang tìm một họ hàm băm. Các tập hợp của tôi có xu hướng nhỏ (3 - 8 phần tử mỗi phần; 90% trong số chúng có 3 hoặc 4 phần tử) vì vậy hàm băm ví dụ tôi đưa ra không được phân phối tốt.
Alexandru

Một đặc tính tốt của R là nếu H (.) Có n bit thì R (.,.) Đúng với (3 ^ n - 2 ^ n) / 4 ^ n cặp, tức là. cho rất ít cặp.
Alexandru

Câu trả lời:


10

(Câu trả lời này ban đầu là trong các bình luận nhưng tôi đang chuyển nó sang một câu trả lời riêng theo gợi ý của Suresh.)

Đối với ứng dụng của bạn với bộ rất nhỏ có thể bạn muốn số lượng Bloom hàm băm là khá lớn để giảm thiểu số lượng dương tính giả. Để tiết kiệm thời gian tính toán, tôi đề xuất biến thể sau của bộ lọc Bloom. Giả sử bạn có ba hàm băm truyền thống , , cho các phần tử mà mỗi phần tử tạo ra chuỗi -bit. Băm từng phần tử theo bitwise và của ba hàm băm này. Băm phần tử kết quả sẽ có khoảngkh1h2h3m2-3= =1/số 8thnhững cái. Băm mỗi bộ được đặt theo bitwise hoặc băm của các thành phần cấu thành của nó. Bởi vì các tập hợp của bạn có 3-8 phần tử, các giá trị băm sẽ nằm trong vùng lân cận của một nửa, đó có lẽ là những gì bạn muốn giữ tốt nhất tỷ lệ dương tính giả.

Sự khác biệt giữa chương trình trên là bộ lọc Bloom truyền thống tương tự như sự khác biệt giữa cổ điển mô hình Erdős ngẫu nhiên đồ thị ngẫu nhiên và biểu đồ -regular. Lược đồ trên có số hiệu quả của băm Bloom thay đổi một chút xung quanh giá trị trung bình của nhưng là khá lớn nên sự khác biệt này không quan trọng.Gn,pdkm/số 8m/số 8


Điều này đặc biệt tốt cho m lớn (32 hoặc 64) như bạn đề xuất.
Alexandru

4

Tôi sẽ thử sử dụng bộ lọc Bloom làm hàm băm của bạn với mối quan hệ giống như đề xuất của bạn. Việc tính toán kích thước bộ lọc tốt nhất và số hàm băm cho ứng dụng của bạn không quá khó; xem bài viết Bloom Filter của Wikipedia để lấy cảm hứng. Tùy thuộc vào mức độ xấu mà bạn muốn tránh dương tính giả, một cái gì đó như và có thể là đủ.mkm= =64k= =4


Đối với ứng dụng của bạn với các bộ rất nhỏ có lẽ bạn muốn khá lớn. Điều này có thể khá chậm với cách tiếp cận truyền thống. Tôi thay vì đề nghị như sau. k
Warren Schudy

h1h2h3m

Ưu điểm của biến thể này chỉ là nó sử dụng tốt hơn tính song song vốn có trong các hoạt động từ mà hầu hết các máy tính có.
Warren Schudy

Warren, bạn nên đăng bài này như một câu trả lời. Nó xứng đáng với một số phiếu bầu
Suresh Venkat

2
@Warren, @Suresh: Tôi nghĩ sẽ hợp lý hơn khi kết hợp hai câu trả lời liên quan chặt chẽ này, và sau đó xóa các bình luận. Nó sẽ dễ dàng hơn để làm theo, đặc biệt là vì một trong những câu trả lời đề cập đến các tham số được xác định trong khác.
Jukka Suomela
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.