0
Tải bản đầy đủ (.ppt) (76 trang)

Hàm chèn phần tử vào bộ lọc

Một phần của tài liệu BÁO CÁO TỐT NGHIỆP NGHIÊN CỨU BỘ LỌC BLOOM VÀ ỨNG DỤNG (Trang 67 -73 )

• Nếu phạm vi phần tử phân biệt đã biết thì đơn giản 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. FIIN (k) N=N+1; For j=1 to h mi=hj[k] If OF[j][mi]==1 (*(C[j][mi]))++;

Else If OF[j][mi]==0 and C[j] [mi]==2x-1

Tạo bộ đếm (LCnew) với kích thước 2x bits

LCnew=2x;

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

Else

C[j][m]++;

Hàm chèn phần tử vào bộ lọc

• Chọn bộ lọc EBF thích hợp để chèn.

• Khi bộ đếm BC C[i][hi(k)] với 1≤ i h bị tràn thì tạo ra bộ đếm LCnew với độ dài là 2x (x

là độ dài của BC)̀ và giá trị của BC là con trỏ tới LCnew.

• Đồng thời OF[i][hi(k)] được gán là 1 để̉ chỉ ra rằng bộ đếm BC C[i][hi(k)] đã bị tràn và đã thêm LCnew.

Hàm thêm phần tử vào bộ lọc

INSERT(k)

If không biết phạm vi dữ liệu của luồng dữ liệu If k là item đầu tiên trong luồng dữ liệu

Tạo EBF mới có phạm vi M0;

Khởi tạo EBF vừa được khởi tạo EBF;

End if

MIDA(k,ktype);

Else

If k là item đầu tiên trong luồng dữ liệu

Tạo EBF mới có khả năng lưu trữ M item; // M is phạm vi dữ liệu của luồng dữ liệu

Khởi tạo EBF vừa mới tạo ra; End if

If thời điểm phân rã Decay();

• 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 item 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 mới gấp 10 lần cái trước.

• Ví dụ, nếu EBF đầu tiên (EBF1) được tạo ra để chứa các phần tử được 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)

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

Decay();

End if

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

Else

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

Tạo ra một EBF mới có phạm vi M010i;

End while

//M0 là phạm vi của EBF đầu tiên, //i là số EBF hiện tại

Kết luận

Một phần của tài liệu BÁO CÁO TỐT NGHIỆP NGHIÊN CỨU BỘ LỌC BLOOM VÀ ỨNG DỤNG (Trang 67 -73 )

×