7. Bố cục luận văn
1.2.6. Một số cấu trúc dữ liệu giúp cải thiện thuật toán Apriori
a. Hash-tree
Hash-tree [2, 5] còn được gọi là cây băm. Đó là một cấu trúc đã được áp dụng cài đặt cho thuật toán Apriori một cách hiệu quả. Cây băm có thể cải thiện được hiệu năng của thủ tục xác định độ hỗ trợ của tập ứng viên trong thuật toán Apriori. Tập ứng viên mới sau khi được phát sinh có thể lưu trữ trên một cây băm. Cây băm là một cấu trúc cây, mỗi nút là của cây chứa đựng một tập các itemset, mỗi nút trong chứa đựng một bảng băm. Trong mỗi bảng băm sẽ có các phần tử, mỗi phần tử trong một bảng băm sẽ liên kết đế một nút khác. Gốc của cây được định nghĩa có độ sâu bằng 1. Một nút tại độ sâu d sẽ trỏ đến những nút tại độ sâu d +1.
Khi thêm một itemset c vào cây thì di chuyển từ nút gốc xuống các nút khác cho đến khi nào tìm được nút lá thì dừng. Tại một nút trong ở độ sâu j, ta sẽ quyết định đi theo nhánh nào bằng cách áp dụng hàm băm đối với item thứ j của itemset c. Ban đầu thì tất cả các nút khi thêm vào cây đều là nút lá. Khi số lượng các itemset lưu trữ trong một nút là vượt quá một ngưỡng nào đó thì nút là sẽ được chuyển thành nút trong. Hình 1.10 là một cấu trúc cây băm lưu trữ 5 ứng viên 3-itemset với hàm băm là thứ tự của mỗi item trong bảng chữ cái modulo 6. Bởi vì 2 item G và M có cùng giá trị sau khi áp dụng hàm băm nên 2 itemset {A, E, G} và {A, E, M} sẽ được lưu trữ trên cùng một nút lá.
Hình 1.7. Cấu trúc cây băm lưu trữ tập ứng viên 3-itemset [5]
A K C E L 0 ACD 0 KMN 0
AEL AEG 0 AEM 0
b. Trie
Trie là một cấu trúc được đưa ra để giải quyết cho bài toán lưu trữ và truy tìm các từ trong từ điển [16].
Hình 1.8. Cấu trúc dữ liệu Trie [5]
Trie là một cây có hướng, giống như cấu trúc cây băm. Gốc của cây thì có độ sâu là 0, một nút ở độ sâu d có thể tham chiếu đến những nút ở độ sâu d +1. Các nút được tham chiếu đến nhau thông qua một con trỏ, con trỏ đó còn được gọi là một cạnh hay một liên kết, nó được gán nhãn bởi một ký tự. Mỗi nút lá trên cây thì biểu hiện cho một từ, nó là một tập hợp các ký tự từ trên đường đi từ gốc đến nút đó. Chú ý, nếu k ký tự đầu tiên của 2 từ là giống nhau thì đường đi từ gốc đến 2 nút đó sẽ có
k cạnh giống nhau. Trie là một cấu trúc dữ liệu phù hợp để lưu trữ và truy tìm không
chỉ từ trong từ điển mà còn bất kỳ một tập hợp có thứ tự xác định.
Năm 2003 nhóm tác giả Bodon et al. [5] đã đề xuất đề xuất ra một cấu trúc cải tiến từ cấu trúc trie nguyên thủy để có thể cho kết quả tốt khi áp dụng vào các thuật toán Apriori [1, 2]
Khi tiến hành xây dựng cấu trúc trie từ tập các ứng viên, ứng với mỗi lần thêm mới một ứng viên vào cấu trúc trie ta sẽ tiến hành duyệt cấu trúc trie từ gốc. Nếu ta chúng ta đang đứng ở một nút mà item ik của itemset đang xét không tương ứng với các item trong các liên kết từ nút này thì ta sẽ tạo ra một nút mới được liên kết từ nút
đang xét, với item tương ứng với liên kết đó là ik. Chúng ta sẽ lặp đi lặp lại thủ tục này cho đến khi nào không còn itemset nào cần thêm vào cấu trúc trie nữa. Nhóm tác giả Bondon et al. thông qua thực nghiệp [5] đã chứng tỏa cấu trúc trie cải tiến có những ưu điểm so với cấu trúc cây băm [2] như sau:
- Trong phương thức phát sinh tập ứng viên thì một tập ứng viên mới sẽ được tạo ra từ một cặp nút mà có cùng cha, điều này có nghĩa là giữa 2 ứng viên mà có thuộc tính cuối cùng khác nhau.
- Trong phương thức xác định độ hỗ trợ của tập ứng viên, để cải thiện hiệu năng thì nhóm tác giả Bodon et al. đã đề xuất ra một số kỹ thuật cắt tỉa,
- Ví dụ: Giả sử t = {B, C, E, K, M}. Cấu trúc trie trên hình 2.8 nút gốc có hai nút
con tương ứng với 2 item là {A} và {K}. Ký hiệu id{X} là thứ tự của item X trong
giao dịch t, Ta có {K} ∈ t, id{K} = 3 nhưng id{K} ≥ |t| − k + d + 1 = 5 – 3 + 0 + 1 = 3. Nên chúng ta có thể khẳng định ngay là giao dịch t không chứa đựng bất cứ một itemset nào mà ký tự đầu tiên là {K}.
- Nhóm tác giả Bodon et al. còn đưa ra một số cải tiến trong thủ tục xác định độ hỗ trợ của các ứng viên. Tại mỗi nút cần ghi nhận lại thông tin là chiều dài lớn nhất từ nút đó đến một nút lá. Ta sẽ dựa vào thông tin này để xác định liên kết nào có thể tiếp tục được xét đến trong thủ tục xác định độ hỗ trợ của tập ứng viên. Cụ thể, giả sử ta đã duyệt qua cấu trúc trie và hiện tại đang ở một nút có độ sâu d, chúng ta chỉ có thể di chuyển đến những nút tiếp theo nếu chiều dài lớn nhất tại nút đó ít nhất phải bằng k - d.
Ví dụ: Giả sử t = {A, B, C, D, E, F, G, H, I}, và ta muốn xác định độ hỗ trợ của
các ứng viên lưu trữ trong một cấu trúc trie như Hình 2.9. Bình thường thì ta sẽ phải cần duyệt qua tất cả các nút của cấu trúc trie. Nhưng nếu áp dụng cải tiến của nhóm tác giả Bodon et al., ở mỗi nút ta lưu trữ thêm thông tin về chiều dài lớn nhất từ nút đó đến một nút lá thì trong ví dụ này ta chỉ duyệt qua tổng cộng 6 nút theo hướng A → B → C → D → E
Hình 1.9. Cấu trúc Trie lưu trữ tập các ứng viên [5]