Chơng 6 Các thuật toán phát hiện luật kết hợp trong các CSDL lớn
6.3.1 Phát sinh các tập mục lớn cục bộ
Thủ tục gen_large_itemsets lấy ra một phân hoạch và phát sinh tất cả các tập mục lớn (mọi độ dài) cho phân hoạch đó. Thủ tục đợc viết một cách hình thức dới đây:
procedure gen_large_itemsets(p: phân hoạh CSDL) {1} L1 1 = {các 1-tập mục lớn đợc chọn ra} {2} for (k = 2; Lp k khác rỗng; k++) do begin {3} for tất cả các tập mục l1 thuộc Lp k-1 do begin {4} for tất cả các tập mục l2 thuộc Lp k-1 do begin
{5} if l1[1] = l2[1] & l1[2] = l2[2] &...& l1[k-1] = l2[k-1] then {6} c = l1[1] . l1[2] ... l1[k-1] . l2[k-1]
{7} if c không thể bị tỉa then
{9} if |c.tidlist| / |p| >= minSupport then {10} Lp k = Lp kU {c} {11} end {12} end {13} end {14} return Uk Lp k
Từ dòng 4 đến dòng 9 chỉ ra quá trình phát sinh các dự tuyển. Sau đó việc tỉa đuợc thực hiện nh sau:
prune(c: k-tập mục)
for tất cả (k-1) tập con s của c do if s không thuộc Lk-1 then
return “c không bị tỉa”
Bớc tỉa triệt tiêu các mở rộng của (k-1)-tập mục mà không phải là lớn đã đợc loại bỏ ở bớc trớc. Chẳng hạn nếu Lp
3 đợc tìm thấy là {{1 2 3}, {1 2 4}, {1 3 4}, {1 3 5}, {2 3 4}}. Việc phát sinh ban đầu sẽ cho ta các tập mục dự tuyển {1 2 3 4} và {1 3 4 5}. Tuy nhiên, tập mục {1 3 4 5} bị tỉa đi vì {1 4 5} không nằm trong Lp
3.
Con trỏ đếm các tập mục dự tuyển đợc phát sinh nh sau. Gắn với mỗi tập mục, ta xác định một cấu trúc gọi là tidlist. Một tidlist cho tập mục l bao gồm TID của tất cả các giao dịch bao gồm tập mục l bên trong một phân hoạch đang xét. Các TID trong tidlist đợc lu theo thứ tự tăng. Chúng ta biểu diễn tidlist cho một tập mục l bởi l.tidlist. Rõ ràng là lực lợngcủa tidlist của một tập mục chia cho số giao dịch trong một phân hoạch sẽ cho ta support cho tập mục đó trong phân hoạch đang xét.
Đầu tiên, các tidlist cho các 1-tập mục đợc phát sinh trực tiếp bởi việc đọc các phân hoạch. tidlist cho một k-tập mục dự tuyển đợc phát sinh bởi việc kết nối các tidlist của hai (k-1)-tập mục mà đã đợc sử dụng để tạo ra k-tập mục dự tuyển. Chẳng hạn, trong tr- ờng hợp ở trên tidlist cho tập mục dự tuyển {1 2 3 4} đợc phát sinh bằng việc kết nối các tidlist của các tập mục {1 2 3} và {1 2 4}.
Tính đúng của thuật toán
Quá trình phát sinh ra các dự tuyển xác định đúng tất cả các tập mục dự tuyển lớn tiềm năng. Do đó, các lệnh ứng với dòng 9-10 của thủ tục gen_large_itemsets sinh ra đúng giá trị support cho mỗi tập mục trong một phân hoạch. Điều này có thể chứng minh bằng qui nạp. Theo định nghĩa, tidlist của tất cả các 1-tập mục chỉ bao gồm các giao dịch chứa các tập mục đó. Giả thiết rằng điều cần chứng minh đúng cho cìng lặp (k-1). bớc lênh dòng 4-7 phát sinh một tập mục dự tuyển bằng việc mở rộng một (k-1)-tập mục lớn (l1) với một (k-1)-tập mục lớn khác (l2). Vì vậy, k-tập mục dự tuyển chỉ bao gồm các mục trong l1 và l2. các giao dịch bao gồm k-tập mục nay là nhứng giao dịch bao gồm l1 và l2 tức là giao của tidlist của l1 và l2.