Từ định lý 2.3, mệnh đề 2.5 cùng các nhận xét trên, thuật toán Itemhide sau đây được đề xuất. Thuật toán này đã được công bố trong công trình [VIII] được trình bày cụ thể như sau,
Thuật toán 2.4
Cho bảng T gồm N giao tác trên M mục, cho ngưỡng phổ biến và giả thiết rằng ta đã xây dựng được họ các tập mục phổ biến P. Gọi H P là tập mục nhạy cảm cần ẩn. Khi đó thuật toán ẩn tập mục H được thực hiện qua các bước sau đây.
Bước 1: Xác định họ V các tập mục chứa H trong Coatom(P) , đây chính là các tập mục chứa các mục dữ liệu cần sửa
V = { XCoatom(P) | HX }
Bước 2: Với mỗi mục A H và với mỗi tập mục X trong V lượng giá xem có nên sửa mục A trong X không? Tiêu chuẩn đặt ra là việc sửa mục A trong X là cố gắng hạn chế việc gây hiệu ứng phụ đến các tập con thực sự chứa A của X. Gọi M(H) là
57
hàm cho giá trị là bộ tứ (A, X, Z, ) trong đó là giá trị lớn nhất trong số các độ phổ biến tìm được qua các hàm L(A, X), cụ thể là, M(H) = (A, X, Z, ), = max { |
L(A, X) = Z/, A H, X V}. Sau đó, gọi thủ tục Update(A, X, T, d), với d = min
{(H) (1), (X), (Z) }.
Bước 2 sẽ được lặp đến khi (H) = 1.
AlgorithmItemhide
Input: T-Bảng trị 0/1 thể hiện các giao tác trên tập mục nền U,
- Ngưỡng phổ biến,
P- Họ các tập mục phổ biến theo ngưỡng. H -Tập mục nhạy cảmcần ẩn, H P.
Output: Bảng kết quả T chứa các giao tác với tập mục nhạy cảm đã được ần.
Begin s = (H); while (s > – 1) do Compute V ={XCoatom(P) | H X }; Let (A, X, Z, ) = M(H); Computed= min{s – ( – 1), (X), (Z)}; Update(A, X, T, d); s = s – d; endwhile; returnT; EndItemhide.
Trong thuật toán Itemhide, hàm M(H) cho giá trị là bộ tứ (A, X, Z, ), trong đó là giá trị lớn nhất trong số các độ phổ biến tìm được qua các hàm L(A, X) với hàm L(A, X) trả về tập mục có độ phổ biến nhỏ nhất trong số các tập mục chứa A, là tập con thực sự của X. Nói cách khác, hàm L(A, X) trả về tập mục có nguy cơ bị ẩn nhầm cao nhất khi sửa A trong X. Sau đó, hàm M(H) sẽ xác định được tập có độ phổ biến lớn nhất trong số các tập có nguy cơ bị ẩn nhầm cao nhất. Đây chính là điểm làm hạn chế ẩn nhầm tập mục hay nói cách khác là hạn chế việc tạo ra hiệu ứng phụ khi ẩn tập mục với thuật toán Itemhide.
58
Thí dụ 2.10
Với dữ liệu cho trong thí dụ 1.1, ta chọn ngưỡng phổ biến = 4 và do đó họ các tập mục phổ biến với độ phổ biến tương ứng tạo thành giàn giao P = {ABE/4, ADE/4, AB/4, BE/8, AE/10, AD/4, DE/9, CE/7, A/10, B/11, C/8, D12, E/18} trên tập nền U = ABCDE. Giả sử ta cần ẩn tập mục nhạy cảm H = AE/10. Qua đồ thị biểu diễn giàn giao P ta thấy rằng sau khi ẩn AE thì hai tập mục ABE và ADE sẽ bị ẩn theo là đúng. Như vậy kết quả dự đoán sẽ là P = {AB, BE, AD, DE, CE, A, B, C, D, E}. Ta có, Gen(P)={ABE, ADE, AB, BE, AD, DE, CE, AB, C}, Coatom(P) =
MAX(Gen(P)) = {ABE, ADE, CE}, V = {ABE, ADE}, s = (H) = 10. Ta lần lượt xét các tập mục trong V.
Xét tập mục ABE:
+ Với A H ta có L(A, ABE) = min{AB/4, AE/10} = AB/4, + Với E H ta có L(E, ABE) = min{AE/10, BE/8} = BE/8. Tương tự, xét tập mục ADE:
+ L(A, ADE) = min{AE/10, AD/4} = AD/4,
+ L(E, ADE) = min{AE/10, DE/9} = DE/9.
Tổng hợp 4 trường hợp trên ta được max {AB/4, BE/8, AD/4, DE/9} = DE/9.
Như vậy M(H) =M(AE) = (E, ADE, DE, 9) .
Kết luận: cần cập nhật mục E trong tập mục ADE. Ta có d = min {7, 4, 5} = 4. Thủ tục Update(E, ADE,T,4) sẽ cho ta kết quả ADE/0 (bị ẩn), AE/6, DE/5.
Tiếp tục, do (ADE) = 0 < = 4 nên tập mục này bị ẩn, ta loại ra khỏi P. Ta tính lại Coatom(P) = {ABE/4, AD/4, DE/5, CE/7}, do đó V = {ABE}. Ta có
L(A, ABE) = min{AB/4, AE/6} = AB/4;L(E, ABE) = min{AE/6, BE/8} = AE/6. max {AB/4, AE/6} = AE/6, do đó M(H) = M(AE) = (E, ABE, AE, 6).
Ta cập nhật E trong ABE. Thủ tục Update(E, ABE, T, 3) cho ta thêm hai tập mục bị ẩn và do đó chúng bị loại khỏi danh mục các tập mục thường xuyên là
59
Ta được P={AB/4, BE/5, AD/4, DE/5, CE/7, A/10, B/11, C/8, D/12, E/11}. Cũng với dữ liệu trên, nếu sử dụng thuật toán MaxMin trong [28] để ẩn tập mục nhạy cảm AE thì các bước tiến hành như sau:
+ Bước 1: Xóa AE và các tập cha của AE (trong trường hợp này là ABE, ADE) ra khỏi giàn. Lúc này giàn các tập phổ biến còn lại được minh họa trong hình 2.3 như sau:
Hình 2.3. Giàn các tập phổ biến sau khi xóa tập nhạy cảm
+ Bước 2: Tính lại cận trên Bd+ của giàn các tập phổ biến như trong hình 2.3
Bd+={AB/4, BE/8, AD/4, DE/9, CE/7}
+ Bước 3: Tập cần ẩn là AE nên ta sẽ lần lượt tính các vi-list với vi là các mục dữ liệu tạo nên tập nhạy cảm cần ẩn. Thí dụ, tập cần ẩn là AE thì vi là các mục A, E . Ta tính A-list và E-list như sau:
A-list = {AB/4, AD/4}. Sau đó, tìm tập trong A-list có độ phổ biến bé nhất. Do độ phổ biến của các tập này bằng nhau nên ta chọn tập ngẫu nhiên là AB/4.
E-list = {BE/8, DE/9, CE/7} Sau đó, tìm tập trong E-list có độ phổ biến bé nhất. Trong trường hợp này, ta chọn được tập CE/7.
Tiếp theo, với các tập AB/4, CE/7 ta sẽ chọn tập có độ phổ biến lớn nhất là CE/7
Kết luận: Ta sẽ cập nhật lại mục E trong tập AE.
+ Bước 4: sẽ lặp lại bước 2 đến khi độ phổ biến của AE bằng 3 thì dừng.
Nhận xét: So với thuật toán MaxMin, thuật toán ItemHide có các ưu điểm sau: 1. Thuật toán ItemHide được xây dựng dựa trên cơ sở toán học là lý thuyết giàn giao, do đó thuật toán rõ ràng, trong sáng và dễ hiểu. Nếu gọi số mục trong tập nền là
AD/ 4 DE/9 CE/7 BE/8 AB/4 A/10 B/11 E/18 D/1 2 C/8
60
n, lực lượng của họ các tập phổ biến P là m. Ta tổ chức m tập trong P dưới dạng cây tìm kiếm, do đó việc tìm và cập nhật mỗi tập mục thường xuyên trong P đòi hỏi chi phí log(m). Các thao tác trong vòng lặp đòi hỏi thời gian m. Giả sử mỗi lần lặp ta giảm s được 1 đơn vị. Vậy ta cần tổng cộng (s ).m.log(m) thao tác trên tập n
phần tử. Mỗi phép toán trên các tập n phần tử cần xử lý n bít, do đó thuật toán cần (s).m.n.log(m) phép toán trên bit.
2. Thuật toán ItemHide tính đúng cận trên, cận dưới của tập mục nhạy cảm cần ẩn dựa vào tính chất các tập Coatom và tập sinh của giàn giao. Do đó, giảm được số tập mục trong V là thành phần đòi hỏi nhiều thời gian tính toán.
3. Thuật toán ItemHide quét cơ sở dữ liệu ít lần hơn.