procedure Insert_Tree(string [p| P], Tree T)
(trong đó p là mục đầu tiên của dãy và P là phần còn lại của dãy)
{ IF cây T có nút con N mà N.Item_name=p Then
N.count++;
Else
Tạo nút mới N;
N.Item_Name:= P; N.count:=1;
Thay đổi nút liên kết cho p.
IF P Then Insert_Tree(P,N); Header table Item Head of node-link f c a b m p Root c:1 f:4 c:3 a:3 m:2 p:2 b:1 b:1 b:1 m:1 p:1
}
2.6.2. Khai phá tập mục thường xuyên
Sau khi xây dựng xong FP-Tree cho cơ sở dữ liệu việc tìm các tập mục thường xuyên chỉ thực hiện trên FP-Tree mà không cần duyệt cơ sở dữ liệu.
Tính chất 2.5 Khi tìm các mẫu có chứa mục ai chỉ cần tính toán cho các nút của cây con tiền tố P của ai số lần xuất hiện của các nút trong đường dẫn tiền tố bằng số lần xuất hiện của nút ai.
Thuật toán FP_growth thực hiện như sau:
Bắt đầu từ dưới lên trên của bảng header và cây, mỗi mục A dùng nút liên kết để duyệt qua tất cả các nút trên cây mà xuất hiện A, với mỗi nút N có N.Item_name = A tìm tất cả các đường dẫn của các nút N đó xuất phát từ gốc của cây tới nút N. Từ các đường dẫn đó ta xây dựng cây mẫu phụ thuộc cho A. Sau đó tìm các tập mục thường xuyên có chứa A từ cây mẫu phụ thuộc này. Ví dụ lần lượt xét mục theo thứ tự từ duới lên p, m, ...., f như sau:
Xuất phát từ mục p: chiếu vào cây FP_Tree hình 2.8 ta có hai đường dẫn có chứa p là: f:4, c:3, a:3, m: 2, p:2 và c: 1, b:1, p:1.
Theo các đường dẫn trên ta có tập mục fcam xuất hiện 2 lần cùng với p, cb xuất hiện 1 lần cùng với p. Số lần xuất của mục p là 2+1=3 lần. Vì vậy ta tìm các mục thường xuyên có chứa p mà có cùng tần suất xuất hiện như p.
Từ đó ta có hai tiền đường dẫn của p là: {(f:2, c:2, a:2, m: 2)}, {(c:1, b:1)}và là cơ sở mẫu phụ thuộc. Khởi tạo cây mẫu thường xuyên trên cơ sở mẫu phụ thuộc ta được FP_Tree phụ thuộc và thực hiện khai phá đệ qui trên cây này chúng ta thu được kết quả, trong cây này chỉ có một nhánh (c:3) nên ta chỉ có tập mục thường xuyên (cp) thỏa ngưỡng minSup =3/5.