Trong bài báo này, các tác giả giới thiệu một thuật toán hiệu quả cho việc tìm kiếm các đồ thị con trong một cơ sở dữ liệu đồ thị, thuật toán FSG. Thuật toán này dựa trên tư tưởng của thuật toán Apriori nhưng pha sinh ứng viên đã được cải tiến để phù hợp với dữ liệu đồ thị. Chúng tôi đã cài đặt thuật toán này theo kỹ thuật lập trình hướng đối tượng bằng ngôn ngữ Java.
JOURNAL OF SCIENCE OF HNUE Natural Sci., 2012, Vol 57, No 3, pp 17-30 MỘT THUẬT TOÁN KHAI PHÁ ĐỒ THỊ CON PHỔ BIẾN TRONG DỮ LIỆU ĐỒ THỊ Giang Thành Trung Trường Đại học Tây Bắc Trần Đăng Hưng(∗) Trường Đại học Sư phạm Hà Nội (∗) E-mail: hungtd@hnue.edu.vn Tóm tắt Bài tốn tìm cấu trúc lặp lại nhiều lần liệu có cấu trúc ứng dụng nhiều lĩnh vực Nhiều thuật toán khác đề xuất Tuy nhiên, phức tạp liệu có cấu trúc nên thuật tốn thường gặp phải thách thức tính tốn Trong báo này, chúng tơi giới thiệu thuật tốn hiệu cho việc tìm kiếm đồ thị sở liệu đồ thị, thuật toán FSG Thuật toán dựa tư tưởng thuật toán Apriori pha sinh ứng viên cải tiến để phù hợp với liệu đồ thị Chúng tơi cài đặt thuật tốn theo kỹ thuật lập trình hướng đối tượng ngơn ngữ Java Từ khóa: Khai phá liệu, đồ thị phổ biến, Apriori, FSG Mở đầu Khai phá mẫu hình (pattern) lặp lại nhiều lần liệu có cấu trúc (như đồ thị, cây) thu hút nhiều ý nhà nghiên cứu ứng dụng nhiều lĩnh vực khác [1-3] Các mẫu hình lặp lại nhiều lần giúp hiểu sâu sắc mối quan hệ phần tử mơ hình hóa đồng thời điểm khởi đầu cho thuật toán khai phá liệu phân cụm phân lớp Trong số loại liệu có cấu trúc, đồ thị sử dụng nhiều lĩnh vực Chẳng hạn, sinh học đồ thị dùng để mô tả mối quan hệ phần tử (protein, gene, RNA) Trong hóa học phân tích, đồ thị dùng để mơ tả cấu trúc ba chiều phân tử Ngoài ra, đồ thị dùng để biểu diễn liệu web, liệu text, vv Cho đến nay, có nhiều thuật toán đề xuất cho việc khai phá đồ thị phổ biến từ sở liệu đồ thị (CSDLĐT) Đồ thị đồ thị thu từ đồ thị ban đầu cách loại bỏ số đỉnh số cạnh Đồ thị phổ biến đồ thị có số lần xuất CSDLĐT lớn ngưỡng cho trước Hầu hết thuật tốn tìm đồ thị phổ biến phải đối mặt với hai thách thức tính tốn: (1) đồ thị đẳng cấu: xác định đồ thị 17 Giang Thành Trung Trần Đăng Hưng đồ thị xuất đồ thị khác; (2) liệt kê cách hiệu tất đồ thị phổ biến: số lượng đồ thị tăng lên theo kích thước kích thước CSDLĐT, để làm việc với CSDLĐT lớn có cấu trúc phức tạp cần phải có thuật toán khai phá mẫu phổ biến hiệu Nhìn chung, chia thuật tốn khai phá đồ thị phổ biến thành hai nhóm Nhóm 1, gồm thuật tốn sử dụng chiến lược tìm kiếm theo chiều rộng theo kiểu thuật toán Apriori [4] để liệt kê đồ thị Hai số thuật toán AGM [5] FSG [6] AGM đưa Inokuchi đồng nghiệp, FSG đưa Kuramochi đồng nghiệp Các thuật toán dựa đồ thị phổ biến có, “sinh” ứng viên cách thêm cạnh đỉnh Tại thời điểm xuất phát, thuật tốn coi đồ thị có đỉnh cạnh Điểm khác thuật toán phương thức “sinh” ứng viên (candidate) từ đồ thị phổ biến thời Trong AGM sử dụng phương thức tạo ứng viên dựa đỉnh gia tăng kích thước đồ thị cách thêm đỉnh FSG lựa chọn chiến lược tạo ứng viên dựa cạnh để gia tăng kích thước đồ thị cách thêm cạnh Chi tiết thuật tốn chúng tơi trình bày phần Nhóm 2, gồm thuật tốn sử dụng chiến lược tìm kiếm theo chiều sâu để tìm ứng viên đồ thị phổ biến Hai thuật tốn tiêu biểu cho nhóm gSpan [7] thuật toán Borgelt [8] Các thuật tốn tìm đồ thị liên thơng phổ biến CSDLĐT khác cách sinh đồ thị ứng viên Trong gSpan [7], đồ thị phổ biến G sử dụng để sinh đồ thị ứng viên G′ cách chọn đỉnh v thuộc G thêm vào cạnh (v, w), w thuộc G khơng thuộc G Ngược lại, thuật tốn trình bày [8] không sinh ứng viên mà thay vào lưu giữ tất đẳng cấu có đồ thị phổ biến thời Trong báo này, chúng tơi tìm hiểu trình bày thuật tốn hiệu nhóm 1, thuật tốn FSG [6] Sau cài đặt tiến hành thử nghiệm sở liệu đồ thị tự tạo, file liệu mô tả tập đồ thị Chương trình chúng tơi cài đặt theo kỹ thuật lập trình hướng đối tượng với ngơn ngữ Java chạy Windows Linux 2.1 Nội dung nghiên cứu Một số khái niệm Để thuận lợi cho việc theo dõi khái niệm sau, phần cung cấp số khái niệm bản, dùng nhiều lần báo Định nghĩa 2.1 Một đồ thị có nhãn G gồm phần tử G = (V, E, LV , LE , l) V tập đỉnh, E tập cạnh vô hướng, LV LE tập nhãn đỉnh cạnh, ánh xạ l : V → LV l : E → LE 18 Một thuật toán khai phá đồ thị phổ biến liệu đồ thị Định nghĩa 2.2 Đồ thị có nhãn G = (V, E, LV , LE , l) đồ thị đồ thị G′ = (V ′ , E ′ , L′V , L′E , l′ ) nếu: ◦V ⊆ V ′ ◦∀u ∈ V, (l(u) = l′ (u)), ◦E ⊆ E ′ , ◦∀(u, v) ∈ E, (l(u, v) = l′ (u, v)) Định nghĩa 2.3 Đồ thị có nhãn G = (V, E, LV , LE , l) đẳng cấu với đồ thị G′ = (V ′ , E ′ , L′V , L′E , l′ ) tồn song ánh f : V → V ′ thỏa mãn: ◦∀u ∈ V, (l(u) = l′ (f (u))), ◦∀u, v ∈ V, ((u, v) ∈ E ⇔ (f (u), f (v)) ∈ E ′ ), ◦∀(u, v) ∈ E, (l(u, v) = l′ (f (u), f (v))) Chúng ta nói G đẳng cấu với G′ ngược lại Định nghĩa 2.4 Đồ thị có nhãn G đồ thị đẳng cấu đồ thị G′ , kí hiệu G ⊆ G′ tồn đồ thị G′′ G′ mà G đẳng cấu với G′′ Định nghĩa 2.5 Cho tập đồ thị D ngưỡng σ (0 < σ ≤ 1), độ hỗ trợ (support) đồ thị G kí hiệu supG tỉ số số lượng đồ thị G′ (G′ ∈ D) mà G đồ thị đẳng ′ ′ ⊆G}| cấu G′ số lượng đồ thị có D: supG = |{G ∈D|G D Đồ thị G gọi đồ thị phổ biến supG ≥ σ Định nghĩa 2.6 Bài toán khai phá đồ thị phổ biến toán cho trước CSDLĐT D ngưỡng hỗ trợ σ(0 < σ ≤ 1), tìm tất đồ thị phổ biến D 2.2 Thuật toán FSG Thuật toán 2.1: fsg(D, σ) (Phát đồ thị phổ biến) (1) F ← xác định tất đồ thị phổ biến cạnh D (2) F ← xác định tất đồ thị phổ biến cạnh D (3) k←3 (4) while F (k−1) = ∅ (5) C k ← f sg − gen(F (k−1) ) (6) for each ứng viên Gk ∈ C k (7) Gk count ← (8) for each giao dịch T ∈ D (9) if ứng viên Gk nằm giao dịch T then (10) Gk count ← Gk count + (11) F k ← Gk ∈ C k |Gk count ≥ σ|D| (12) k ←k+1 (13) return F , F , , F (k−2) Thuật toán FSG trình bày Thuật tốn 2.1 Hoạt động thuật toán sau: Đầu tiên thuật toán khởi tạo cách liệt kê tất đồ thị cạnh phổ biến Sau đó, dựa vào này, bắt đầu lặp việc tính tốn 19 Giang Thành Trung Trần Đăng Hưng Trong lần lặp, tạo đồ thị ứng viên có kích thước lớn đồ thị bước trước cạnh (dòng 5), điều có nghĩa thuật tốn tăng kích thước đồ thị phổ biến cách thêm vào cạnh thời điểm Tiếp theo, đếm tần suất ứng viên (từ dòng 8-10) giữ lại ứng viên đáp ứng độ hỗ trợ σ (dòng 11) Thuật toán dừng lại số lượng ứng viên phát 0, nghĩa khơng có đồ thị phổ biến kích thước lớn thời điểm Để thực Thuật tốn 2.1 cần xây dựng số mơ-đun hỗ trợ Chúng tơi trình bày mô-đun phần Thuật toán sinh ứng viên (fsg-gen) Sinh ứng viên mơ-đun quan trọng thuật tốn FSG, giúp xác định đồ thị có kích thước lớn từ đồ thị phổ biến xác định từ bước trước trước Từ tập ứng viên vừa tạo thuật toán tiếp tục loại bớt ứng viên khơng phổ biến (có tần suất xuất < σ|D|) giữ lại ứng viên phổ biến Trong pha sinh ứng viên thuật toán tạo tập đồ thị ứng viên kích thước k+1 từ đồ thị phổ biến kích thước k, đồ thị ứng viên kích thước k + tạo cách ghép đồ thị phổ biến kích thước k Hai đồ thị đủ điều kiện để ghép chúng có đồ thị kích thước k–1 đồ thị gọi “nhân” Các bước việc tạo ứng viên là: - Xác định nhân: Nhân cặp đồ thị Gki Gkj xác định cách tạo tất đồ thị kích thước k–1 Gki cách bỏ cạnh kiểm tra xem có phải đồ thị Gkj không Nếu đồ thị Gkj nhân chung đồ thị Lưu ý đồ thị có nhiều nhân - Ghép nối : Tiến hành tạo tất tự đẳng cấu nhân lựa chọn thực nối đồ thị Gki , Gkj để tạo đồ thị ứng viên kích thước k + cách từ nhân tự đẳng cấu nhân ta ghép vào cạnh, Gki Gkj mà không nằm nhân - Lược bớt: Sử dụng thuộc tính chặn đóng điều kiện hỗ trợ để loại bỏ vài ứng viên tạo Để làm điều này, với ứng viên kích thước k + 1, thuật tốn đưa đồ thị kích thước k cách bỏ bớt cạnh đồ thị ứng viên, sau kiểm tra xem đồ thị tồn F k hay chưa Thuật toán tạo ứng viên thể Thuật toán 2.2 gồm bước đây: - Bước 1: Với cặp đồ thị phổ biến, thuật toán fsg-gen xác định tất nhân chung chúng - Bước 2: Sau với nhân chung cặp đồ thị gọi đến thuật toán fsg-join để tạo tất ứng viên kích thước k + - Bước 3: Với ứng viên tạo ra, thuật toán kiểm tra ứng 20 Một thuật toán khai phá đồ thị phổ biến liệu đồ thị viên có C (k+1) hay chưa + Nếu chưa fsg-gen xác minh tất đồ thị k cạnh xem có đồ thị phổ biến hay không + Nếu phổ biến, fsg-join chèn ứng viên tạo vào C (k+1) + Nếu khơng loại bỏ ứng viên + Nếu có bỏ qua ứng viên Thuật toán 2.2: fsg-gen(F k ) (Thuật toán tạo ứng viên) (1) C (k+1) ← ∅ (2) for each cặp Gki , Gkj ∈ F k , i ≤ j mà cl(Gki ≤ Gkj ) (3) H(k−1) ←H (k−1) | nhân H (k−1) chung Gki Gkj (4) for each H (k−1) ∈ H(k−1) (5) {B (k+1) tập ứng viên dự kiến} (6) B (k+1) ← f sg − join(Gki , Gkj , H (k−1) ) (k+1) (7) for each Gj ∈ B (k+1) (8) {kiểm tra thuộc tính chặn đóng} (9) f lag ← true (k+1) (10) for each cạnh el ∈ Gj (11) (12) (13) (14) (15) (16) (17) (k+1) Hlk ← Gj − el if Hlk liên thông H k ∈ F k then f lag ← f alse break if f lag = true then (k+1) C (k+1) ← C (k+1) ∪Gj return C (k+1) Trong thuật toán khởi tạo đồ thị ứng viên có bước quan trọng ghép nối đồ thị có chung nhân Khơng giống việc ghép nối tập mục phổ biến, tập mục phổ biến kích thước k ghép nối dẫn đến tập mục kích thước k + việc ghép nối đồ thị kích thước k dẫn tới nhiều đồ thị kích thước k + nguyên nhân sau: - Đầu tiên trường hợp khác lõi chung đồ thị đỉnh có nhãn giống đồ thị kích thước k Khi ghép nối tạo đồ thị kích thước k + khác Ví dụ Hình 2.1 đồ thị G4a G4b kết nối tạo đồ thị G5a G5b tương ứng Hình 2.1 Khi kết nối nhãn đỉnh - Thứ hai nhân đồ thị kích thước k có nhiều tự đẳng cấu, 21 Giang Thành Trung Trần Đăng Hưng tự đẳng cấu tạo ứng viên k + khác Trong trường hợp xấu nhân đồ thị clique không gán nhãn số lượng tự đẳng cấu k! Ví dụ Hình 2.2, nhân hình vng có đỉnh gán nhãn có tự đẳng cấu thể ứng viên kích thước Hình 2.2 Kết nối có đa đẳng cấu nhân - Thứ ba đồ thị phổ biến có chung nhiều nhân Ví dụ Hình 2.3 Hình 2.3 Kết nối có đa nhân Thuật tốn ghép nối đồ thị kích thước k thể Thuật toán 2.3 Cho cặp đồ thị kích thước k, Gk1 Gk2 nhân kích thước k-1 Kết trả thuật toán tập đồ thị ứng viên kích thước k + Hoạt động cụ thể thuật toán sau: - Bước 1: fsg-join tiến hành xác định cạnh, Gk1 Gk2 cho chúng không nằm nhân - Bước 2: fsg-join tạo tất tự đẳng cấu nhân - Bước 3: với tập cạnh, nhân tự đẳng cấu, fsg-join tích hợp đồ thị Gk1 Gk2 vào ứng viên kích thước k + 22 Một thuật tốn khai phá đồ thị phổ biến liệu đồ thị Thuật toán 2.3: fsg-join(Gk1 , Gk2 , H (k−1) ) (Thuật toán ghép nối đồ thị) (1) e1 ← cạnh xuất Gk1 ,nhưng khơng có H (k−1) (2) e2 ← cạnh xuất Gk2 ,nhưng khơng có H (k−1) (3) M ← tạo tất tự đẳng cấu H (k−1) (4) B (k+1) = ∅ (5) for each tự đẳng cấu ϕ ∈ M (6) B (k+1) ← B (k+1) ∪ tất đồ thị ứng viên k+1 tạo từ tập e1 , e2 , H (k−1) ϕ (7) return B (k+1) Để giảm thiểu thời gian xác định nhân đồ thị phổ biến lưu giữ lại số thông tin từ tập đồ thị phổ biến Cụ thể, đồ thị phổ biến kích thước k lưu trữ nhãn định danh đồ thị phổ biến kích thước k-1 nó, việc xác định nhân cách xác định giao nhãn định danh Độ phức tạp phương pháp bình phương số lượng đồ thị phổ biến kích thước k 2.3 Cài đặt thử nghiệm thuật toán FSG Thuật tốn cài đặt hướng đối tượng ngơn ngữ Java dựa việc xây dựng lớp Vì giới hạn báo, nên phần cung cấp số thông tin nội dung lớp Tổ chức liệu vào/ra - Dữ liệu vào lưu tệp tin văn có cách tổ chức sau: Loại dịng Chú thích Định dạng # Số đỉnh Đỉnh v Giao dịch t Cạnh u Giải thích ý nghĩa Ký hiệu báo hiệu thích, chương trình bỏ qua dịng có ký hiệu đầu Chứa số đỉnh có đồ thị Mã đỉnh nhãn đỉnh (mã số nguyên không âm, nhãn chuỗi ký tự không dấu) Bắt đầu giao dịch, số cạnh giao dịch Mã đỉnh đầu đỉnh cuối cạnh nhãn cạnh Ví dụ: Cho đồ thị biểu diễn hình bên trái, liệu vào biểu diễn hình bên phải 23 Giang Thành Trung Trần Đăng Hưng Đồ thị mẫu Ví dụ cách biểu diễn liệu đồ thị - Tệp liệu chứa kết thu sau chạy thuật toán lưu tệp tin văn có cách tổ chức sau: Loại dịng Chú thích Kích thước Giao dịch Định dạng # Giải thích ý nghĩa Ký hiệu báo hiệu thích, chương trình bỏ qua dịng có ký hiệu đầu size Kích thước đồ thị phổ biến tìm sg - Bắt đầu đồ thị phổ biến bao gồm các mã đỉnh đầu, cuối nhãn cạnh *- Các cạnh phân biệt dấu * * Ví dụ tệp biểu diễn danh sách đồ thị phổ biến tìm 24 Một thuật toán khai phá đồ thị phổ biến liệu đồ thị Thiết kế lớp - Gói Graph bao gồm lớp để biểu diễn đối tượng đồi thị Gói gồm lớp VertexLabel, EgdeLabel, Graph CandidateGraph + Lớp VertexLabel : sử dụng để biểu diễn đối tượng đỉnh Các thuộc tính/phương thức - int ID - String Label + void setID(String pID) + void setLabel(String pLabel) + int getID() + string getLabel() Ý nghĩa Biểu diễn mã đỉnh Biểu diễn nhãn đỉnh Phương thức thiết lập mã đỉnh Phương thức thiết lập nhãn đỉnh Phương thức đọc mã đỉnh Phương thức đọc nhãn đỉnh + Lớp EdgeLabel : sử dụng để biểu diễn đối tượng cạnh Các thuộc tính/phương thức - int firstVertex - int lastVertex - String Label + void setFirstVertex(int pFV) + void setLastVertex(int pLV) + void setLabel(String pLabel) + int getFirstVertex() + int getLastVertex() + String getLabel() Ý nghĩa Biểu diễn mã đỉnh thứ Biểu diễn mã đỉnh thứ hai Biểu diễn nhãn cạnh Phương thức thiết lập mã đỉnh thứ Phương thức thiết lập mã đỉnh thứ hai Phương thức thiết lập nhãn cạnh Phương thức đọc mã đỉnh thứ Phương thức đọc mã đỉnh thứ hai Phương thức đọc nhãn cạnh + Lớp Graph: sử dụng để biểu diễn đối tượng đồ thị Các thuộc tính/phương thức - Int numOfVer - Int numOfEdge - VertexLabel[] lV = new VertexLabel[1000] Ý nghĩa Biểu diễn số đỉnh đồ thị Số cạnh đồ thị Danh sách nhãn đỉnh 25 Giang Thành Trung Trần Đăng Hưng - EdgeLabel[] lE = new EdgeLabel[1000] boolean[] fV = new boolean[1000] - String[][] Matrix = new String[100][100] - String code - String cL + Graph() + Graph(int pNumOfVertex, int pNumOfEdge) + void GenerateAdjacencyMatrix() + void SetCode() + void SetCanonicalLabel() Danh sách nhãn cạnh Biến đánh dấu hoán vị đỉnh Ma trận kề tương ứng đồ thị Mã đồ thị (hỗ trợ việc tạo Canonical Label) Nhãn tiêu chuẩn đồ thị Phương thức khởi tạo đối tượng Phương thức khởi tạo đối tượng với tham số Phương thức tạo ma trận kề Phương thức sinh mã đồ thị Phương thức sinh Canonical Label đồ thị + Lớp CandidateGraph: kế thừa từ lớp Graph sử dụng để biểu diễn đối tượng đồ thị ứng viên sinh đồng thời biểu diễn đồ thị phổ biến xác định Các thuộc tính/phương thức - String cL1 - String cL2 + + + + void setCL1(String pCL1) void setCL2(String pCL2) String getCL1() String getCL2() Ý nghĩa Biểu diễn nhãn tiêu chuẩn đồ thị thứ sinh đồ thị Biểu diễn nhãn tiêu chuẩn đồ thị thứ hai sinh đồ thị Phương thức thiết lập cL1 Phương thức thiết lập cL2 Phương thức đọc giá trị cL1 Phương thức đọc giá trị cL2 - Gói Process bao gồm lớp xử lý đồ thị: + Lớp GetInput: đọc liệu tệp tin nhớ ngồi 26 Một thuật tốn khai phá đồ thị phổ biến liệu đồ thị Các thuộc tính/phương thức - String fileName + void setfileName(String pFN) + void ReadFile(String FileName, Graph graph[], int[] tnum) Ý nghĩa Biểu diễn đường dẫn tệp tin chứa liệu vào Phương thức thiết lập đường dẫn cho tệp tin vào Phương thức đọc liệu tệp tin biểu diễn vào mảng đồ thị + Lớp ProcessGraph: đọc liệu tệp tin nhớ Các thuộc tính/phương thức + boolean isomorphism(Graph g1, Graph g2) + string compareCode(String paraCode1, String paraCode2) + void PermuteIdentifier() Ý nghĩa Xác định tính đẳng cấu đồ thị So sánh đoạn mã để xác định mã có thứ tự từ điển lớn Xác định hoán vị đỉnh của đồ thị để sinh mã tương ứng - Gói Main bao gồm lớp sau: + Lớp FSG: bao gồm phương thức cài đặt thuật tốn FSG Các thuộc tính/phương thức - Graph[] graph - int[] tn - CandidateGraph[][] canGraph CandidateGraph[][] quentSubgraph + void Input() + void FSG() fre- Ý nghĩa Biểu diễn đồ thị đọc từ tệp tin vào Biểu diễn tổng số giao dịch Biểu diễn tập đồ thị ứng viên sinh Biểu diễn tập đồ thị phổ biến xác định Phương thức đọc liệu từ tệp tin đầu vào Phương thức chạy thuật toán FSG 27 Giang Thành Trung Trần Đăng Hưng + void GenerateFirstCandidate() + void FSG_Gen(int k) + graph[] coreIdentifier(Graph g1, Graph g2) + void FSG_Join(Graph g1, Graph g2, Graph gcore) Phương thức khởi tạo tập ứng viên 1, cạnh Phương thức khởi tạo tập ứng viên kích thước k ≥ Phương thức xác định nhân đồ thị Phương thức kết nối đồ thị để tạo ứng viên Kết thực nghiệm Chúng tơi cài đặt hồn chỉnh chương trình thử nghiệm hai tập liệu nhỏ với mục đích minh họa Tập liệu : Gồm đồ thị có cấu trúc hình vẽ đây: - Mơ hình sở liệu đồ thị đầu - File liệu vào tương ứng với vào: tập liệu đồ thị - File kết sau chạy chương trình với ngưỡng support σ=50 - Biểu diễn kết mơ hình: 28 Một thuật toán khai phá đồ thị phổ biến liệu đồ thị + Kích thước 3: + Kích thước 4: Tập liệu : Gồm đồ thị có cấu trúc hình vẽ - Mơ hình đồ thị giao dịch đầu vào: - File liệu vào tương ứng với tập liệu đồ thị 2: - File kết sau chạy chương trình với ngưỡng support σ=70 - Biểu diễn mơ hình: + Kích thước 3: + Kích thước 4: Kết luận Trong báo tìm hiểu cài đặt thuật tốn hiệu việc khai phá đồ thị phổ biến Thuật toán dựa tư tưởng thuật toán Apriori tìm tập mục phổ biến Tuy nhiên, thực với liệu đồ thị việc lưu trữ xử lý liệu khó khăn phức tạp Chúng đưa cách biểu diễn đối tượng lớp sử dụng lập trình hướng đối tượng để cài 29 Giang Thành Trung Trần Đăng Hưng đặt thuật tốn Chúng tơi thử nghiệm chương trình hai liệu tự tạo với số lượng đồ thị tương đối nhỏ Trong thời gian tới, tiến hành chạy thử nghiệm liệu biểu gien với số lượng lớn đồ thị TÀI LIỆU THAM KHẢO [1] Zaki M J., 2002 Efficiently mining frequent trees in a forest In Proc of The 8th ACM SIGKDD Conference on Knowledge Discovery and Data Mining, 71-80 [2] Dehaspe L., Toivonen H., and King R D., 1998 Finding frequent substructures in chemical componuds Proc of the 4th International Conference on Knowledge Discovery and Data Mining, 30–6 [3] Yan X., Philip S., Jiawei H., 2004 Graph indexing: a frequent structure-based approach In Proc of The 2004 ACM SIGMOD International conference on Management of Data, 335-346 [4] Agrawal R and Srikant R., 1994 Fast algorithms for mining association rules In Proc of the 20th International Conference on Very Large Databases (VLDB), 487–499 [5] Inokuchi A., Washio T., and Motoda H., 2000 An apriori-based algorithm for mining frequent substructures from graph data In Proc of the 4th European Conference on Principles and Practices of Knowledge Discovery in Databases (PKDD), 13–23 [6] Kuramochi M and Karypis G., 2004 Frequent subgraph discovery IEEE Transactions on Knowledge and Data Engineering, 16(9), 1038 – 1051 [7] Yan X and Han J., 2002 gSpan: Graph-based substructure pattern mining In Proc of The 2002 IEEE International Conference on Data Mining, 120-125 [8] Borgelt C and Berhold M R., 2002 Mining molecular frag-ments: Finding relevant substructures of molecules In Proc of The 2002 IEEE International Conference on Data Mining, 51-58 ABSTRACT A frequent subgraph mining algorithm in graph databases The problem of finding frequent substructures in a structural dataset has been applied in many fields Previously, several difference algorithms were proposed However, due to the complexity of the structural data, these algorithms faced the challenge of computational cost In this paper, we introduce an efficient algorithm for mining subgraphs from a graph database, namely FSG This algorithm is an extension of the Apriori algorithm with some new modules added in the candidate generation step We implemented FSG using Java programming language 30 ... ≤ 1), tìm tất đồ thị phổ biến D 2.2 Thuật toán FSG Thuật toán 2.1: fsg(D, σ) (Phát đồ thị phổ biến) (1) F ← xác định tất đồ thị phổ biến cạnh D (2) F ← xác định tất đồ thị phổ biến cạnh D (3)... ra, thuật toán kiểm tra ứng 20 Một thuật toán khai phá đồ thị phổ biến liệu đồ thị viên có C (k+1) hay chưa + Nếu chưa fsg-gen xác minh tất đồ thị k cạnh xem có đồ thị phổ biến hay không + Nếu phổ. .. lượng đồ thị G′ (G′ ∈ D) mà G đồ thị đẳng ′ ′ ⊆G}| cấu G′ số lượng đồ thị có D: supG = |{G ∈D|G D Đồ thị G gọi đồ thị phổ biến supG ≥ σ Định nghĩa 2.6 Bài toán khai phá đồ thị phổ biến toán cho