Khai phá đồ thị con thường xuyên là cho một ngưỡng và một cơ sở dữ liệu đồ thị GD, tìm tất cả các đồ thị con thường xuyên trong GD.
Hình 2.5. Ba ma trận kề của đồ thị gán nhãn P trong Hình 1.3.
Ba ma trận kề của đồ thị P trong Hình 1.3, sau khi áp dụng sắp xếp thứ tự tuyệt đối chúng ta có: Code(M1) = “axbxyb0yyb” Code(M2) = “axb0ybxyyb” Code(M3) = “bybyyb0xxa”
Cho ma trận kề M1, cạnh chứa trong tập {m2,1, m3,1, m3,2, m4,2, m4,3} trong đó m2,1, m4,2, m4,3 tương ứng là cạnh đầu tiên, cạnh thứ hai, cạnh sau cùng của M
Hình 2.6. Biểu diễn ma trận con riêng cực đại
Ví dụ của ma trận con riêng cực đại, ma trận Hình 2.6.a là ma trận riêng cực đại của ma trận Hình 2.6.b, mà bản thân nó là ma trận riêng cực đại của Hình 2.6.c.
*Khai phá đồ thị con thường xuyên
Ma trận kề chính tắc
Trong FFSM ta biểu diễn mỗi đồ thị bằng một ma trận chính tắc M sao cho mọi đường chéo của M được gán nhãn tương ứng với node và những
phần tử ngoài đường chéo được gán với nhãn của cạnh tương ứng hoặc điền giá trị 0 nếu không có cạnh.
Một trong những vấn đề có tính quyết định trong khai phá đồ thị là vấn đề đồ thị đẳng cấu. Cho hai đồ thị P và Q, xác định xem liệu P có đẳng cấu với Q. Để giải quyết vấn đề này ta xem như một mẫu thông thường nghĩa là đầu tiên chuyển mỗi đồ thị vào trong cách biểu diễn duy nhất của chúng (xem như là mẫu chính tắc của đồ thị), kế tiếp so sánh các bản biểu diễn đã chuyển đổi. Nếu hai đồ thị đẳng cấu với nhau thì mẫu chính tắc của chúng là như nhau và ngược lại. Quy ước sử dụng ký tự in hoa để biểu diễn cho một ma trận kề và sử dụng ký tự thường tương ứng để biểu diễn cho một thực thể riêng của ma trận kề.
Định nghĩa ma trận kề chính tắc
Cho một ma trận kích thước n x n của một đồ thị G với n đỉnh, ta định nghĩa code của M ký hiệu Code(M) hình thành bằng cách nối các phần tử trong tam giác dưới của M (kể cả các phần tử trên đường chéo) theo thứ tự: m1,1, m2,1, m2,2…, mn,1, mn,2… mn,n-1, mn,n
Trong đó mi,j là phần tử tại dòng thứ i và cột thứ j trong M(0 < j ≤ i ≤ n). Cho một đồ thị G, mẫu chính tắc của nó là code cực đại trong số tất cả các code có thể có của nó. Ma trận kề M cho kết quả mẫu chính tắc được định nghĩa như ma trận kề chính tắc của M(CAM)
Ví dụ 2.2.2. Ma trận kề M1 biểu diễn trong Hình 2.5 là CAM của đồ thị P biểu diễn trong Hình 1.3, và Code(M1) là mẫu chính tắc của đồ thị.
+Thuộc tính tối ưu của CAM và cây CAM
Thuộc tính khóa của mẫu chính tắc là một “Pre_fix” của mẫu chính tắc cũng là mẫu cực đại, là trạng thái được mô tả trong định lý bên dưới.
Định lý 2.2. Cho một đồ thị liên thông G và một đồ thị con H của G, giả sử A và B tương ứng là CAM của G và H. Ta có Code(A) ≥ Code(B). Cho một ma trận N kích thước n x n và một ma trận M kích thước mxm, giả sử ml,k là cạnh ngoài cùng của M và giả sử M có ít nhất hai cạnh trên dòng cuối. N là ma trận con riêng cực đại của M nếu :
n=m và
ni,j = {𝑚𝑖,𝑗 0 < 𝑖, 𝑗 ≤ 𝑛 (𝑖 ≠ 𝑙 𝑗 ≠ 𝑘) (𝑖 ≠ 𝑘 𝑗 ≠ 𝑙) 0 𝑡𝑟𝑜𝑛𝑔 𝑐á𝑐 𝑡𝑟ườ𝑛𝑔 ℎợ𝑝 𝑘ℎá𝑐
Tương tự, nếu M có duy nhất một cạnh trong dòng cuối cùng, N là ma trận con riêng cực đại của M nếu n=m-1, và ni,j = mi,j (0<i, j≤ n) từ M biểu diễn cho một đồ thị liên thông, không nhất thiết phải xét trường hợp không có cạnh trong dòng cuối cùng của M. Các ví dụ của ma trận con riêng cực đại được biểu diễn trong Hình 2.6.
Hệ quả 2.1. Cho ma trận kề chính tắc (CAM) M của đồ thị liên thông G và N là ma trận con của M. N đại diện cho một đồ thị con liên thông của G.
Hệ quả 2.2. Cho một đồ thị liên thông G với CAM M, N là ma trận con của M và một đồ thị H mà N đại diện, N là CAM của H.
Hình 2.7. Cây CAM của đồ thị P trong Hình 1.3
Mỗi ma trận thu được bởi một thao tác hòa nhập được xác định bởi một nhãn bắt đầu với c, tiếp theo là kiểu thao tác hòa nhập, c.3a chuẩn cho hòa nhập case3a. Một CAM thu được bởi một thao tác mở rộng được gán nhãn với e.
Nếu ta cho một ma trận rỗng là ma trận con riêng cực đại của ma trận bất kỳ có kích thước là 1 thì cũng có thể tổ chức tất cả các CAM của đồ thị con liên thông của một đồ thị G vào trong một cây với nút gốc bắt đầu như sau:
+ Nút gốc của cây là một ma trận rỗng.
+ Mỗi node trên cây là một ma trận con liên thông riêng biệt của G, biểu diễn bẳng CAM của nó.
+ Cho một node không phải node gốc (với CAM M), cha của nó là đồ thị con được biểu diễn bởi ma trận con riêng cực đại của M.
Cây thu được trong hình được xem như cây CAM của đồ thị G.
* Khai phá đồ thị con thường xuyên của một cơ sở dữ liệu đồ thị
Trong phần trên ta đã đưa ra một cấu trúc dữ liệu mới (cây CAM) dùng cho việc tổ chức tất cả các đồ thị con (liên thông) của một đồ thị vô hướng liên thông đơn. Tuy nhiên điều này có thể dễ dàng mở rộng với một tập đồ thị (liên thông hoặc không liên thông) biểu diễn như một cơ sở dữ liệu đồ thị và một cây CAM đơn có thể được xây dựng cho một cơ sở dữ liệu đồ thị. Nếu ta có một cây như vậy được xây dựng trước (không kể yêu cầu về không gian và khả năng tính toán), bất kỳ sự giao nhau của cây phát hiện ra tập các đồ thị con đơn nhất của cơ sở dữ liệu đồ thị. Đối với mỗi đồ thị con như vậy, độ Support của nó có thể được xác định bởi một sự kiểm tra tuyến tính của cơ sở dữ liệu đồ thị. Bởi vậy những đồ thị thường xuyên có thể được báo cáo.
Trong phần mã giả dưới đây trình bày một thuật toán dựa vào một thực tế đơn giản đó là:
Nếu một đồ thị con G không thỏa mãn điều kiện là thường xuyên (SupG< ngưỡng tối thiểu người sử dụng cung cấp) thì không một đồ thị nào trong supergraphs của nó thỏa mãn điều kiện. Điều này cho thấy rằng ta có thể dừng việc xậy dựng một nhánh của cây sớm như việc tìm node hiện thời không đủ độ Support.
Trong mã giả bên dưới, ký hiệu CAM(G) biểu diễn CAM của đồ thị G.
X.isCAM là một giá trị boolean mô tả ma trận X là CAM của đồ thị nó biểu diễn hay không.
Thuật toán 2.4 FFSM [6]
Input: Một cơ sở dữ liệu đồ thị GD và một ngưỡng hỗ trợ supportf(0<f≤1) Output: Tập S của tất cả các đồ thị con liên thông của G.
Method:
1: S ← {CAM của các node và các cạnh thường xuyên} 2: P ← {CAM của các cạnh thường xuyên}
3: FFSM-Explore (P, S);
Thuật toán 2.5 FFSM-Explore [6]
Input: U là một danh sách CAM tối ưu và W là một tập CAM của các đồ thị con thường xuyên liên thông.
Output: Tập W bao gồm CAM của tất cả các đồ thị con thường xuyên đã tìm kiếm tới hiện tại.
Method: 1: for X∈P do 2: if (X.isCAM) then 3: W←W∪{X}, C←Φ 4: for Y∈P do 5: C←C∪FFSM-Join (X, Y) 6: endfor 7: C←C∪FFSM-Extension(X)
8: Loại bỏ CAM(s) từ C mà không thường xuyên hoặc không tối ưu 9: FFSM-Explore (C, W)
10: endif 11: endfor