1. Trang chủ
  2. » Luận Văn - Báo Cáo

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 775 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 24
Dung lượng 86,67 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mở đầu1.1 Tại sao phải nghiên cứu bài toán này Bài toán đẳng cấu đồ thị nhận được sự quan tâm đáng kể của các nhà nghiên cứu vì đó là bài toán cơ sở có rất nhiều ứng dụng trong khoa học-

Trang 1

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.

Trang 2

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.

Trang 3

Mục lục

1 Mở đầu 3

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

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

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

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

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

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

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

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

Định nghĩa 1 6

Định nghĩa 2 6

Định nghĩa 3 6

Định nghĩa 4 6

Nhận Xét 1 7

Mệnh đề 1 7

Định nghĩa 5 7

Mệnh đề 2 7

Nhận xét 2 8

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

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

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

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

Trang 4

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

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

4.6 Cải tiến thuật toán 11

4.7 Cài đặt và thử nghiệm 14

4.7.1 Tạo dữ liệu thử nghiệm 15

4.7.2 Cách thức thử nghiệm 16

4.7.3 Kết quả thử nghiệm 16

Kết luận 17

Tài liệu tham khảo 19

Phụ lục 19

function Next-Permutation (π, n)π, n) 19

function Is-Bijection-Valid (π, n)G1, G2, f) 20

function Find-Bijection2 (π, n)DG, indexG, DG’, indexG’) 20

function Partition-Vertex-By-Degree (π, n)G) 21

function Count-Number-Vertex-ByDegree (π, n)D) 21

function Generate-Bijection (π, n)numVerEachDeg, π, indexG, indexG’) 22

Trang 5

1 Mở đầu

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

Bài toán đẳng cấu đồ thị nhận được sự quan tâm đáng kể của các nhà nghiên cứu vì

đó là bài toán cơ sở có rất nhiều ứng dụng trong khoa học-kỹ thuật cũng như trong thực tế

Tuy nhiên, cho đến nay vẫn chưa xác định được nó thuộc lớp P hay NP-Complete Các

thuật toán kiểm tra sự đẳng cấu của hai đồ thị tốt nhất hiện nay vẫn có độ phức tạp cho

trường hợp xấu nhất là hàm mũ Như vậy có thể xác định rằng đây là một bài toán Hard đóng vai trò cơ sở cho nhiều bài toán khác trong khoa học, thực tiễn Vì vậy việc

NP-nghiên cứu, tìm hiểu bài toán này rất cần thiết cho người làm tin học(π, n)cả lý thuyết lẫn thựchành)

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

 Trong hóa học, các hợp chất khác nhau có thể có cùng công thức phân tử nhưng cócấu trúc khác nhau Người ta mô hình hóa một hợp chất hóa học bằng đồ thị Nhưvậy hai hợp chất giống nhau thì đồ thị tương ứng của chúng sẽ đẳng cấu với nhau.Bằng cách này có thể kiểm tra một hợp chất là mới hay không

 Trong khoa học máy tính, đẳng cấu đồ thị được dùng để tối ưu hóa các tính toántrong 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ựatrên hành vi trên một website…

 Trong công nghệ phần mềm, bằng cách mô hình hóa các design pattern đã biếtthành những đồ thị Sau đó, source code của chương trình phần mềm cũng được môhình thành đồ thị Lúc này có thể tìm xem trong đồ thị của chương trình có đồ thịcon nào đẳng cấu với một trong những đồ thị của các design pattern hay không đểtìm ra design pattern mà phần mềm đã sử dụng

 Trong công nghiệp điện tử, đẳng cấu đồ thị được dùng để thiết kế các mạch điện tử

tự động hóa nhằm làm đơn giản và tối ưu hóa các mạch điện tử

Trang 6

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

Tiểu luận sẽ tập trung vào các công việc sau:

 trình bày khái niệm về vấn đề và quy trình xây dựng giải pháp cho một vấn

đề theo tiếp cận thuật toán

 trình bày một số định nghĩa, định lý cùng các chứng minh của lý thuyết đồ thịcần thiết cho bài toán đẳng cấu đồ thị làm cơ sở cho việc thành lập các thuậttoán kiểm tra sự đẳng cấu

 xây dựng giải pháp kiểm tra sự đẳng cấu cho hai đồ thị vô hướng, đơn giả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 đề

