Thuật toán do Houtsma đề nghị năm 1995. Thuật toán này cũng sử dụng kỹ thuật bổ sung dần dần từng phần tử (từ tập hợp 1 phần tử) nhằm tìm kiếm các tập hợp ứng cử viên. Một cải tiến đáng kể là Thuật toán đề nghị lưu lại cả ID của giao dịch cùng với tập hợp ứng cử viên. Agrawal đã chỉ ra, Thuật toán này không những không có phương án quản lý bộ nhớ mà nó còn giả định
nhét toàn bộ tập hợp ứng cử viên của bước trước vào bộ nhớ để bước sau tiện bề sử dụng. Sarawagi đã chỉ ra Thuật toán này không hiệu quả.
Tƣ tƣởng thuật toán:
Thuật toán SETM được đề xuất do mong muốn sử dụng SQL để tìm các tập mục phổ biến. Đầu tiên, duyệt toàn bộ CSDL để tìm tất cả các tập mục của phổ biến L1 và tất cả các tập mục phổ biến cùng với TID của nó L1’ được xếp theo TID [9].
Tiếp theo chừng nào Lk-1! = (k2)
- Tìm tập các ứng viên bằng cách duyệt toàn bộ CSDL, với mỗi giao dịch ta tìm tổ hợp chập k của các mục có trong giao dịch và xác định các mục cùng với TIP trong tổ hợp này có thuộc L’k-1 ? Nếu không phải thì bỏ qua. Ngược lại, ta bổ sung tập đó vào tập ứng viên đồng thời lưu một bản sao của tập mục ứng cử viên cùng với TID của nó.
- Sắp xếp lại các ứng viên theo tập mục.
- Xóa tất cả các ứng viên có độ hỗ trợ nhỏ hơn độ hỗ trợ mà người sử dụng yêu cầu. Kết quả lưu vào Lk’.
- Xếp lại Lk’ theo TID.
Cuối cùng ta được tất cả các tập mục phổ biến thỏa mãn có độ hỗ trợ tối thiểu lớn hơn hoặc bằng độ hỗ trợ tối thiểu mà người sử dụng yêu cầu.
Thuật toán SETM:
Input: CSDL D, minsup
Output: Các tập mục phổ biến
1. L1 = {các tập mục phổ biến};
2. L1’={các tập mục phổ biến cùng các TID của nó được sắp xếp theo TID};
3. for (k=2; Luật kết hợpk-1 ; k++ ) do begin 4. Ck = ;
5. forall các giao dịch t D do begin
6. Lt = (l L’k-1 | l.TID = t.TID); // các tập có (k - l) mục phổ biến trong giao dịch t
7. forall các tập mục phổ biến lt Lt do begin
8. Ct = tăng lt thêm một mục có trong giao dịch t; //Các ứng cử viên có trong t
9. C’k +={<t.TID, c>| c Ct}; 10.end
11.end
12.Sort C’k theo các tập mục;
13.delete các mục c C’k có c.count<minsup đưa vào L’k ;
14. Lk ={<l.itemset, countof l in L’k > | l Lk'}; //kết hợp với bước 13 15.Sort L’k theo TID;
16.end
17.Trả lời = k Lk ;