Thuật toán CHARM là một thuật toán chuẩn cho khai phá luật kết hợp đóng. Thuật toán thực hiện duyệt ừên cả không gian tập mục và không gian tập định danh. Thuật toán tránh được việc tính toán để tìm ra tất cả các tập con có thể của tập mục đóng đi tìm tập mục đóng. Tính chất này là rất quan trọng đối với CSDL dầy với các tập mục phổ biến dài. Duyệt qua cả không gian tập mục và không gian các tập
p
q /(X ,)n /(X 2) I
định danh cho phép thuật toán CHARM sử dụng phương pháp tìm kiếm mới, bỏ qua nhiều mức để tìm tập mục phổ biến đóng thay phải tính nhiều tập con không đóng. Hơn nữa thuật toán này sử dụng chiến lược tỉa: tỉa các ứng cừ nếu tập con của nó không phổ biến, đồng thời tỉa các nhánh dựa trên tính chất không đóng, bất kỳ tập mục không đóng đều bị tỉa. Thuật toán CHARM không sử dụng cấu trúc dữ liệu cây băm, mà sử dụng phép toán cơ sở là hợp hai tập mục và giao hai tập định danh.
Ý tưởng của thuật toán CHARM là duyệt trên tập các IT-pair của cây IT-pair để xem nút con có là tập mục phổ biến không? Tất cả các tập không phổ biến cũng như các nhánh không phải tập đóng đều bị tỉa. Mỗi nút con của một nút được kết hợp với các nút con khác cùng mức.
Giả sử cho bất kỳ tập mục X nào ta đều tìm được tập các định danh các tác vụ chứa X là t(X) và ngược lại cho bất kỳ tập Y nào ta đều tìm được tập mục i(Y) của nó. Thuật toán CHARM tính tất cả các khái niệm phổ biến tò CSDL vào. Ta có thể bắt đầu duyệt các khái niệm trong không gian các tập mục hoặc không gian tập định danh. Tuy nhiên, số các mục nhỏ hơn nhiều so với số các tác vụ và vì ta quan tâm đến các tập mục đóng, ta bắt đầu tìm các mục đơn và các tập định danh kết hợp chúng.
Thuật toán CHARM
CHARM ( ổ c l x ĩ , minsup):
1. Node { lị X t(Ii): Ij e I A |t(Ij)| > minsupp} 2. CHARM-EXTEND(Nodes, C)
3. return c //Tất cả các tập đóng CHARM-EXTEND (Nodes,C):
1. for each X, X t(Xi) in Nodes 2. NewNode = 0 và X = Xj
4. X = X u Xj and Y = t(Xj) n t(Xj) s
5. CHARM-PROPERTY(Nodes,NewN)
6. If (NewNode 4- 0 ) Then CHARM-EXTEND(NewNode, C) 7. delete NewN
8. C = C u X
CHARM-PROPERTY(Nodes,NewN): 1. If supp(X) > minsup) then
2. Ift(Xj) = t(Xj) then //Thuộc tính 1 3. Remove Xj from Nodes
4 . Replace all X j with X
5. else if t(Xj) a t(Xj) then //Thuộc tính 2 6. Repalce all X j with X
7. else if t(Xj) 3 t(Xj) then //Thuộc tính 3
8. Remove Xj from Nodes
9. Add X X Y to NewN //theo thứ tự f 10. else if t(Xị) Í t(Xj) then //Thuộc tính 4
C h ư ơ n g 3. KHAI PHÁ DỮ LIỆU LU ẬT KÉT HỢP M Ờ