Bài toán này thiết thực hơn bao giờ hết trong thời điểm hiện nay có nhiều mạng xã hội ra đời, việc lưu trữ thông tin trên mạng xã hội không tránh khỏi phải biểu diển theo đồ thị, và dò t
Trang 11
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHUYÊN ĐỀ
CƠ SỞ DỮ LIỆU NÂNG CAO
KHÓA LUẬN TÌM ĐỒ THỊ CON ĐẲNG CẤU
GIẢNG VIÊN HƯỚNG DẪN
PGS.TS ĐỖ PHÚC
2012
Trang 22
GIỚI THIỆU
Đồ thị và đồ thị con đẳng cấu là những khái niệm được sử dụng rộng rãi trong nhiều ứng dụng Hơn 30 năm qua rất nhiều nhà nghiên cứu bài toán tính toán hiệu quả đồ thị và đẳng cấu đồ thị con Bài toán này thiết thực hơn bao giờ hết trong thời điểm hiện nay có nhiều mạng xã hội ra đời, việc lưu trữ thông tin trên mạng xã hội không tránh khỏi phải biểu diển theo đồ thị, và dò tìm đồ thị con đẳng cấu trên đồ thị lớn là công việc không thể tránh khỏi Ngày nay, bài toán này đã thực hiện tương đối hiệu quả nhờ thuật toán do Messmer và Bunke đưa ra Trong khoá luận này tôi trình bày ưu điểm của thuật toán so với thuật toán mà Ulman đã đưa ra trước đó Khoá luận được trình bày theo 4 chương Chương 1 giới thiệu đồ thị đẳng cấu, chương 2 là phương pháp tìm đồ thị con đẳng cấu của Ulman, phương pháp làm của Messmer và Bunke được trình bày trong chương 3 Thực nghiệm được mô tả trong chương 4
Trang 33
I Đồ thị đẳng cấu
1 Định nghĩa
Các đồ thị G1 = (V1,E1) và G2 = (V2,E2) được gọi là đẳng cấu với nhau nếu có một song ánh f: V1 V2 sao cho nếu a và b là liền kề trong V1 thì f(a) và f(b) liền kề trong
V2; a, b V1 Khi đó song ánh f được gọi là một đẳng cấu
Nói cách khác, nếu 2 đồ thị là đẳng cấu thì sẽ tồn tại một song ánh giữa các đỉnh của 2 đồ thị bảo toàn quan hệ liền kề
Chú ý: Nếu 2 đồ thị G1 và G2 là đẳng cấu thì chúng có:
+ Số đỉnh bằng nhau
+ Số cạnh bằng nhau
+ Hai đỉnh tương ứng có cùng bậc
Đây là các điều kiện cần để hai đồ thị là đẳng cấu
Để chứng minh hai đồ thị đẳng cấu ta cần:
+ Chứng minh điều kiện cần thỏa
+ Xây dựng một song ánh bảo toàn quan hệ liền kề giữa hai đồ thị (điều kiện đủ để hai đồ thị đẳng cấu)
Ví dụ 1: Chứng minh rằng hai đồ thị sau là đẳng cấu với nhau:
Xét điều kiện cần:
+ Hai đồ thị G và H đều có 4 đỉnh, + Hai đồ thị G và H đều có 4 cạnh,
+ Các đỉnh của hai đồ thị đều có bậc 2
Vậy điều kiện cần thỏa
Xét điều kiện đủ:
Xét hàm f: V W
H = (W,F)
G = (V,E)
v4
v3
u3
u4
v2
v1
u2
u1
Trang 44
u1 v1
u2 v4
u3 v2
u4 v3
f là song ánh và bảo toàn quan hệ liền kề, điều kiện đủ thỏa Vậy hai đồ thị G
và H đẳng cấu với nhau
Ví dụ 2: không đẳng cấu vì số cạnh và đỉnh khác nhau Điều kiện cần không thỏa
G và G’ không đẳng cấu
Ví dụ 3:
G và H có cùng số cạnh, số đỉnh nhưng H có đỉnh e' bậc 1, trong khi đó G không
có đỉnh nào bậc 1 Điều kiện cần không thỏa G và H không đẳng cấu
2 Đồ thị tự bù
Định nghĩa: Đồ thị G được gọi là tự bù (Self-complementary) nếu G đẳng cấu với
G
Trang 55
Định lý 1.4: Nếu hai đồ thị G và H có ma trận liền kề (được liệt kê theo một thứ tự
nào đó của các đỉnh) bằng nhau thì G và H là hai đồ thị đẳng cấu với nhau
Trang 66
II Tìm đồ thị con đẳng cấu
Đồ thị G = (V1, E1), và đồ thị H = (V2, E2)
Kiểm tra H là 1 đồ thị con đẳng cấu của G? Theo giải thuật của J.R.ULLMANN:
Ta có :
| V1 | = n;
| V2 | = m;
n ≥ m;
đồ thị G được biểu diễn bởi ma trận A(n x n)
đồ thị H được biểu diễn bởi ma trận B(m x m)
Ta tạo một ma trận M’(n x m) với các phần tử là 0 và 1, để mà mỗi dòng có duy nhất một số1 và không có cột nào có nhiều hơn một số 1 Ma trận M’ được dùng để hoán vị các dòng vàcác cột của ma trận B để tạo thành ma trận C Với C được định nghĩa như sau:
C = M’(M’B)T
trong đó T có nghĩa là sự chuyển vị Nếu điều đó đúng thì:
i,j (1 ≤ i,j ≤ n) : (A[i][j] = 1) → (C[i][j] = 1) ( 1 )
Và M’ là 1 đẳng cấu giữa H và 1 đồ thị con của G Trong trường hợp này , nếu M’[i][j] =
1
Thì điểm thứ j của đồ thị G là tương ứng với điểm thứ i của đồ thị H trong sự đẳng cấu này.Bắt đầu giải thuật liệt kê, chúng ta tạo một ma trận M0
(n x m) Thỏa: M0
[i][j] = 1 nếu bậc của đỉnh thứ j của H lớn hơn hoặc bằng với bậc của đỉnh thứ icủa G Ngược lại M0[i][j] = 0
Giải thuật liệt kê làm việc bằng cách tạo ra các ma trận M’ để mà trong mỗi ma trận M’
ta có:
M’[i][j] : M’[i][j] = 1 → M0
[i][j] = 1 Với mỗi M’, giải thuật sẽ kiểm tra tính đẳng cấu dựavào điều kiện (1) Trong cây tìm kiếm, những node cha có bậc d = n và chúng tương ứng với một ma trận M’ nhất định, những node con có bậc d < n và tương ứng với 1 ma trận M nhất định khác với ma trận M0 Giải thuật sử dụng mảng F có m phàn tử để đánh dấu các cột được chọn để lưu trạng thái tức thời của các đỉnh (Fi = 0 hoặc Fi = 1), mảng
E có n phần tử để đánh dấu các cột được chọn ở 1 bậc nào đó
Bước 1:
M = M0; d = 1; E[1] = 0;
Duyệt tất cả các đỉnh của đồ thị G, gán F[i] = 0 ( i = 1 n)
Trang 77
Bước 2: Kiểm tra xem có giá trị nào của j (j=1 m) sao cho M[d][j] = 1 và F[j] = 0 thì
Nếu d = 1 thì k:= E[1]
Ngược lại k:= 0;
Bước 3: k:= k+1
Nếu M[d][k] = 0 hoặc F[k] = 1 thì quay lại bước 3
Ngược lại FOR j = 1 n (j ≠ k) và gán M[d][j]= 0
Bước 4: Nếu d < n thì đến bước 6
Ngược lại : sử dụng điều kiện (1) và xuất kết quả nếu có 1 đồ thị con được tìm thấy Bước 5: Kiếm tra nếu không có giá trị của j thoả M[d][j] = 1 và F[j] = 0 thì đến bước 7
Ngược lại gán: M = M[d]
Rồi quay lại bước 3
Bước 6:
Gán : H[d] = k, F[k] = 1, d = d+1;
Rồi quay lại bước 2
Bước 7: Kiểm tra nếu d = 1 thì kết thúc thuật toán
Ngược lại gán: F[k] = 0, d = d -1, M = M[d] , k = E[d]
Thuật toán của Ullman thực hiện theo kiểu đệ qui quay lui Thuật toán này có rất nhiều hạn chế khi số đỉnh của đồ thị lớn Bài toán này thuộc lớp bài toán NP-Complete nên rất khó xử lý với số đỉnh lớn Tuy nhiên, thuật toán của Ullman được xem là tốt nhất trong
số các thuật toán dò tìm đẳng cấu đồ thị con trong đồ thị cha
Thuật toán dựa trên ý tưởng tìm tất cả các đẳng cấu đồ thị con bằng cách giảm dần hoán
vị ma trận P theo từng hàng Dể thấy thuật toán xuất ra tất cả ma trận hoán vị P tuy nhiên, đệ qui quay lui chỉ có thể áp dụng được cho 2 đồ thị tại cùng thời điểm Nếu có thêm đồ thị nào khác, thì thuật toán phải được gọi lại 1 lần Vì vậy, độ phức tạp thuật toán phụ thuộc tuyến tính vào số lượng đồ thị
Trang 88
III Thuật toán cải tiến với thời gian đa thức
Cách tổ chưc đồ thị trên một cây quyết định sao cho mỗi ma trận của đồ thị con được phân lớp theo cây Các đặc trưng được sử dụng trong quá trình phân lớp là các thành phần cá nhân trong các ma trận kề Điều quan trọng là mục tiêu của cây quyết định là phân lớp các ma trận kề Trong trường hợp dò tìm đẳng cấu đồ thị con, các ma trận này
sẽ nhỏ hơn các ma trận ban đầu Vì vậy, cần nhóm các thành phần cá nhân của ma trận kề thành các đặc trưng sao cho việc phân lớp của mỗi cấp trên cây quyết định độc lập kích thước ma trận kề được phân lớp Hình 1 minh hoạ việc này
Hình 1: biểu diển dòng-cột của ma trận kề Sau đó ta tạo một cây quyết định biểu diển tất cả hoán vị, mỗi hoán vị ứng với mật đẳng cấu, của một đồ thị Hình 2 mô tả cách xây dựng cây quyết định dùng để phân lớp các ma trận kề của đồ thị
Cây quyết định này có ưu điểm có thể biểu diển một lúc nhiều đồ thị Hình 3 minh hoạ 2
đồ thị g và g’ được biểu diển trên một cây
Tuy nhiên, cây quyết định trên vẫn còn có thể nén được với những phần tương đương với nhau, những thông tin trùng như vậy thực sự quá dư thừa Để tránh dư thừa thông tin thì
ta có cách biểu diển khác của cây quyết định Công việc này Messmer và Bunke gọi là trộn cây quyết định, hàm trộn cây quyết định được mô tả trong bài báo của tác giả Hình
4 minh hoạ cây quyết định đã được nén
Trang 99 Hình 2: cây quyết định dùng để phân lớp
Trang 1010 Hình 3: Biểu diển cả 2 đồ thị g và g’
Hình 4: Cây được nén
Trang 1111
Với cấu trúc cây như vậy, ta thấy chỉ cần tốn chi phí 1 lần cho việc xây dựng cây rồi sau
đó dùng để phân lớp (tìm kiếm) một đồ thị con đẳng cấu nào đó có tồn tại trên đồ thị hay không với thời gian rất nhanh Điều này rất cần thiết trong thời điểm hiện nay khi công việc lưu trữ của máy tính không còn là vấn đề khó khăn nửa, và giúp ta có thể thực hiện được trên những đồ thị lớn như là đồ thị lưu trữ mạng xã hội
Việc phân tích độ phức tạp xữ lý và đánh giá không gian lưu trữ được mô tả trong bài báo của tác giả cho thấy thời gian thực hiện đa thức
Trang 1212
IV Chương trình minh hoạ
Hình 5: Chương trình minh hoạ Tìm đồ thị con đẳng cấu theo cây quyết định
Mô tả chương trình:
Chương trình được thực hiện bằng ngôn ngữ C# 2008 Thuật toán tìm đồ thị con đẳng cấu của Messmer và Bunke đề nghị
Chương trình trong hình 5 chỉ có một form, trong textfield thứ nhất cho phép nhập đồ thị lớn, textfield thứ 2 cho phép nhập đồ thị con Button thực hiện công việc xác định đồ thị con đẳng cấu có tồn tại trên đồ thị chính hay không Hai textfield còn lại là thông tin kết quả
Trang 1313
Chương trình được thử trên nhiều đồ thị nhỏ 3x3, 4x4, 5x5, 6x6, với kết quả đã được kiểm chứng bằng tay, thì tính đúng đắn đã đạt được Chưa so sánh tốc độ xử lý với thuật toán của Ulman, đây là công việc có thể phát triển sau
Mã chương trình:
Tài liệu tham khảo:
[1] Bài giảng CSDL nâng cao – PGS TS Đỗ Phúc
[2] Subgraph Isomorphism in Polynomial Time – B.T Messmer, H.Bunke
public bool Validate( AdjMatrix graph, AdjMatrix subgraph, out String tree) {
//Xây dựng cây quyết định
AdjMatrix [] permutations = GetAllPermutation(graph);
Node root = new Node ( null );
foreach ( AdjMatrix p in permutations)
AppendGraphToDecisionTree(root, p);
tree = root.ToString( "" );
//Kiểm tra xem subgraph có thuộc cây quyết định
Node node = root;
for ( int i = 0; i < subgraph.GetSize(); i++)
{
//lấy dòng kết tiếp của đồ thị con
byte [] line = subgraph.GetLine(i);
//kiểm tra xem nó có thuộc nhánh con đang xét
//nếu thuộc thì cứ thế đi tiếp
Node nextNode = null ;
foreach ( Node child in node.Children)
if (child.HasValue(line))
{
nextNode = child;
break ;
}
//không thuộc return false
if (nextNode == null )
return false ;
node = nextNode;
}
return true ;
}