Bài 1 · Tập đóng
Charm — tìm các tập đóng
Charm đi tìm các tập đóng, tức là những tập phổ biến không bị một tập cha nào cùng độ phổ biến che lấp. Cách làm của nó là lần lượt ghép từng cặp mặt hàng, rồi dựa vào việc so sánh hai danh sách giao dịch để quyết định: lúc thì gộp luôn hai mặt hàng vì chúng đi liền nhau, lúc thì mở thêm một nhánh mới để đào sâu.
1. Ý tưởng chung
Một tập gọi là đóng khi không có tập cha trực tiếp nào của nó có cùng độ phổ biến. Hiểu nôm na, tập đóng là "người đại diện" cho cả một nhóm tập con cùng độ phổ biến, nhờ vậy ta nén dữ liệu lại mà vẫn suy ra được độ phổ biến của mọi tập con.
Để bắt đầu, ta sắp các mặt hàng theo độ phổ biến từ thấp đến cao; nếu bằng nhau thì xếp theo bảng chữ cái. Với bảng dữ liệu của chúng ta, thứ tự đó là A rồi D rồi T (cả ba cùng có độ phổ biến bốn), sau đó tới W (độ phổ biến năm) và cuối cùng là C (độ phổ biến sáu).
Ta xét lần lượt từng mặt hàng. Với mỗi mặt hàng đang xét, ta đem nó ghép với từng mặt hàng đứng sau nó, mỗi lần ghép lại quyết định một trong bốn tình huống dưới đây.
2. Bốn tình huống khi ghép một cặp
Gọi mặt hàng đang xét là mặt hàng trước, mặt hàng đem ghép là mặt hàng sau. Ta nhìn vào phần chung của hai danh sách giao dịch; nếu phần chung còn đạt ngưỡng phổ biến thì xét tiếp một trong bốn tình huống sau, tùy theo quan hệ giữa hai danh sách:
Hai mặt hàng luôn xuất hiện cùng nhau ở đúng những giao dịch như nhau. Khi đó ta gộp mặt hàng sau vào mặt hàng trước, và bỏ hẳn mặt hàng sau khỏi danh sách vì ở đâu có cái này thì ở đó có cái kia.
Mọi giao dịch có mặt hàng trước thì cũng có mặt hàng sau, nhưng mặt hàng sau còn xuất hiện thêm ở vài chỗ khác. Ta vẫn gộp mặt hàng sau vào mặt hàng trước, nhưng giữ lại mặt hàng sau, vì nó còn ghép được với những mặt hàng khác.
Ngược lại với tình huống hai. Ta bỏ mặt hàng sau khỏi danh sách, đồng thời mở một nhánh con mới cho tập ghép để đào sâu sau này.
Hai danh sách có phần chung nhưng mỗi bên vẫn có giao dịch riêng. Ta giữ cả hai mặt hàng, và mở một nhánh con mới cho tập ghép.
Khi xét xong một mặt hàng, ta ghi tập hiện có (đã lớn lên) vào danh sách các tập đóng, với điều kiện nó chưa bị một tập nào tìm được trước đó cùng độ phổ biến bao trùm.
3. Giải mẫu từng bước
Ta dùng bảng dữ liệu quen thuộc, ngưỡng phổ biến bằng ba, thứ tự xét là A, D, T, W rồi C. Mỗi bước hãy thử tự nghĩ trước, sau đó mở lời giải để đối chiếu.
Nhánh mặt hàng A (A có mặt ở các giao dịch 1, 3, 4, 5)
Ghép A với D.
Ghép A với T.
Ghép A với W.
Ghép tập đang xét (lúc này là AW) với C.
Kết thúc nhánh A.
Các nhánh D, T, W và C
Nhánh T (T có ở các giao dịch 1, 3, 5, 6). Ghép T với W cho phần chung là 1, 3, 5; không bên nào chứa trọn bên kia, là tình huống bốn, ta mở nhánh con TW. Ghép T với C thì mọi giao dịch có T đều có C, là tình huống hai, ta gộp C để được CT và nhánh con TW lớn lên thành TWC. Khi đào sâu, tập TWC có cùng danh sách giao dịch 1, 3, 5 với ACTW đã tìm trước đó, lại là tập con của ACTW, nên nó bị ACTW bao trùm và ta không ghi nó vào nữa. Cuối nhánh, ta chỉ thu được CT là tập đóng độ phổ biến bốn.
Nhánh W (W có ở các giao dịch 1, 2, 3, 4, 5). Ghép W với C thì mọi giao dịch có W đều có C, là tình huống hai, ta gộp C để được CW. Ta thu được CW là tập đóng độ phổ biến năm.
Nhánh C. Không còn mặt hàng nào đứng sau để ghép, nên ta chỉ ghi nhận C là tập đóng độ phổ biến sáu.
C độ phổ biến sáu; CW độ phổ biến năm; ACW độ phổ biến bốn; CD độ phổ biến bốn; CT độ phổ biến bốn; CDW độ phổ biến ba; và ACTW độ phổ biến ba.
4. Bài tập tự luyện
Hãy dùng một bảng dữ liệu khác để luyện, gọi là bảng P, với ngưỡng phổ biến bằng hai. Bảng gồm năm giao dịch: giao dịch một có B, C, M; giao dịch hai có B, E; giao dịch ba có B, C, E, M; giao dịch bốn có C, E, O; giao dịch năm có B, C, E, M. Hãy tự chạy Charm bằng tay rồi mở đáp án để so.
Bài một. Hãy lập bảng dạng dọc và loại bỏ mặt hàng không đủ phổ biến.
Bài hai. Ghép M với B rơi vào tình huống nào, và cho kết quả gì?
Bài ba. Hãy liệt kê toàn bộ tập đóng và tập tối đại của bảng P.