Vấn đề(π, n)bài toán) là đề cập đến một nhu cầu cần được giải quyết dựa trên cơ sở gồmcác dữ liệu, thông tin, tri thức được cho trước Một vấn đề thường có 2 đặc điểm sau đây:

 nhu cầu cần giải quyết thường không đơn giản

 để giải quyết vấn đề thường phải nghiên cứu, phân tích các dữ kiện chotrước, thực hiện một số suy luận, tính toán hoặc chứng minh các sự kiện, kếtquả ,luật…

Ví dụ một số vấn đề bài toán:

 bài toán xét sự đẳng cấu của 2 đồ thị

 bài toán sắp thời khóa biểu cho một trường đại học

 bài toán tìm chu trình Hamilton ngắn nhất trên đồ thị có trọng số

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

Để xác định một vấn đề(π, n)bài toán) ta cần phải xác định các yếu tố sau đây:

 cơ sở dữ liệu, thông tin, tri thức

 giả thiết (π, n)kí hiệu: A)

Trang 7

 mục tiêu, yêu cầu (π, n)kí hiệu: B)

 những điều kiện ràng buộc liên quan (π, n)nếu có)

Tổng quát thì một vấn đề(π, n)bài toán) thường được kí hiệu: A → B(π, n)nghĩa là tìm hayxác định B từ A) Có đôi lúc A và B đều không rõ ràng, chẳng hạn như trong vấn đề chẩnđoán và chữa bệnh, dự báo thời tiết…

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

Ở đây ta xét giải pháp cho vấn đề theo tiếp cận thuật toán nghĩa là giải pháp được diễnđạt dưới dạng thủ tục thỏa mãn 3 tính chất: xác định, hữu hạn và đúng Quy trình gồm cácbước sau đây:

 Xác định và mô hình hóa vấn đề: vấn đề được xác định rõ ràng, chính xác,mang tính hình thức cao bằng cách dùng các mô hình toán học, các sơ đồđược quy ước rõ ràng về mặt ý nghĩa hoặc các ngôn ngữ đặc tả

 Xây dựng thuật toán (π, n)thuật giải): đầu tiên là hình thành ý tưởng(π, n)có thể mô tảbằng ngôn ngữ tự nhiên) Sau đó chuyển ý tưởng thành thuật toán, thuật giải

và cho ví dụ minh họa cách hoạt động của thuật toán

 Chứng minh tính đúng đắn: về nguyên tắc là phải chứng minh tính đúng củathuật toán bằng các công cụ toán học như logic toán và các cấu trúc đại số.Tuy nhiên, trong trường hợp các chứng minh là khó khăn, phức tạp thì phải

lý giải và thuyết minh căn cứ trên các yếu tố trực quan, trực giác

 Phân tích thuật toán (π, n)xét tính hiệu quả): đánh giá hiệu quả của thuật toán,xem thuật toán thuộc lớp phức tạp nào Tốt nhất là xác định chính xác độphức tạp của thuật toán(π, n)xác định big-theta: Θ) hoặc chỉ ra chận trên hợplý(π, n)xác định big-O: O)

 Cải tiến, nâng cao hiệu quả của thuật toán: bước này là tùy chọn sau khi đánhgiá thuật toán, nếu độ phức tạp của thuật toán quá lớn hoặc cảm thấy có thểcải tiến thuật toán tốt hơn được nữa thì tiến hành cải tiến, nâng cao hiệu quảthuật toán

Trang 8

 Cài đặt ứng dụng và thử nghiệm: bước cuối cùng là tiến hành cài đặt thuậttoán, chọn mẫu dữ liệu để chạy Nếu như ta đã không chứng minh tính đúngcủa thuật toán bằng lý thuyết thì ở bước này ta phải chọn mẫu dữ liệu sao chobao phủ tất cả trường hợp, cho chạy thuật toán với các mẫu này và tiến hànhtính toán một vài tham số thống kê quan trọng như kì vọng, phương sai…

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

Trang 9

 G và G’có cùng số đỉnh với bậc cho trước

 số đỉnh kề với đỉnh v ∈ V và f(v) ∈ V’ là như nhau

Định nghĩa 5

