Tiểu luận môn Thuật Toán và Phương Pháp Giải Quyết Vấn Đề XÂY DỰNG THUẬT TOÁN KIỂM TRA SỰ ĐẲNG CẤU CHO HAI ĐỒ THỊ VÔ HƯỚNG ĐƠN GIẢN

24 771 1
Tiểu luận môn Thuật Toán và Phương Pháp Giải Quyết Vấn Đề XÂY DỰNG THUẬT TOÁN KIỂM TRA SỰ ĐẲNG CẤU CHO HAI ĐỒ THỊ VÔ HƯỚNG ĐƠN GIẢN

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN Tiểu luận: XÂY DỰNG THUẬT TOÁN KIỂM TRA SỰ ĐẲNG CẤU CHO HAI ĐỒ THỊ VÔ HƯỚNG ĐƠN GIẢN HVTH: Võ Thành Nhân MSHV: CH1301103 GVPT: PGS.TS Đỗ Văn Nhơn Thành phố Hồ Chí Minh 10 – 2014 ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN Tiểu luận mơn học: Thuật tốn & PP giải vấn đề Tiểu luận: XÂY DỰNG THUẬT TOÁN KIỂM TRA SỰ ĐẲNG CẤU CHO HAI ĐỒ THỊ VÔ HƯỚNG ĐƠN GIẢN HVTH: Võ Thành Nhân MSHV: CH1301103 GVPT: PGS.TS Đỗ Văn Nhơn Thành phố Hồ Chí Minh 10 – 2014 Mục lục Tiểu luận mơn học: Thuật tốn & PP giải vấn đề Tiểu luận môn học: Thuật toán & PP giải vấn đề Mở đầu 1.1 Tại phải nghiên cứu toán Bài toán đẳng cấu đồ thị nhận quan tâm đáng kể nhà nghiên cứu tốn sở có nhiều ứng dụng khoa học-kỹ thuật thực tế Tuy nhiên, chưa xác định thuộc lớp P hay NP-Complete Các thuật toán kiểm tra đẳng cấu hai đồ thị tốt có độ phức tạp cho trường hợp xấu hàm mũ Như xác định tốn NPHard đóng vai trị sở cho nhiều toán khác khoa học, thực tiễn Vì việc nghiên cứu, tìm hiểu toán cần thiết cho người làm tin học(cả lý thuyết lẫn thực hành) 1.2 Vài ứng dụng tốn đẳng cấu đồ thị • Trong hóa học, hợp chất khác có cơng thức phân tử có cấu trúc khác Người ta mơ hình hóa hợp chất hóa học đồ thị Như hai hợp chất giống đồ thị tương ứng chúng đẳng cấu với Bằng cách kiểm tra hợp chất hay khơng • Trong khoa học máy tính, đẳng cấu đồ thị dùng để tối ưu hóa tính tốn trình biên dịch, phân tích cấu trúc mạng xã hội, nhận dạng người dùng dựa hành vi website… • Trong cơng nghệ phần mềm, cách mơ hình hóa design pattern biết thành đồ thị Sau đó, source code chương trình phần mềm mơ hình thành đồ thị Lúc tìm xem đồ thị chương trình có đồ thị đẳng cấu với đồ thị design pattern hay khơng để tìm design pattern mà phần mềm sử dụng • Trong cơng nghiệp điện tử, đẳng cấu đồ thị dùng để thiết kế mạch điện tử tự động hóa nhằm làm đơn giản tối ưu hóa mạch điện tử Tiểu luận mơn học: Thuật tốn & PP giải vấn đề 1.3 Mục tiêu tiểu luận Tiểu luận tập trung vào cơng việc sau: • trình bày khái niệm vấn đề quy trình xây dựng giải pháp cho vấn đề theo tiếp cận thuật tốn • trình bày số định nghĩa, định lý chứng minh lý thuyết đồ thị cần thiết cho toán đẳng cấu đồ thị làm sở cho việc thành lập thuật toán kiểm tra đẳng cấu • xây dựng giải pháp kiểm tra đẳng cấu cho hai đồ thị vô hướng, đơn giản Vấn đề quy trình giải vấn đề theo tiếp cận thuật toán 2.1 Khái niệm vấn đề Vấn đề(bài toán) đề cập đến nhu cầu cần giải dựa sở gồm liệu, thông tin, tri thức cho trước Một vấn đề thường có đặc điểm sau đây: • nhu cầu cần giải thường không đơn giản • để giải vấn đề thường phải nghiên cứu, phân tích kiện cho trước, thực số suy luận, tính tốn chứng minh kiện, kết ,luật… Ví dụ số vấn đề tốn: • tốn xét đẳng cấu đồ thị • tốn thời khóa biểu cho trường đại học • tốn tìm chu trình Hamilton ngắn đồ thị có trọng số … 2.2 Xác định vấn đề Để xác định vấn đề(bài toán) ta cần phải xác định yếu tố sau đây: • • • • sở liệu, thơng tin, tri thức giả thiết (kí hiệu: A) mục tiêu, yêu cầu (kí hiệu: B) điều kiện ràng buộc liên quan (nếu có) Tiểu luận mơn học: Thuật toán & PP giải vấn đề Tổng qt vấn đề(bài tốn) thường kí hiệu: A → B(nghĩa tìm hay xác định B từ A) Có đơi lúc A B khơng rõ ràng, chẳng hạn vấn đề chẩn đoán chữa bệnh, dự báo thời tiết… 2.3 Quy trình xây dựng giải pháp Ở ta xét giải pháp cho vấn đề theo tiếp cận thuật toán nghĩa giải pháp diễn đạt dạng thủ tục thỏa mãn tính chất: xác định, hữu hạn Quy trình gồm bước sau đây: • Xác định mơ hình hóa vấn đề: vấn đề xác định rõ ràng, xác, mang tính hình thức cao cách dùng mơ hình tốn học, sơ đồ quy ước rõ ràng mặt ý nghĩa ngơn ngữ đặc tả • Xây dựng thuật tốn (thuật giải): hình thành ý tưởng(có thể mơ tả ngơn ngữ tự nhiên) Sau chuyển ý tưởng thành thuật tốn, thuật giải cho ví dụ minh họa cách hoạt động thuật tốn • Chứng minh tính đắn: nguyên tắc phải chứng minh tính thuật tốn cơng cụ toán học logic toán cấu trúc đại số Tuy nhiên, trường hợp chứng minh khó khăn, phức tạp phải lý giải thuyết minh yếu tố trực quan, trực giác • Phân tích thuật tốn (xét tính hiệu quả): đánh giá hiệu thuật toán, xem thuật toán thuộc lớp phức tạp Tốt xác định xác độ phức tạp thuật tốn(xác định big-theta: Θ) chận hợp lý(xác định big-O: O) • Cải tiến, nâng cao hiệu thuật toán: bước tùy chọn sau đánh giá thuật toán, độ phức tạp thuật toán lớn cảm thấy cải tiến thuật tốn tốt tiến hành cải tiến, nâng cao hiệu thuật tốn • Cài đặt ứng dụng thử nghiệm: bước cuối tiến hành cài đặt thuật toán, chọn mẫu liệu để chạy Nếu ta khơng chứng minh tính thuật tốn lý thuyết bước ta phải chọn mẫu liệu cho bao phủ tất trường hợp, cho chạy thuật toán với mẫu tiến hành tính tốn vài tham số thống kê quan trọng kì vọng, phương sai… Tiểu luận mơn học: Thuật tốn & PP giải vấn đề Vài khái niệm cần thiết lý thuyết đồ thị Định nghĩa Một đồ thị vô hướng G = (V, E) với: • tập V ≠ Ø, hữu hạn gọi tập đỉnh • E gọi tập cạnh đa tập hợp với phần tử khơng có thứ tự dạng (vi, vj) với vi, vj ∈ V Nếu tập E đơn tập hợp ∀ (vi, vj) ∈ E: vi ≠ vj G gọi đồ thị vô hướng đơn giản Trong phạm vi tiểu luận ta xét đồ thị vô hướng đơn giản Định nghĩa Cho đồ thị G = (V, E) e = (v i, vj) ∈ E Ta nói cạnh a kề với hai đỉnh v i, vj hai đỉnh vi, vj kề Định nghĩa Cho đồ thị vô hướng, đơn giản G = (V, E), ∀ u ∈ V, đặt A(u) = { v ∈ V| (u, v) ∈ E } bậc đỉnh u kí hiệu d(u) d(u) = |A(u)| Định nghĩa Cho đồ thị vô hướng G = (V, E) G’ = (V’, E’) Ta nói G G’ đẳng cấu kí hiệu G ≅ G’ tồn song ánh f: V → V’ cho ∀ (vi, vj) ∈ E ⇔ (f(vi), f(vj)) ∈ E’ Nhận Xét Từ định nghĩa ta thấy G G’ đẳng cấu với chúng có số tính chất sau suy từ định nghĩa: • • • • phép đẳng cấu bảo toàn quan hệ kề(đỉnh kề đỉnh, cạnh kề cạnh, đỉnh kề cạnh) G G’ có số đỉnh G G’có số cạnh G G’có số đỉnh với bậc cho trước Tiểu luận môn học: Thuật tốn & PP giải vấn đề • số đỉnh kề với đỉnh v ∈ V f(v) ∈ V’ Mệnh đề Cho G = (V, E) đồ thị vô hướng, đơn giản, n = |V| Ta có V = , với Ik = { v ∈ V | d(v) = k} Chứng minh: hiển nhiên { ⊆ V Ik ∩ Il = Ø với k ≠ l , ta chứng minh V ⊆ { Do G đồ thị vô hướng, đơn giản nên ∀ v ∈ V: ≤ d(v) ≤ n – Đặt k = d(v), ta có v ∈ Ik ⟹ V ⊆ { Vậy V = Định nghĩa Cho G = (V, E) đồ thị vô hướng, đơn giản n = |V| I k = { v ∈ V | d(v) = k}, ≤ k ≤ n– Đồ thị sinh I k định nghĩa sau: Gk = (Ik, Ek), Ek = {(u, v) ∈ E | u, v ∈ Ik} Mệnh đề Cho G = (V, E) G = (V’, E’) hai đồ thị vô hướng, đơn giản đẳng cấu với qua song ánh f: V → V’ Gk = (Ik, Ek) G’k = (I’k, E’k) hai đồ thị sinh I k ⊆ V, I’k ⊆ V’, ≤ k ≤ n – 1(n = |V|) Gk đẳng cấu với G’k qua song ánh f k: Ik → I’k fk(v) = f(v) Chứng minh: xét vki ≠ vkj ∈ Ik ta có fk(vki) = f(vki), fk(vkj) = f(vkj) mà f song ánh ⟹ fk(vki) ≠ fk(vkj) ⟹ fk đơn ánh, mặt khác |Ik| = |I’k| G ≅ G’ ⟹ fk song ánh (1) Ta lại có ∀ (vki, vkj) ∈ Ek ⇔ (f(vki), f(vkj)) ∈ E’ ⇔ (fk(vki), fk(vkj)) ∈ E’ ⇔ (fk(vki), fk(vkj)) ∈ E’k (2) Từ (1) (2) ⟹ Gk G’k đẳng cấu qua song ánh fk Nhận xét Từ mệnh đề ta suy rằng: • G ≅ G’ qua song ánh f f(V) = {f(v) | v ∈ V} = với Gk ≅ G’k qua fk • Gk G’k khơng đẳng cấu với G G’ không đẳng cấu với Tiểu luận mơn học: Thuật tốn & PP giải vấn đề Xây dựng giải pháp kiểm tra đẳng cấu 4.1 Quy ước kí hiệu định dạng mã giả Để tiện việc trình bày thuật tốn, ta quy ước rằng: • đỉnh đồ thị G đánh số v1, v2, v3… • đồ thị G, G’(cùng với tập đỉnh V, V’ tập cạnh E, E’) có phạm vi toàn cục, truy xuất tùy ý function • đoạn mã có tầm vực gióng thẳng hàng với mà khơng có chuỗi báo hiệu bắt đầu kết thúc khối begin, end, {, } 4.2 Phát biểu toán Bài tốn phát biểu ngơn ngữ tự nhiên: “Cho hai đồ thị vô hướng, đơn giản G = (V, E) G’ = (V’, E’) Hãy kiểm tra xem hai đồ thị có đẳng cấu hay khơng ? Nếu có song ánh f tương ứng” Từ mơ tả ta mơ hình hóa tốn sau: Input: G = (V, E), G’ = (V’, E’) Output: isomorphic = “yes” “no” // “yes”: G ≅ G’, “no”: G ≇ G’ Nếu isomorphic = “yes” song ánh f tương ứng Ràng buộc: G, G’ đồ thị vô hướng, đơn giản 4.3 Thuật toán kiểm tra đồ thị đẳng cấu Ý tưởng thuật toán kiểm tra đẳng cấu hai đồ thị dị tìm song ánh f: V → V’ cho ∀ (vi, vj) ∈ E ⇔ (f(vi), f(vj)) ∈ E’ Như vậy, nói chung thuật tốn thuật toán vét cạn Tuy nhiên, hiệu thuật toán phụ thuộc vào cách làm giảm khơng gian tìm kiếm song ánh Vì vậy, có nhiều thuật tốn kiểm tra đẳng cấu khác chúng có chung mục tiêu giảm khơng gian tìm kiếm song ánh f đến mức thấp Thuật toán đơn giản kiểm tra song ánh f: V → V’ có thỏa điều kiện bảo tồn cạnh hay khơng Đây thuật toán kiểm tra đẳng cấu ngây thơ đơn giản Ta Tiểu luận mơn học: Thuật tốn & PP giải vấn đề tạm đặt cho tên Native-Isomorphic-Checking Đầu tiên kiểm tra vài tiêu chuẩn phải có: số cạnh, số đỉnh Nếu hai đồ thị thỏa tiêu chuẩn tiến hành vét cạn tất song ánh f tìm song ánh thỏa mãn điều kiện bảo toàn cạnh Thuật tốn trình bày mã sau: Native-Isomorphic-Checking (G, G’) Input: G = (V, E); G’=(V’, E’) đồ thị isomorphic = true if (|V| != |V’| OR |E| != |E’|) isomorphic = false else f = Find-Bijection(G, G’) if (f == []) isomorphic = false if (isomorphic == true) println “Hai đồ thị đẳng cấu qua ánh xạ:” for i = to length(f) print vi + “→” + v’f[i] else println “Hai đồ thị không đẳng cấu” function FindBijection () Output: song ánh f thỏa (vi, vj) ∈ E ⇔ (v’f[i], v’f[j]) ∈ E’ valid = false π = [] f = [] n = |V| for i = to n! π = Next-Permutation(π, n) f = π valid = Is-Bijection-Valid(G, G’, f) if (exists == false) break f = [] 10 Tiểu luận mơn học: Thuật tốn & PP giải vấn đề return f Như quy ước ban đầu, đỉnh đồ thị đánh số từ v 1, v2, …, nên việc tìm song ánh f tương đương việc tìm hốn vị 1,2, ,n thỏa (vi, vj) ∈ E ⇔ (v’f[i], v’f[j]) ∈ E’ Hàm Next-Permutation trả hoán vị hoán vị hành theo thứ tự từ điển Hàm Is-Bijection-Valid kiểm tra hai đồ thị G, G’ có đẳng cấu qua song ánh f hay không Chi tiết hàm xin xem phần Phụ lục 4.4 Chứng minh tính Thuật tốn hồn tồn dựa vào định nghĩa, xét song ánh f để kiểm tra tính chất ∀ (vi, vj) ∈ E ⇔ (f(vi), f(vj)) ∈ E’ nên thuật toán hoạt động mong đợi Các thuật toán phần cải tiến không xét song ánh dựa vào tính chất chứng minh mặt toán học nên đảm bảo khơng bỏ sót song ánh ứng viên Chúng lược bỏ song ánh chắn không làm cho hai đồ thị đẳng cấu Với song ánh cịn lại chúng tiến hành kiểm tra tính chất ∀ (vi, vj) ∈ E ⇔ (f(vi), f(vj)) ∈ E’, nên chúng hoạt động mong đợi 4.5 Đánh giá độ phức tạp Độ phức tạp thuật toán định độ phức tạp hàm FindBijection Một cách trực quan ta thấy hàm vét cạn tất song ánh f: V → V’ để tìm song ánh thỏa mãn điều kiện bảo toàn cạnh, mà số song ánh n! (n = |V|), nên thuật tốn có độ phức tạp trường hợp xấu O(n!) Độ phức tạp cao, nên cần thiết tiến hành cải tiến để có thuật tốn có độ phức tạp tốt 4.6 Cải tiến thuật toán Như phần Nhận Xét đề cập, hai đồ thị đẳng cấu ngồi số cạnh, số đỉnh chúng phải có số đỉnh với bậc cho trước ⟹ áp dụng nhận xét cách tạo dãy số gồm bậc đỉnh đồ thị, sau xếp hai dãy theo thứ tự tăng dần so sánh hai dãy kết với Nếu hai dãy không giống kết luận hai đồ thị khơng đẳng cấu (1) 11 Tiểu luận mơn học: Thuật tốn & PP giải vấn đề Mặt khác, Nhận Xét có tính chất G ≅ G’ qua song ánh f số đỉnh kề với đỉnh v ∈ V f(v) ∈ V’ ⟹ điều có nghĩa cần tìm song ánh đỉnh có bậc Chúng ta áp dụng tính chất cách phân hoạch tập đỉnh đồ thị thành hợp tập rời nhau, tập tập hợp đỉnh có bậc Sau xét song ánh mà ánh xạ đỉnh bậc (2) Về mặt kĩ thuật, việc phân hoạch thực cách xếp đỉnh theo bậc chúng theo hướng chung tăng giảm Kết đỉnh có bậc nằm liên tiếp Chi phí cho việc vào khoảng O(nlogn) dùng thuật toán Quicksort hay Mergesort Như rõ ràng bỏ qua song ánh “không cần thiết”, song ánh mà ánh xạ đỉnh bậc k thành đỉnh bậc l V’ với l≠k, góp phần làm giảm kích thước khơng gian tìm kiếm Nếu V phân hoạch thành k tập rời độ phức tạp thuật toán trường hợp xấu O((()!)k) < O(n!) Ta tạm đặt tên cho thuật toán cải tiến Isomorphic-Checking-Improve1 Các cải tiến (1) (2) thể qua hàm Isomorphic-Graph-Checking2 function Isomorphic-Checking-Improve1 (G, G’) Input: G = (V, E); G’=(V’, E’) đồ thị isomorphic = true if (|V| != |V’| OR |E| != |E’|) isomorphic = false else [DG, indexG] = Partition-Vertex-By-Degree (G) [DG’, indexG’] = Partition-Vertex-By-Degree (G’) if (DG != DG’) isomorphic = false else f = Find-Bijection2(G, DG, indexG, G’, DG’, indexG’) if (f == []) isomorphic = false if (isomorphic == true) 12 Tiểu luận môn học: Thuật toán & PP giải vấn đề println “Hai đồ thị đẳng cấu qua ánh xạ:” for i = to length(f) print vi + “→” + f[i] else println “Hai đồ thị không đẳng cấu” Hàm Partition-Vertex-By-Degree phân hoạch tập đỉnh cách xếp đỉnh tăng dần theo bậc, danh sách DG chứa bậc tăng dần danh sách indexG chứa số i đỉnh vi tương ứng với bậc D G Hàm Find-Bijection2 tìm kiếm song ánh theo phân hoạch Chi tiết hàm xin tham khảo phần phụ lục Bây nói chúng thuật tốn chạy nhanh so với ban đầu, vét cạn song ánh tập tương ứng phân hoạch tổ hợp lại thành song ánh sau kiểm tra song ánh Tuy nhiên, Nhận Xét ta có lưu ý Gk G’k khơng đẳng cấu G G’ khơng đẳng cấu Điều có nghĩa với tập phân hoạch ta khơng tìm song ánh để hai đồ thị sinh hai tập tương ứng(theo Định nghĩa 5) đẳng cấu kết luận G G’ khơng đẳng cấu mà khơng cần tìm song ánh tập khác Điều làm giảm đáng kể song ánh cần kiểm tra giúp thuật toán chạy nhanh với trường hợp mà G G’ không đẳng cấu Ta tạm đặt tên cho thuật toán cải tiến Isomorphic-Checking-Improve2 Cải tiến thể qua hàm Find-Bijection3: function Find-Bijection3 (DG, indexG, DG’, indexG’) Input: DG – danh sách bậc đỉnh G tăng dần indexG - số đỉnh đồ thị G’ DG’ – danh sách bậc đỉnh G’ tăng dần indexG’ - số đỉnh đồ thị G’ Output: song ánh f thỏa (vi, vj) ∈ E ⇔ (v’f[i], v’f[j]) ∈ E’ numVerEachDeg = Count-Number-Vertex-ByDegree(DG) π = [] f = Generate-Bijection2(numVerEachDeg, π, indexG, indexG’) valid = IsBijectionValid(G, G’, f) if (valid == true) break while (f != []) 13 Tiểu luận mơn học: Thuật tốn & PP giải vấn đề return f function Generate-Bijection2 (numVerEachDeg, π, indexG, indexG’) Input: numVerEachDeg – danh sách mà numVerEachDeg[i] số phần tử bậc đồ thị G Π – danh sách mà Π[i] hoán vị từ numVerEachDeg[i] indexG – số đỉnh đồ thị G indexG’ - số đỉnh đồ thị G’ Output: f – song ánh từ {1,…,length(indexG)} → {1,…,length(indexG)} idx = f[i] = ∀ i = length(indexG) findFk = false for i = to length(numVerEachDeg) - if (numVerEachDeg[i] == 0) continue fk = Find-Bijection-SubGraph(i,numVerEachDeg[i],π[i],indexG , indexG’) if (fk != []) for j = to len(fk) if (fk[j] != 0) f[j] = fk[j] idx = idx + numVerEachDeg[i] else f = [] break return f function Find-Bijection-SubGraph (k, nVerK, π, indexG, indexG’) Input: numVerEachDeg – danh sách mà numVerEachDeg[i] số phần tử bậc đồ thị G Π – danh sách mà Π[i] hoán vị từ numVerEachDeg[i] indexG – số đỉnh đồ thị G indexG’ - số đỉnh đồ thị G’ Output: f – song ánh từ {1,…,length(indexG)} → {1,…,length(indexG)} findFk = false fk = [] Gk = (Ik, Ek) G’k = (I’k, E’k) while (findFk == false) π = Next-Permutation(π, nVerK) if (π == []) break fk[l] = ∀ l = length(indexG) 14 Tiểu luận mơn học: Thuật tốn & PP giải vấn đề for i = to nVerK fk[indexG[idx + i]] = indexG’[idx + π[i]] if (Is-Bijection-Valid (Gk, G’k, fk) == true) findFk = true else fk = [] return fk Điểm nhấn cải tiến hàm Find-Bijection-SubGraph tiến hành tìm song ánh từ Ik → I’k mà đồ thị sinh hai tập đẳng cấu qua song ánh Nếu khơng tìm song ánh kết luận hai đồ thị G G’ không đẳng cấu 4.7 Cài đặt thử nghiệm Tiểu luận tiến hành cài đặt thử nghiệm thuật toán kiểm tra đẳng cấu hai đồ thị Đầu tiên tiểu luận tạo tập đồ thị để làm liệu thử nghiệm Sau với thuật toán, chọn ngẫu nhiên hai đồ thị để kiểm tra đẳng cấu, lặp lại việc số lần để lấy thời gian trung bình làm kết so sánh cho thuật tốn Các chương trình viết VC ++ Visual Studio 2013, chạy máy PC vi xử lý Intel core i5 3.30 GHz, GB RAM Các tính sinh đồ thị thực thi thử nghiệm đạt công cụ imgraph-exp.exe sau: Để sinh đồ thị: imgraph-exp gen_graph Ví dụ để sinh 5000 đồ thị 10 đỉnh, mà có 100 đồ thị số cạnh, số đỉnh với bậc cho trước: imgraph-exp gen_graph 10 100 5000 Đề chạy thí nghiệm: imgraph-exp isomorphic_checking 15 Tiểu luận môn học: Thuật tốn & PP giải vấn đề Ví dụ để thực thí nghiệm cho kiểm tra đẳng cấu 1000 lần, lặp lại 100 lần, thuật toán Isomophic-Checking-Improve1, thư mục chứa đồ thị Data, file chứa kết res.txt: imgraph-exp isomorphic_checking 1000 100 Data rest.txt 4.7.1 Tạo liệu thử nghiệm Để tạo đồ thị làm liệu đầu vào cho thử nghiệm, tiểu luận tạo tập gồm 5000 đồ thị vơ hướng, đơn giản có 10 đỉnh theo thuật toán sau đây: graphs = {} nGraph = while (nGraph < 5000) a = sinh ngẫu nhiên dãy số nguyên [ai] gồm 10 phần tử, ≤ ≤ nGraph_i = graphs_i = {} for π in { tập hoán vị từ từ đến 10 } lập dãy [a’i] cho a’[i] = a[π[i]] graph = tạo đơn đồ thị với đỉnh i có bậc a’[i] tương ứng if (graph ≠ ⌀ AND graph ∉ graphs) graphs_i = graphs_i ∪ {graph} nGraph_i = nGraph_i + if (nGraph_i == 100) break if (nGraph_i == 100) graphs = graphs ∪ graphs_i nGraph = nGraph + nGraph_i Từ thuật toán ta thấy dãy [a i] “hợp lệ” sinh 100 đồ thị có số đỉnh, số cạnh, số đỉnh với bậc cho trước 4.7.2 Cách thức thử nghiệm Với thuật toán kiểm tra đẳng cấu trình bày trên, tiểu luận tiến hành thử nghiệm sau: sumTime = for i = to nLoop 16 Tiểu luận môn học: Thuật toán & PP giải vấn đề for j = to nGraphTest graph1 = chọn ngẫu nhiên đồ thị từ {graphs} graph2 = chọn ngẫu nhiên đồ thị từ {graphs} t1 = lấy hệ thống theo millisecond kiểm tra đẳng cấu hai đồ thị với thuật toán chọn t2 = lấy hệ thống theo millisecond sumTime = sumTime + (t2-t1) sumTime = sumTime/nLoop Với nGraphTest số lần kiểm tra đẳng cấu đồ thị thuật toán chọn, nLoop số lần lặp lại thao tác để lấy thời gian trung bình 4.7.3 Kết thử nghiệm Tiểu luận thử nghiệm theo cách với nLoop = 100 cho nGraphTest = 10000, 100000, 1000000, 10000000 Riêng thuật tốn Native-Isomorphic-Checking khơng làm theo cách chạy lâu Tiểu luận test với nGraphTest = 1000 thời gian chạy trung bình 348.901 giây Q chậm so với hai thuật tốn cịn lại Do kết trình bày đây, tiểu luận trình bày cho hai thuật toán Isomophic-Checking-Improve1(Cải tiến 1) Isomophic-Checking-Improve2(Cải tiến 2) Thuật toán nGraphTest 10000 100000 1000000 10000000 Cải tiến (giây) 0.020 0.208 1.830 20.321 Cải tiến (giây) 0.020 0.201 2.015 18.226 Quan sát kết thử nghiệm ta thấy thuật toán khơng có chênh lệch lớn Điều phù hợp với phần đánh giá ban đầu, thuật toán Isomophic-CheckingImprove2 cải tiến thuật toán Isomophic-Checking-Improve1 phần chọn song ánh 17 Tiểu luận mơn học: Thuật tốn & PP giải vấn đề để kiểm tra đẳng cấu Dù tốn chi phí để kiểm tra song ánh cho đồ thị sinh Ik nên tốt thuật tốn Isomophic-Checking-Improve1 đồ thị ban đầu không đẳng cấu với Kết luận Tiểu luận đạt số mục tiêu sau: • Giới thiệu tốn kiểm tra đẳng cấu hai đồ thị, ý nghĩa ứng dụng khoa hoc-kỹ thuật • Mơ tả khái niệm vấn đề quy trình xây dựng giải pháp cho vấn đề theo tiếp cận thuật tốn • Trình bày số định nghĩa, định lý cần thiết cho toán kiểm tra đẳng cấu hai đồ thị làm sở cho việc cải thiện thuật tốn • Đề xuất xuất thuật tốn kiểm tra đẳng cấu hai đồ thị vơ hướng, đơn giản với phân tích, cải tiến dựa sở chứng minh mặt toán học • Tiến hành cài đặt, thử nghiệm thuật toán, đánh giá kết mặt thực nghiệm so với lý thuyết Bên cạnh kết đạt được, tiểu luận có số hạn chế sau đây: • Chưa có tổng kết cách tiếp cận khác cho toán đẳng cấu đồ thị xuất thời gian gần chưa cách tiếp cận tốt nay(state-of-the-art) • Các thuật tốn trình bày có phần chi tiết, đơi dài dòng, số lượng tham số truyền vào function nhiều Chưa đưa định dạng tương đối gọn gàng, súc tích đảm bảo tiêu chuẩn thuật toán Căn vào đánh giá trên, cơng việc là: • Trình bày cách hệ thống cách tiếp cận khác cho toán đẳng cấu đồ thị Giới thiệu số trường hợp đồ thị đặc biệt mà thuật tốn kiểm tra đạt đến độ phức tạp thời gian đa thức 18 Tiểu luận mơn học: Thuật tốn & PP giải vấn đề • Trình bày định dạng cho thuật tốn cho chi tiết hơn, đơn giản dễ hiểu đảm bảo tiêu chuẩn thuật tốn • Phân tích, đánh giá thuật tốn cơng cụ tốn học để độ phức tạp cho thuật toán cải tiến Tài liệu tham khảo [1] Trần Ngọc Danh(2004), Toán Rời Rạc Nâng Cao, NXB Đại học Quốc Gia TpHCM [2] Bao Ngoc Tran, Thuc Dinh Nguyen An Efficient Algorithm for Isomorphic Problem on Generic Simple Graphs, Second Asia International Conference on Modelling & Simulation(2008) [3] Aimin Hou, Zhifeng Hao, A Polynomial Time Algorithm for Undirected Graph Isomorphism, WCE(2011) [4] Kenneth H.Rosen(2000), Discrete Mathematics And Its Applications, Mc Graw-Hill Press [5] Hồ Thuần(Chủ biên), Hồ Cẩm Hà, Trần Thiên Thành(2008), Cấu trúc liệu, Phân tích thuật tốn Phát triển phần mềm, NXB Giáo Dục Phụ lục function Next-Permutation (π, n) Input: n – số tự nhiên > π - hoán vị n Output: hoán vị π theo thứ tự từ điển [] π hoán vị lớn if (π == []) for i = to n π[i] = i 19 Tiểu luận môn học: Thuật toán & PP giải vấn đề else i = n - while (i >= AND π[i] > π[i+1]) i = i – if (i >= 1) j = n while (π[j] < π[i]) j = j – π[i] ⇄ π[j] i = i + 1, j = n while (i < j) π[i] ⇄ π[j] i = i + j = j – else π = [] return π function Is-Bijection-Valid (G1, G2, f) Input: G1 = (V1, E1), G2=(V2, E2) - đồ thị f – song ánh từ {1,2,…,|V|} -> {1,2,…,|V|} Output: true – G1 ≅ G2 qua song ánh f false - G1 ≇ G2 qua song ánh f result = true for each e = (vi, vj) ∈ E e’ = (v’f[i], v’f[j]) if (e’ ∉ E’) result = false break return result function Find-Bijection2 (DG, indexG, DG’, indexG’) Input: DG – danh sách bậc đỉnh G tăng dần indexG - số đỉnh đồ thị G’ 20 Tiểu luận mơn học: Thuật tốn & PP giải vấn đề DG’ – danh sách bậc đỉnh G’ tăng dần indexG’ - số đỉnh đồ thị G’ Output: song ánh f thỏa (vi, vj) ∈ E ⇔ (v’f[i], v’f[j]) ∈ E’ numVerEachDeg = Count-Number-Vertex-ByDegree(DG) nLoop = π = [] for i = to nLoop f = Generate-Bijection(numVerEachDeg, π, indexG, indexG’) valid = IsBijectionValid(G, G’, f) if (valid == true) break f = [] return f function Partition-Vertex-By-Degree (G) Input: G = (V, E) - đồ thị Output: danh sách L gồm phần tử L[1] - danh sách bậc đỉnh tăng dần L[2] – số đỉnh đồ thị tương ứng với danh sách DG = [] n = |V| index = [] for i = to n DG[i] = d(vi) index[i] = i; for i = to n -1 for j = i + to n if (DG[i] > DG[j]) DG[i] ⇄ DG[j] index[i] ⇄ index[j] return [DG, index] 21 Tiểu luận mơn học: Thuật tốn & PP giải vấn đề function Count-Number-Vertex-ByDegree (D) Input: D – danh sách bậc đỉnh tăng dần Output: numVerEachDeg - danh sách mà numVerEachDeg[i] số phần tử có bậc i numVerEachDeg[i] = ∀ i = length(D) - numDeg = for i = to length(D) if (DG[i] != DG[i-1]) numVerEachDeg[DG[i-1]] = numDeg numDeg = else numDeg = numDeg + numVerEachDeg[DG[i]] = numDeg return numVerEachDeg function Generate-Bijection (numVerEachDeg, π, indexG, indexG’) Input: numVerEachDeg – danh sách mà numVerEachDeg[i] số phần tử bậc đồ thị G Π – danh sách mà Π[i] hoán vị từ numVerEachDeg[i] indexG – số đỉnh đồ thị G indexG’ - số đỉnh đồ thị G’ Output: f – song ánh từ {1,…,length(indexG)} → {1,…,length(indexG)} idx = f = [] if (π == []) for i = to length(numVerEachDeg) π[i] = Next-Permutation(π[i], numVerEachDeg[i]) else for i = length(numVerEachDeg) down to π[i] = Next-Permutation(π[i], numVerEachDeg[i]) if (π[i] != []) for j = i + to length(numVerEachDeg) π[j] = [] π[j] = Next-Permutation(π[j], numVerEachDeg[j]) break for j = to numVerEachDeg[i] f[indexG[idx + j]] = indexG’[idx + π[i][j]] 22 Tiểu luận mơn học: Thuật tốn & PP giải vấn đề idx = idx + numVerEachDeg[i] return f 23 ... lập thuật toán kiểm tra đẳng cấu • xây dựng giải pháp kiểm tra đẳng cấu cho hai đồ thị vô hướng, đơn giản Vấn đề quy trình giải vấn đề theo tiếp cận thuật toán 2.1 Khái niệm vấn đề Vấn đề( bài toán) .. .Tiểu luận mơn học: Thuật tốn & PP giải vấn đề Tiểu luận: XÂY DỰNG THUẬT TOÁN KIỂM TRA SỰ ĐẲNG CẤU CHO HAI ĐỒ THỊ VÔ HƯỚNG ĐƠN GIẢN HVTH: Võ Thành Nhân MSHV: CH1301103... tương ứng Ràng buộc: G, G’ đồ thị vô hướng, đơn giản 4.3 Thuật toán kiểm tra đồ thị đẳng cấu Ý tưởng thuật toán kiểm tra đẳng cấu hai đồ thị dị tìm song ánh f: V → V’ cho ∀ (vi, vj) ∈ E ⇔ (f(vi),

Ngày đăng: 24/05/2015, 09:22

Từ khóa liên quan

Mục lục

  • 1. Mở đầu

    • 1.1 Tại sao phải nghiên cứu bài toán này

    • 1.2 Vài ứng dụng của bài toán đẳng cấu đồ thị

    • 1.3 Mục tiêu của tiểu luận

    • 2. Vấn đề và quy trình giải quyết vấn đề theo tiếp cận thuật toán

      • 2.1 Khái niệm vấn đề

      • 2.2 Xác định vấn đề

      • 2.3 Quy trình xây dựng giải pháp

      • 3. Vài khái niệm cần thiết về lý thuyết đồ thị

        • Định nghĩa 1.

        • Định nghĩa 2.

        • Định nghĩa 3.

        • Định nghĩa 4.

        • Nhận Xét 1.

        • Mệnh đề 1.

        • Định nghĩa 5.

        • Mệnh đề 2.

        • Nhận xét 2.

        • 4. Xây dựng giải pháp kiểm tra đẳng cấu

          • 4.1 Quy ước về kí hiệu và định dạng mã giả

          • 4.2 Phát biểu bài toán

          • 4.3 Thuật toán kiểm tra 2 đồ thị đẳng cấu

          • 4.4 Chứng minh tính đúng

          • 4.5 Đánh giá độ phức tạp

Tài liệu cùng người dùng

Tài liệu liên quan