Thuật tốn sinh tập bộ dị r-chunk

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu một số thuật toán lọc thư rác và ứng dụng trong lọc email nội bộ (Trang 27 - 30)

Việc so khớp hai xâu bất kì thực chất là so khớp lần lượt r vị trí liên tiếp (r

 ℓ). Do vậy, chắc chắn trong quá trình so khớp ta phải nhiều lần so khớp các đoạn cĩ độ dài r giống nhau. Cơng việc này làm tốn nhiều thời gian tính tốn. Để khắc phục nhược điểm đĩ, trong tập các xâu lưu trong S, ta cĩ thể loại những xâu trùng nhau để tăng hiệu suất sử dụng bộ nhớ. Tuy nhiên cơng việc này lại địi hỏi mất thêm thời gian tính tốn.

2.4.2.1. Thuật tốn

- Tư tưởng: Ta sử dụng bảng A kiểu Boolean cĩ n hàng và m cột với: n = 2r và m = ℓ – r + 1

Trong đĩ:

+ A[i, j] = 1: đoạn bit từ bit j đến bit thứ j + r – 1 của các s  S cĩ giá trị là i trong hệ cơ số 10.

+ A[i, j] = 0: trong trường hợp ngược lại.

- Bảng A được xây dựng bằng cách đọc lần lượt các đoạn r bit liên tiếp của các xâu trong S rồi tính giá trị thập phân của đoạn bit đĩ và gán A[i, j] tương ứng cĩ giá trị bằng 1.

Input: Tập các xâu S, ℓ, r Output: ChunkD(S,r)

Procedure CHUNK_DETECTOR_NSA Begin //Tạo bảng A

Khởi tạo mảng A[2r, ℓ – r + 1] với giá trị bằng 0; foreach s in S do

for j=1 to ℓ-r+1 do begin

i = giá trị thập phân của đoạn xâu nhị phân s[j…j+r]; A[i,j] = 1; end; //Sinh bộ dị dạng r-chunk D = ; For i:=0 to 2r do For j:=1 to ℓ-r+1 do

If A[i, j] = 0 then D := D (i2, j); End;

2.4.2.2. Độ phức tạp thuật tốn

Kích thước của bảng A phụ thuộc vào độ lớn của hai tham số ℓ và r. Với các giá trị tham số hợp lý thì hồn tồn cĩ thể lưu A ở bộ nhớ trong.

Các xâu bit cĩ đoạn r bit tương ứng giống nhau sẽ tự động được loại bỏ vì ta chỉ cần biết đoạn bit đĩ nằm ở vị trí nào và cĩ giá trị trong hệ 10 là bao nhiêu, ta lưu những đoạn trùng lặp nên tối ưu về bộ nhớ.

Vì A là bảng hai chiều, được lưu trữ trên bộ nhớ trong nên việc truy cập đến phần tử A[i,j] chỉ mất thời gian là O(1). Dù dữ liệu bảo vệ cĩ thay đổi, rất lớn đi nữa thì ta vẫn chỉ cần một bảng A kích thước cố định 2r dịng, (ℓ - r + 1) cột.

Độ phức tạp thuật tốn tạo mảng A là O(|S|(ℓ - r + 1)) và độ phức tạp thuật tốn sinh tập bộ dị là O(2r.(ℓ - r + 1)). Vậy độ phức tạp của thủ tục CHUNK_DETECTOR_NSA là (2r + |S|)(ℓ - r + 1) Ví dụ 2.4. Cho S = {01011; 11001; 01010; 10110; 00101} Ta cĩ ℓ = 5 và chọn r = 3. Vì vậy: Số dịng của bảng A: n = 2r = 23 = 8 Số cột của bảng A: m = ℓ – r + 1 = 5 – 3 + 1 = 3 * Xét xâu 1: s1 = 01011

+ Với j = 1: ta cĩ đoạn bit 010 (010)2 = (2)10 Vậy A[2, 1] = 1 + Với j = 2: ta cĩ đoạn bit 101

(101)2 = (5)10 Vậy A[5, 2] = 1

+ Với j = 3: ta cĩ đoạn bit 011 (011)2 = (3)10 Vậy A[3, 3] = 1 * Xét xâu 2: s2 = 11001

+ Với j = 1: ta được đoạn bit 110 (110)2 = (6)10 Vậy A[6, 1] = 1 + Với j = 2: ta được đoạn bit 100

(100)2 = (4)10 Vậy A[4, 2] = 1 +Với j = 3: ta cĩ đoạn bit 001 (001)2 = (1)10 Vậy A[1, 3] = 1 * Xét xâu 3: s3 = 01010

Ta thấy rằng A[2, 1] đã nhận giá trị là 1, do vậy đoạn bit 010 ở vị trí thứ nhất đã trùng với đoạn bit ở vị trí thứ nhất của một xâu trước đĩ. Vậy nên ta đã loại được các bit giống nhau.

+ Với j = 2: ta được đoạn bit 101 (101)2 = (5)10

Ta thấy rằng A[5, 1] đã nhận giá trị là 1, do vậy đoạn bit 010 ở vị trí thứ hai đã trùng với đoạn bit ở vị trí thứ hai của một xâu trước đĩ. Vậy nên ta đã loại được các bit giống nhau.

+ Với j = 3: ta được đoạn bit 010 (010)2 = (2)10 Vậy A[2, 3] = 1 Thực hiện tương tự với hai xâu cịn lại ta sẽ thu được kết quả là bảng A như sau: 1 2 3 0 0 0 0 1 1 0 1 2 1 1 1 3 0 1 1 4 0 1 0 5 1 1 1 6 1 0 1 7 0 0 0

Như vậy, ta sẽ được tập bộ dị r – chunk là:

(000,1) (000,2) (000,3)

(011,1) (001,2) (100,3)

(100,1) (110,2) (111,3)

(111,1) (111,2)

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu một số thuật toán lọc thư rác và ứng dụng trong lọc email nội bộ (Trang 27 - 30)

Tải bản đầy đủ (PDF)

(58 trang)