Cho G = (π, n)V, E) là đồ thị vô hướng, đơn giản và n = |V| Ik = { v ∈ V | d(π, n)v) = k}, 0 ≤ k ≤ n–

1 Đồ thị con sinh ra bởi Ik được định nghĩa như sau: Gk = (π, n)Ik, Ek), Ek = {(π, n)u, v) ∈ E | u, v ∈

Trang 10

lại có ∀ (π, n)vki, vkj) ∈ Ek ⇔ (π, n)f(π, n)vki), f(π, n)vkj)) ∈ E’ ⇔ (π, n)fk(π, n)vki), fk(π, n)vkj)) ∈ E’ ⇔ (π, n)fk(π, n)vki), fk(π, n)vkj)) ∈ E’k

(π, n)2) Từ (π, n)1) và (π, n)2) ⟹ Gk và G’k đẳng cấu qua song ánh fk

Nhận xét 2

Từ mệnh đề 2 ta suy ra rằng:

 nếu G ≅ G’ qua song ánh f thì f(π, n)V) = {f(π, n)v) | v ∈ V} = ¿k =0¿n−1 f k(I k) với Gk ≅G’k qua fk

 nếu Gk và G’k không đẳng cấu với nhau thì G và G’ cũng không đẳng cấu với nhau

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ả

Để tiện việc trình bày thuật toán, ta quy ước rằng:

 các đỉnh của đồ thị G được đánh số v1, v2, v3…

 đồ thị G, G’(π, n)cùng với tập đỉnh V, V’ tập cạnh E, E’) có phạm vi toàn cục,được truy xuất tùy ý trong các function

 các đoạn mã có cùng tầm vực thì được gióng thẳng hàng với nhau mà không

có các chuỗi báo hiệu bắt đầu và kết thúc khối như begin, end, {, }

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

Bài toán có thể phát biểu bằng ngôn ngữ tự nhiên: “Cho hai đồ thị vô hướng, đơngiản G = (π, n)V, E) và G’ = (π, n)V’, E’) Hãy kiểm tra xem hai đồ thị này có đẳng cấu hay không ?Nếu có thì chỉ ra song ánh f tương ứng” Từ mô tả này ta có thể mô hình hóa bài toán nhưsau:

Input: G = (π, n)V, E), G’ = (π, n)V’, E’)

Output: isomorphic = “yes” hoặc “no” // “yes”: G ≅ G’, “no”: G ≇ G’

Nếu isomorphic = “yes” thì chỉ ra song ánh f tương ứngRàng buộc: G, G’ là 2 đồ thị vô hướng, đơn giản

Trang 11

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

Ý tưởng cơ bản của các thuật toán kiểm tra sự đẳng cấu của hai đồ thị là dò tìm mộtsong ánh f: V → V’ sao cho ∀ (π, n)vi, vj) ∈ E ⇔ (π, n)f(π, n)vi), f(π, n)vj)) ∈ E’ Như vậy, nói chung cácthuật toán này đều là các thuật toán vét cạn Tuy nhiên, hiệu quả của thuật toán phụ thuộcvào cách làm giảm không gian tìm kiếm song ánh này Vì vậy, mặc dù là có nhiều thuậttoán kiểm tra đẳng cấu khác nhau nhưng chúng đều có chung một mục tiêu là giảm khônggian tìm kiếm song ánh f đến mức thấp nhất

Thuật toán đơn giản nhất là kiểm tra mọi song ánh f: V → V’ có thỏa điều kiện bảotoàn cạnh hay không Đây là thuật toán kiểm tra sự đẳng cấu ngây thơ và đơn giản nhất Ta

tạm đặt cho nó tên là Native-Isomorphic-Checking Đầu tiên nó kiểm tra một vài tiêu

chuẩn cơ bản như phải có: cùng số cạnh, cùng số đỉnh Nếu hai đồ thị vẫn thỏa các tiêuchuẩn này thì tiến hành vét cạn tất cả các song ánh f cho đến khi tìm được một song ánhthỏa mãn điều kiện bảo toàn cạnh Thuật toán được trình bày bằng mã giả như sau:

Trang 12

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 về các hàm này xin xem phần Phụ lục.

4.4 Chứng minh tính đúng

Thuật toán hoàn toàn dựa vào định nghĩa, xét từng song ánh f để kiểm tra tính chất

