Đặt C[j][mi] trỏ tới LCnew; 10 OF[j][mi]=1;

Một phần của tài liệu Đồ án tốt nghiệp đại học nghiên cứu bộ lọc bloom và ứng dụng (Trang 54 - 55)

10. OF[j][mi]=1; 11. Else 12. C[j][mi]++; 13. End If 14. End If 15. End For

Như ta có thể thấy trong thủ tục FIIN(k), nếu lượng phần tử khác nhau được lưu trữ trong bộ lọc đã biết thì đơn giản chúng ta chỉ cần tăng các bộ đếm C[1][h1(k)], C[2][h2(k)],…, C[h][hh(k)] thêm 1 khi thêm vào phần tử k. Khi một bộ đếm BC C[i][hi(k)] với 1≤ i h bị tràn thì trước tiên ta tạo ra một bộ đếm LCnew lớn hơn mà độ dài của nó được khởi tạo ban đầu

là 2x (x là độ dài của bộ đếm BC) và giá trị của C[i][hi(k)] được biến đổi thành một con trỏ trỏ tới LCnew, đồng thời OF[i][hi(k)] được gán là 1 để chỉ ra rằng bộ đếm C[i][hi(k)] đã bị tràn và đã thêm LCnew.

Trong điều kiện ta không biết phạm vi dữ liệu của luồng dữ liệu, đầu tiên chúng ta xây dựng EBF có kích thước là M0 với phạm vi từ 1 tới R1. Nếu các phần tử trong luồng dữ liệu mà ở ngoài phạm vi của EBF mới tạo gần nhất thì một EBF mới sẽ được tạo ra với kích thước lớn hơn trước, phạm vi của EBF gần đây nhất gấp 10 lần cái trước. Ví dụ, nếu EBF đầu

tiên (EBF1) được thiết kế để tạo ra các phần tử sắp xếp từ 1 tới R1, khi một phần tử vượt ra ngoài [1, R1] thì ta tạo ra một EBF mới để xử lý các phần tử trong phạm vi [R1 + 1, R2] trong đó R2 = 10 * R1. Thủ tục MIDA(k) xử lý tình huống như vậy, quá trình phân rã vẫn được kiểm soát trong trường hợp này.

MIDA(k)

1. If thời điểm phân rã

2. Decay();

3. End if

4. If giá trị của k thuộc phạm vi của một EBF nào đó5. Chọn EBF thích hợp cho k theo giá trị của nó; 5. Chọn EBF thích hợp cho k theo giá trị của nó; 6. FIIN(k);

7. Else

8. While giá trị k không thuộc phạm vị của EBF nào9. Do 9. Do

Một phần của tài liệu Đồ án tốt nghiệp đại học nghiên cứu bộ lọc bloom và ứng dụng (Trang 54 - 55)