5. Cấu trúc của luận văn
2.3 Bộ lọc Bloom (BL)
Bộ lọc Bloom [9] được sử dụng để mô tả thông tin dịch vụ, BL là những cấu trúc dữ liệu nén nhỏ gọn cho các quyết định thành viên nhanh. Như kỹ thuật mã hóa băm cung cấp một sự thay đổi giữa việc sử dụng không gian hoặc kích cỡ băm và thời gian, bộ lọc Bloom được tìm thấy ở nhiều ứng dụng như tăng tốc độ tra cứu Cache, truy vấn lọc định tuyến và tìm kiếm văn bản miễn phí.
Xét một tập hợp A = {1, 2, ..., an } của n phần tử. Bộ lọc Bloom mô tả
thành viên của A sử dụng vector v của m phần tử (mỗi phần tử là 1 bit), ban đầu tất cả các thiết lập là 0, và sau đó chọn k hàm băm độc lập, h1, h2,..., hk, mỗi hàm có miền xác định từ 1 đến m. Với mỗi phần tử a A, các bit ở vị trí h1(a), h2(a), ..., hk(a) trong v được thiết lập là 1. Một bit cụ thể có thể được
thiết lập là 1 nhiều lần. Cho một thành viên trên b, các bit ở vị trí h1(b),
h2(b), ..., hk(b) được kiểm tra. Nếu tất cả chúng là 0, thì chắc chắn b A. Ngược lại, chúng ta phỏng đoán rằng b là thuộc tập này.
Hình 2.10. Bộ lọc Bloom với hàm băm k=4
Xây dựng một bộ lọc Bloom
Các thủ tục sau đây xây dựng m bits, Bloom tương ứng với một tập hợp A và sử dụng h1, h2,..., hk hàm băm:
Procedure BloomFilter(set A, hash_function, integer m)
returns filter
filter = allocate m bits initialized to 0
foreach ai in A:
filter [hj(ai)] = 1
end foreach end foreach
return Yes
Nếu ai là thành viên của một tập A, trong kết quả lọc Bloom V tất cả các bits thu được tương ứng với giá trị băm của ai được thiết lập là 1. Thử nghiệm cho các thành viên của một phần tử elm là tương đương với thử nghiệm mà tất cả các bit tương ứng của V được thiết lập:
Procedure MembershipTest (elm, filter, hash_functions)
returns yes/no
foreach hash function hj:
if filter[hj(elm)] != 1 return No
end foreach return Yes