∀ (π, n)vi, vj) ∈ E ⇔ (π, n)f(π, n)vi), f(π, n)vj)) ∈ E’ nên thuật toán hoạt động đúng như mong đợi Các thuậttoán trong phần cải tiến mặc dù không xét từng song ánh một nhưng dựa vào những tínhchất được chứng minh là đúng về mặt toán học nên đảm bảo là không bỏ sót những songánh ứng viên Chúng chỉ lược bỏ các song ánh chắc chắn không làm cho hai đồ thị đẳngcấu Với các song ánh còn lại chúng cũng tiến hành kiểm tra tính chất ∀ (π, n)vi, vj) ∈ E ⇔(π, n)f(π, n)vi), f(π, n)vj)) ∈ E’, nên chúng cũng hoạt động đúng như mong đợi

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

Độ phức tạp của thuật toán được quyết định bởi độ phức tạp của hàm

FindBijection Một cách trực quan ta thấy ngay rằng vì hàm này vét cạn tất cả các song

Trang 13

ánh f: V → V’ để tìm ra song ánh thỏa mãn điều kiện bảo toàn cạnh, mà số song ánh là n!(π, n)n = |V|), nên thuật toán có độ phức tạp trong trường hợp xấu nhất là O(π, n)n!) Độ phức tạpnày là quá cao, nên cần thiết tiến hành các cải tiến để có được một thuật toán có độ phứctạp tốt hơn.

4.6 Cải tiến thuật toán

Như trong phần Nhận Xét 1 đã đề cập, nếu hai đồ thị là đẳng cấu thì ngoài cùng số

cạnh, số đỉnh ra thì chúng phải có cùng số đỉnh với bậc cho trước ⟹ chúng ta sẽ áp

dụng nhận xét này bằng cách tạo ra một dãy số gồm các bậc của các đỉnh trong mỗi đồ thị,sau đó sắp xếp hai dãy này theo thứ tự tăng dần và rồi so sánh hai dãy kết quả với nhau.Nếu hai dãy này không giống nhau thì kết luận là hai đồ thị không đẳng cấu (π, n)1)

Mặt khác, trong Nhận Xét 1 có một tính chất là nếu G ≅ G’ qua song ánh f thì số đỉnh kề với đỉnh v ∈ V và f(v) ∈ V’ là như nhau ⟹ điều này có nghĩa rằng chúng ta

chỉ cần tìm song ánh của những đỉnh có cùng bậc Chúng ta sẽ áp dụng tính chất này bằngcách phân hoạch tập đỉnh của mỗi đồ thị ra thành hợp của các tập rời nhau, trong đó mỗitập là tập hợp các đỉnh có cùng bậc Sau đó chúng ta chỉ xét những song ánh mà ánh xạ cácđỉnh cùng bậc (π, n)2)

Về mặt kĩ thuật, việc phân hoạch này có thể thực hiện bằng cách sắp xếp các đỉnhtheo bậc của chúng theo hướng chung là hoặc tăng hoặc giảm Kết quả là các đỉnh có cùngbậc sẽ nằm liên tiếp nhau Chi phí cho việc này vào khoảng O(π, n)nlogn) nếu dùng các thuậttoán như Quicksort hay Mergesort

Như vậy rõ ràng là chúng ta đã bỏ qua những song ánh “không cần thiết”, nhữngsong ánh mà ánh xạ một đỉnh bậc k thành một đỉnh bậc l trong V’ với l≠k, góp phần làmgiảm kích thước không gian tìm kiếm Nếu V được phân hoạch thành k tập rời nhau thì độphức tạp thuật toán trong trường hợp xấu nhất là O(π, n)(π, n)(π, n)n k)!)k) < O(π, n)n!) Ta tạm đặt tên cho

thuật toán cải tiến này là Isomorphic-Checking-Improve1 Các cải tiến (π, n)1) và (π, n)2) được

thể hiện qua hàm Isomorphic-Graph-Checking2

Trang 14

println “Hai đồ thị không đẳng cấu”

Hàm Partition-Vertex-By-Degree phân hoạch tập đỉnh bằng cách sắp xếp các đỉnh

tăng dần theo bậc, danh sách DG chứa các bậc được sắp tăng dần và danh sách indexG chứachỉ số i của đỉnh vi tương ứng với bậc của nó trong DG Hàm Find-Bijection2 tìm kiếm songánh theo phân hoạch Chi tiết các hàm này xin tham khảo ở phần phụ lục

Bây giờ nói chúng thuật toán sẽ chạy nhanh hơn so với ban đầu, nhưng nó vẫn cònvét cạn các song ánh ở từng tập con tương ứng trong phân hoạch rồi tổ hợp lại thành songánh sau cùng và kiểm tra song ánh đó Tuy nhiên, trong Nhận Xét 2 ta có lưu ý rằng nếu Gk

và G’k là không đẳng cấu thì G và G’ cũng không đẳng cấu Điều này có nghĩa là với mộttập trong phân hoạch nếu ta không tìm được song ánh nào để hai đồ thị con sinh bởi hai tậptương ứng(π, n)theo Định nghĩa 5) là đẳng cấu thì kết luận ngay G và G’ không đẳng cấu màkhông cần tìm song ánh con trong các tập khác Điều này sẽ làm giảm đáng kể các songánh cần kiểm tra và giúp thuật toán chạy nhanh hơn với các trường hợp mà G và G’ không

đẳng cấu Ta tạm đặt tên cho thuật toán cải tiến này là Isomorphic-Checking-Improve2 Cải tiến này thể hiện qua hàm Find-Bijection3:

Trang 15

function Find-Bijection3 (DG , indexG, D G’ , indexG’)

Input: DG – danh sách bậc của các đỉnh của G sắp tăng dần

function Generate-Bijection2 (numVerEachDeg, π, indexG, indexG’)

Input: numVerEachDeg – danh sách mà numVerEachDeg[i] là số phần tử cùng

idx = idx + numVerEachDeg[i]

else

f = []

break

return f

Trang 16

function Find-Bijection-SubGraph (k, nVerK, π, indexG, indexG’)

Input: numVerEachDeg – danh sách mà numVerEachDeg[i] là số phần tử cùng

Điểm nhấn của cải tiến này là hàm Find-Bijection-SubGraph nó tiến hành tìm

những song ánh từ Ik → I’k mà đồ thị con sinh bởi hai tập này là đẳng cấu qua song ánhnày Nếu không tìm được song ánh nào như vậy thì kết luận là hai đồ thị G và G’ là khôngđẳng cấu

4.7 Cài đặt và thử nghiệm

Tiểu luận sẽ tiến hành cài đặt và thử nghiệm các thuật toán kiểm tra sự đẳng cấucủa hai đồ thị Đầu tiên tiểu luận sẽ tạo ra một tập các đồ thị để làm dữ liệu thử nghiệm.Sau đó với mỗ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 nàymột số lần để lấy thời gian trung bình làm kết quả so sánh cho mỗi thuật toán Các chươngtrình được viết bằng VC ++ trên Visual Studio 2013, chạy trên một máy PC vi xử lý Intel

Trang 17

core i5 3.30 GHz, 8 GB RAM Các tính năng sinh đồ thị và thực thi thử nghiệm có thể đạt

được bằng công cụ imgraph-exp.exe như sau:

imgraph-exp isomorphic_checking <nGrapTest> <nLoop> <thuật toán><folder graph

data><file chứa kết quả>

Ví dụ để thực hiện thí nghiệm cho kiểm tra đẳng cấu 1000 lần, lặp lại 100 lần, thuật toán là

Isomophic-Checking-Improve1, thư mục chứa đồ thị là Data, file chứa kết quả là res.txt: imgraph-exp isomorphic_checking 1000 100 1 Data rest.txt

4.7.1 Tạo dữ liệu thử nghiệm

Để tạo ra các đồ thị làm dữ liệu đầu vào cho các thử nghiệm, tiểu luận sẽ tạo ra mộttập gồm 5000 đồ thị vô hướng, đơn giản có 10 đỉnh theo thuật toán sau đây:

lập dãy mới [a’ i ] sao cho a’[i] = a[π[i]]

graph = tạo đơn đồ thị mới với đỉnh i có bậc là a’[i] tương ứng.

if (graph ≠ ⌀ AND graph ∉ graphs)

graphs_i = graphs_i ∪ {graph}

nGraph_i = nGraph_i + 1

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w