Tải bản đầy đủ (.doc) (22 trang)

Tiểu luận Thuật toán và phương pháp giải quyết vấn đề GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.55 MB, 22 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
ĐỀ TÀI
:
Giảng viên hướng dẫn: PGS.TS. ĐỖ VĂN NHƠN
Sinh viên thực hiện: LÊ KIM NGA
Mã số sinh viên: CH1301040
TPHCM, tháng 01/ 2014
2
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
MỤC LỤC
MỤC LỤC
LỜI MỞ ĐẦU
PHẦN 1. GIỚI THIỆU TỔNG QUAN VỀ ĐỒ THỊ
1. 1.Nhắc lại một số định nghĩa:
1.1.1.Đồ thị: 5
1.1.2.Bậc của đỉnh: 5
1.1.3.Biểu diễn đồ thị bằng ma trận: 6
1.1.4.Tính liên thông: 6
1. 2.Giới thiệu về đẳng cấu đồ thị:
1.2.1.Khái quát chung: 6
1.2.2.Khái niệm về đẳng cấu đồ thị: 7
1.2.3. Những ứng dụng của đồ thị đẳng cấu: 8
PHẦN 2. VẤN ĐỀ SO KHỚP ĐỒ THỊ VÀ GIẢI PHÁP
2. 1.Bài toán so khớp đồ thị (đồ thị đẳng cấu):
2.1.1.Phát biểu bài toán: 9
2.1.2.Khảo sát, phân tích và giới hạn vấn đề: 9
2. 2.Xây dựng mô hình của bài toán:
2.2.1.Mô hình cho DIK: 10
2.2.2.Mô hình cho giả thiết: 10
2.2.3.Mô hình cho mục tiêu: 10


2. 3.Xây dựng giải pháp cho bài toán:
2.3.1.Giới thiệu ý tưởng: 10
2.3.2.Mô tả chiến lược: 10
2.3.3.Thuật toán: 11
2. 4.Chứng minh tính đúng đắn của thuật toán:
2. 5.Đánh giá độ phức tạp của thuật toán:
2. 6.Đánh giá thực nghiệm:
PHẦN 3. GIỚI THIỆU MỘT THUẬT TOÁN POLYNOMIAL-TIME ÁP DỤNG
CHO BÀI TOÁN SO KHỚP ĐỒ THỊ
3. 1.Mở rộng bài toán so khớp đồ thị phù hợp với thực tế:
3. 2.Giới thiệu hướng tiếp cận thuật giải:
3. 3.Các thủ tục sử dụng trong polynomial-time algorithm:
3.3.1.Proceduce 3.3.1: 15
3.3.2.Proceduce 3.3.2: 16
3.3.3.Proceduce 3.3.3: 16
3.3.4.Proceduce 3.3.4: 17
3.3.5.Thuật giải: 17
3. 4.Ví dụ áp dụng:
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
3
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
3. 5.Kết quả thực hiện demo:
TÀI LIỆU THAM KHẢO
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
4
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
LỜI MỞ ĐẦU
Ngày nay, cùng với sự phát triển mạnh mẽ của khoa học và công nghệ thì khối
lượng tri thức thu thập được ngày càng khổng lồ và cần phải được xử lý một cách chính
xác, nhanh và hiệu quả để phục vụ cho các hoạt động của xã hội. Cũng chính từ đó, đòi

hỏi phải có nhiều phương pháp (giải pháp) để giải quyết được nhiều yêu cầu hay nhiều
vấn đề đặt ra trong đời sống hàng ngày như công tác lập lịch, tìm đường đi ngắn nhất
trên bản đồ giao thông, so khớp đồ thị để ứng dụng vào các lĩnh vực như hóa học, sinh
học, điện tử, … hay nhiều vấn đề khác đã và đang hình thành.
Những vấn đề trên đều gần giũi với đời sống hàng ngày và được nhiều nhà nghiên
cứu tìm hiểu, xây dựng nhiều giải pháp giải quyết khác nhau, tuy nhiên vẫn chưa đạt
được mong muốn vì còn một số hạn chế nhất định, ví dụ như độ phức tạp của thuật toán
quá lớn hoặc thời gian, hiệu quả chưa cao, …
Sau thời gian học tập môn Thuật toán và phương pháp giải quyết vấn đề do
PGS.TS Đỗ Văn Nhơn hướng dẫn, cùng với thời gian nghiên cứu, tìm hiểu từ các tài
liệu từ các bài báo khoa học, các luận văn trên Internet. Em chọn nghiên cứu giải pháp
cho bài toán so khớp đồ thị để làm tiểu luận môn học này.
Nội dung của tiểu luận bao gồm:
Phần 1: Giới thiệu tổng quan về lý thuyết đồ thị
Phần 2: Vấn đề so khớp đồ thị và giải pháp
Phần 3: Giới thiệu một thuật toán polynomial-time áp dụng vào bài toán so khớp
đồ thị.
Do thời gian nghiên cứu có hạn và bản thân em cũng có một số hạn chế nên tiểu
luận này chắc chắn sẽ không tránh khỏi những thiếu sót nhất định. Kính mong được sự
thông cảm và góp ý của PGS.TS Đỗ Văn Nhơn để hướng nghiên cứu sắp tới của em sẽ
hoàn thiện và đạt hiệu quả hơn. Em xin cảm ơn!
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
5
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
PHẦN 1. GIỚI THIỆU TỔNG QUAN VỀ ĐỒ THỊ
Lý thuyết đồ thị là một ngành khoa học được phát triển từ lâu nhưng lại có nhiều
ứng dụng hiện đại. Những ý tưởng cơ bản của nó được đưa ra từ thế kỷ 18 bởi nhà toán
học Thụy Sĩ tên là Leonhard Euler. Ông đã dùng đồ thị để giải quyết bài toán 7 chiếc
cầu Konigsberg nổi tiếng.
Đồ thị cũng được dùng để giải các bài toán trong nhiều lĩnh vực khác nhau. Thí

dụ, dùng đồ thị để xác định xem có thực hiện một mạch điện trên một bảng điện phẳng
được không. Chúng ta cũng có thể phân biệt hai hợp chất hóa học có cùng công thức
phân tử nhưng có cấu trúc khác nhau nhờ đồ thị. Chúng ta cũng có thể xác định xem hai
máy tính có được nối với nhau bằng một đường truyền thông hay không nếu dùng mô
hình đồ thị mạng máy tính. Đồ thị với các trọng số được gán cho các cạnh của nó có thể
dùng để giải các bài toán như bài toán tìm đường đi ngắn nhất giữa hai thành phố trong
một mạng giao thông. Chúng ta cũng có thể dùng đồ thị để lập lịch thi và phân chia
kênh cho các đài truyền hình.
1. 1. Nhắc lại một số định nghĩa:
1.1.1. Đồ thị:
Đồ thị (Graph) là một cấu trúc dữ liệu rời rạc bao gồm các đỉnh và các cạnh nối
các cặp đỉnh này. Chúng ta phân biệt đồ thị thông qua kiểu và số lượng cạnh nối giữa
các cặp đỉnh của đồ thị.
Định nghĩa: Một đơn đồ thị G = (V, E) gồm một tập khác rỗng V mà các phần
tử của nó gọi là các đỉnh và một tập E mà các phần tử của nó gọi là các cạnh, đó là các
cặp không có thứ tự của các đỉnh phân biệt.
Định nghĩa: Một đồ thị có hướng G = (V, E) gồm một tập khác rỗng V mà các
phần tử của nó gọi là các đỉnh và một tập E mà các phần tử của nó gọi là các cung, đó
là các cặp có thứ tự của các phần tử thuộc V.
1.1.2. Bậc của đỉnh:
Định nghĩa: Hai đỉnh u và v trong đồ thị (vô hướng) G=(V,E) được gọi là liền kề
nếu (u,v) ∈ E. Nếu e = (u,v) thì e gọi là cạnh liên thuộc với các đỉnh u và v. Cạnh e
cũng được gọi là cạnh nối các đỉnh u và v. Các đỉnh u và v gọi là các điểm đầu mút của
cạnh e.
Định nghĩa: Bậc của đỉnh v trong đồ thị G=(V,E), ký hiệu deg(v), là số các cạnh
liên thuộc với nó, riêng khuyên tại một đỉnh được tính hai lần cho bậc của nó. Đỉnh v
gọi là đỉnh treo nếu deg(v)=1 và gọi là đỉnh cô lập nếu deg(v)=0.
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
6
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN

1.1.3. Biểu diễn đồ thị bằng ma trận:
Định nghĩa:Cho đồ thị G=(V,E) (vô hướng hoặc có hướng), với V={v
1
,v
2
, ,
v
n
}. Ma trận liền kề của G ứng với thứ tự các đỉnh v
1
,v
2
, , v
n
là ma trận
ij 1 ,
( ) ( , ),
i j n
A a M n Z
≤ ≤
= ∈
trong đó a
ij
là số cạnh hoặc cung nối từ v
i
tới v
j
.
Như vậy, ma trận liền kề của một đồ thị vô hướng là ma trận đối xứng, nghĩa là
a

ji
= a
ji
, trong khi ma trận liền kề của một đồ thị có hướng không có tính đối xứng.
Định nghĩa: Cho đồ thị vô hướng G=(V,E), v1, v2, , vn là các đỉnh và e1, e2, ,
em là các cạnh của G. Ma trận liên thuộc của G theo thứ tự trên của V và E là ma trận
ij 1
1
( ) ( , ),
i n
j m
M m M n m Z
≤ ≤
≤ ≤
= ∈ ×
m
ij
bằng 1 nếu cạnh e
j
nối với đỉnh v
i
và bằng 0 nếu cạnh e
j
không nối với đỉnh v
i
.
1.1.4. Tính liên thông:
Định nghĩa: Đường đi độ dài n từ đỉnh u đến đỉnh v, với n là một số nguyên
dương, trong đồ thị G=(V,E) là một dãy các cạnh (hoặc cung) e
1

, e
2
, , e
n
của đồ thị sao
cho e
1
= (x
0
, x
1
), e
2
= (x
1
,x
2
), , e
n
= (x
n-1
,x
n
), với x
0
=u và x
n
=v. Khi đồ thị không có cạnh
(hoặc cung) bội, ta ký hiệu đường đi này bằng dãy các đỉnh x
0

, x
1
, , x
n
. Đường đi được
gọi là chu trình nếu nó bắt đầu và kết thúc tại cùng một đỉnh. Đường đi hoặc chu trình
gọi là đơn nếu nó không chứa cùng một cạnh (hoặc cung) quá một lần. Một đường đi
hoặc chu trình không đi qua đỉnh nào quá một lần (trừ đỉnh đầu và đỉnh cuối của chu
trình là trùng nhau) được gọi là đường đi hoặc chu trình sơ cấp. Rõ ràng rằng một
đường đi sơ cấp là đường đi đơn.
Định nghĩa: Một đồ thị (vô hướng) được gọi là liên thông nếu có đường đi giữa
mọi cặp đỉnh phân biệt của đồ thị.
Một đồ thị không liên thông là hợp của hai hay nhiều đồ thị con liên thông, mỗi
cặp các đồ thị con này không có đỉnh chung. Các đồ thị con liên thông rời nhau như vậy
được gọi là các thành phần liên thông của đồ thị đang xét. Như vậy, một đồ thị là liên
thông khi và chỉ khi nó chỉ có một thành phần liên thông.
1. 2. Giới thiệu về đẳng cấu đồ thị:
1.2.1. Khái quát chung:
Một trong những vấn đề cơ bản nhất của lý thuyết đồ thị là vấn đề đẳng cấu đồ
thị. Cho hai đồ thị (a), (b). Hãy xác định xem chúng có đẳng cấu hay không?
Thông thường, hai đồ thị có thể nhìn hoàn toàn khác nhau trên giấy, nhưng về cơ
bản là tương tự với góc nhìn toán học. Hãy xem ví dụ hai đồ thị trong hình sau:
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
7
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
Hình 1. Ví dụ hai đồ thị
Ta thấy: Hai đồ thị khác nhau khi nhìn trực quan, nhưng chúng là đẳng cấu vì
các đồ thị trên là giống nhau do chúng có cùng số đỉnh là 4, cùng số cạnh là 2 và các
cạnh là đôi một.
Nếu ta dán nhãn đỉnh 1 tương ứng với đỉnh a: (1 – a), (2 – b), (3 – c), (4 – d) và

nhãn cạnh (a1 – e1), (a2 – e2) thì ta có một ánh xạ f
1
tương ứng cho đỉnh và f
2
tương
ứng cho cạnh như sau:
Hình 2. Minh họa ánh xạ của tập đỉnh và tập cạnh đồ thị (a), (b)
Vì vậy, hai đồ thị được gọi là đẳng cấu với nhau nếu đỉnh của chúng được sắp
xếp lại để cấu trúc cạnh tương ứng là giống hệt nhau và để chứng tỏ rằng chúng đẳng
cấu thì cũng phải có sự sắp xếp lại tương tự với đỉnh (bằng cách dời đỉnh, dời cạnh )
sao cho hai đồ thị này có hình vẽ y hệt nhau trên cơ sở sự hoán vị đỉnh và hoán vị cạnh.
1.2.2. Khái niệm về đẳng cấu đồ thị:
Các đơn đồ thị G
1
= (V
1
, E
1
) và G
2
= (V
2
, E
2
) là đẳng cấu (Isomorphism) với
nhau nếu tồn tại một song ánh f như sau:
f: V
1

a

V
2
v
1
→ v
2
= f(v
1
)
Sao cho:
1 1 2
, : ( , ) ( ( ), ( ))x y V x y E S x S y E∀ ∈ ∈ ⇔ ∈

2 2 1
, : ( , ) ( ( ), ( ))x y V x y E S x S y E∀ ∈ ∈ ⇔ ∈
Nói cách khác, khi hai đơn đồ thị là đẳng cấu, sẽ tồn tại một phép tương ứng
một-một giữa các đỉnh của hai đồ thị bảo toàn quan hệ liền kề.
Để chứng tỏ hai đơn đồ thị không là đẳng cấu bằng cách chỉ ra chúng không có
chung một tính chất mà các đơn đồ thị đẳng cấu cần phải có (tính chất bất biến đối với
phép đẳng cấu của các đơn đồ thị).
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
8
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
Một số tính chất:
− Các đơn đồ thị đẳng cấu có cùng số đỉnh;
− Các đơn đồ thị đẳng cấu có cùng số cạnh;
− Bậc của các đỉnh của các đơn đồ thị đẳng cấu phải như nhau;
− Các đồ thị phải có các chu trình đơn có độ dài như nhau (có cùng các
thành phần).
Có thể kiểm tra bằng cách:

− Kiểm tra đồ thị con của chúng;
− Sử dụng ma trận liền kề;
− Việc sử dụng chu trình, đường đi đặc biệt nào đó;
− …
Vậy, nếu hai đơn đồ thị có ma trận kề (theo một thứ tự đỉnh nào đó) bằng nhau
thì chúng đẳng cấu với nhau.
Hình 3. Minh họa sự đẳng cấu dùng ma trận kề
1.2.3. Những ứng dụng của đồ thị đẳng cấu:
Đồ thị đẳng cấu được sử dụng để xác định một hợp chất hóa học trong cơ sở dữ
liệu hóa học hoặc để tìm kiếm, định danh và cung cấp thông tin trong cơ sở dữ liệu
hoặc web;
Đồ thị đẳng cấu còn được ứng dụng trong việc thiết kế mạch điện tử tự động hóa
nhằm đơn giản hóa và tối ưu mạch điện;

GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
9
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
PHẦN 2. VẤN ĐỀ SO KHỚP ĐỒ THỊ VÀ GIẢI PHÁP
2. 1. Bài toán so khớp đồ thị (đồ thị đẳng cấu):
2.1.1. Phát biểu bài toán:
Cho hai đồ thị Graph A (GA) và Graph B (GB) có một số cạnh và một số đỉnh
tương ứng nào đó. Vấn đề đặt ra là xác định xem hai đồ thị đã cho có “khớp nhau”
(đẳng cấu) hay không?
Ví dụ cho hai đồ thị:
Hình 4. Ví dụ về 2 đồ thị GA và GB
2.1.2. Khảo sát, phân tích và giới hạn vấn đề:
2.1.2.1. Khảo sát và thu thập dữ liệu, thông tin và tri thức (DIK):
1. Tập đỉnh của 2 đồ thị là hữu hạn;
2. Tập cạnh của 2 đồ thị là hữu hạn;
3. Đồ thị có hướng hay vô hướng?

4. Đồ thị có liên thông hay không?
5. Đơn đồ thị hay đa đồ thị?
6. Các cạnh có trọng số hay không có trọng số?
7. ….
2.1.2.2. Chọn lọc vấn đề và chuẩn hóa DIK; Xác định cơ sở DIK cho vấn đề.
1. Tập đỉnh của 2 đồ thị là hữu hạn;
2. Tập cạnh của 2 đồ thị là hữu hạn;
3. Đơn đồ thị vô hướng;
4. Đồ thị phải liên thông;
5. Không quan tâm đến trọng số;
2.1.2.3. Xác định phạm vi gây giới hạn của vấn đề: Tính liên thông của đồ thị và
số đỉnh nhỏ hơn 2, số cạnh bằng 0;
2.1.2.4. Thu thập mẫu vấn đề và phân lớp (bỏ qua).
− Số đỉnh, số cạnh của mỗi đồ thị để so sánh;
− Xác định các bậc của mỗi đỉnh trong từng đồ thị;
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
10
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
− Các đồ thị được biểu diễn dưới dạng ma trận kề;
2.1.2.5. Mô tả giả thiết của vấn đề.
- Đầu vào: Đồ thị GA và GB là các đơn đồ thị vô hướng, liên thông được biểu
diễn dưới dạng ma trận kề A, B;
- Đầu ra: Hai đồ thị đã cho là đẳng cấu hay không đẳng cấu
2.1.2.6. Mục tiêu của vấn đề: Kiểm tra được tính đẳng cấu của 2 đồ thị;
2.1.2.7. Các điều kiện hay ràng buộc liên quan:
− Phải là đơn đồ thị vô hướng, liên thông;
− Số đỉnh (>=2) và số cạnh (>=1) của 2 đồ thị phải bằng nhau và hữu hạn;
2. 2. Xây dựng mô hình của bài toán:
2.2.1. Mô hình cho DIK:
Được mô hình hóa bằng đơn đồ thị vô hướng. Trong đó

− Số đỉnh là số nguyên dương >= 2 và mỗi đỉnh được gán nhãn;
− Cạnh: là một đường nối giữa đỉnh này với đỉnh khác trong đồ thị
− Bậc của đỉnh x: Là tổng số cạnh liên thuộc với với đỉnh x, ký hiệu deg(x)
GA = (V
A
, E
A
)
V
A
= {x
1
, …, x
n
}
E
A
= {e
1
, …, e
m
}; e ∈ E
A
liên kết xi và xj
(Tương tự cho GB)
2.2.2. Mô hình cho giả thiết:
Input: 2 đồ thị được biểu diễn dưới dạng ma trận kề A và ma trận kề B
Output: GA và GB là hai đồ thị đẳng cấu với biểu song ánh f tương ứng
hoặc GA và GB không phải là hai đồ thị đẳng cấu.
2.2.3. Mô hình cho mục tiêu:

Ma trận A = Ma trận B
2. 3. Xây dựng giải pháp cho bài toán:
2.3.1. Giới thiệu ý tưởng:
Để giải bài toán này, em dùng nguyên lý vét cạn để so sánh từng cặp đỉnh giữa
đồ thị GA với mỗi đỉnh trong GB để xác định song ánh, tìm ma trận kề của 2 đồ thị theo
thứ tự đỉnh tìm được và so sánh xem hai ma trận kề này có bằng nhau hay không? Nếu
bằng nhau thì kết luận 2 đồ thị GA, GB là đẳng cấu Ngược lại, không đẳng cấu.
2.3.2. Mô tả chiến lược:
Bước 1: + Xác định bậc các đỉnh trong mỗi đồ thị và kiểm tra xem có thỏa với các
tính chất của đồ thị đẳng cấu hay không? Nếu không thì kết luận “GA
và GB không đẳng cấu” rồi kết thúc;
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
11
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
+ Sắp xếp thứ tự tăng dần chỉ số của bậc;
+ Đối với mỗi nhóm chỉ số bậc, đưa vào nhãn đỉnh tương ứng của 2 đồ thị
Bước 2: Tìm f bằng cách ghép các đỉnh có cùng bậc tương ứng giữa 2 đồ thị
Bước 3: Lập ma trận kề đối chứng song ánh của từng đồ thị.
+ Nếu 2 ma trận kề bằng nhau hoặc số phép ghép để tìm f

vượt quá số hoán vị
của số đỉnh thì kết luận và kết thúc;
+ Ngược lại, quay lại bước 2
2.3.3. Thuật toán:
 Bước 1: Nhập n là số đỉnh của 2 đồ thị GA, GB và ma trận kề A biểu diễn cho
GA, ma trận kề B biểu diễn cho GB;
 Bước 2: for i:=1 to n do
For j:=1 to n do
{
Tính

,
deg( )
i i j
A A=

và lưu vào D
A
;
SortAcc(D
A
); // Sắp xếp D
A
tăng dần theo bậc;
Tính
,
deg( )
i i j
B B=

và lưu vào D
B
;
// D
A
và D
B
là các mảng n phần tử chứa giá trị của bậc và nhãn
đỉnh
SortAcc(D
B

); // Sắp xếp D
B
tăng dần theo bậc;
If not Matching(D
A
,D
B
) then {Kết luận không đẳng cấu rồi kết
thúc} // So sánh bậc của 2 đồ thị xem có bằng nhau không;
}
 Bước 3: k ← n;
While not Isomorphism(A,B) or (k ≠ 0)
{ For i:=1 to k do
{ f(D
A
.Nhãn đỉnh)
i

(D
B
.Nhãn đỉnh )
i
;
Lập ma trận kề A;
// Với dòng i của A là D
A
.Nhãn đỉnh thứ i;
// Với mỗi cột j của A là D
B
.Nhãn đỉnh thứ i;

Lập ma trận kề B;
// Với dòng i của B là D
B
.Nhãn đỉnh thứ i;
// Với mỗi cột j của B là D
A
.Nhãn đỉnh thứ i;
}
If Isomorphism(A,B) then
{ Kết luận “GA đẳng cấu với GB” và kết thúc;}
Else k ← n-1;
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
12
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
}
2. 4. Chứng minh tính đúng đắn của thuật toán:
Sử dụng hai đồ thị ở hình 4 để chứng minh tính đúng đắn của thuật toán ở mục 2.3:
Bước 1: Ta có n = 5 (mỗi đồ thị có 5 đỉnh) và ma trận kề tương ứng cho GA, GB
như sau:
Hình 5. Ma trận kề tương ứng của GA và GB
Bước 2: Tính bậc của đỉnh là lưu và D
A
, D
B
+ Với GA: deg(A) = 3; deg(B) = 4; deg(C) = 2; deg(D) = 4; deg(E) = 3
 Ta có D
A
3.A 4.B 2.C 4.D 3.E
 D
A

sau khi sắp xếp:
2.C 3.A 3.E 4.B 4.D
+ Với GB: deg(1) = 2; deg(2) = 4; deg(3) = 4; deg(4) = 3; deg(5) = 3
 Ta có D
B
2.1 4.2 4.3 3.4 3.5
 D
B
sau khi sắp xếp:
2.1 3.4 3.5 4.2 4.3
+ Thực hiện so sánh bậc của 2 đồ thị, ta thấy số bậc tương ứng với nhau
D
A
2.C 3.A 3.E 4.B 4.D
D
B
2.1 3.4 3.5 4.2 4.3
Bước 3: k = 5;
+ Ta có: f(C) = 1; f(A) = 4; f(E) = 5; f(B) = 2; f(D) = 3;
(Như vậy ta đã lập được phép tương ứng 1 -1 đối với 2 đồ thị GA và GB)
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
13
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
+ Lập ma trận kề A:
1 4 5 2 3
C 0 0 0 1 1
A 0 0 1 1 1
E 0 1 0 1 1
B 1 1 1 0 1
D 1 1 1 1 0

+ Lập ma trận kề B:
C A E B D
1 0 0 0 1 1
4 0 0 1 1 1
5 0 1 0 1 1
2 1 1 1 0 1
3 1 1 1 1 0
 Ta thấy: A = B nên GA và GB là đẳng cấu.
2. 5. Đánh giá độ phức tạp của thuật toán:
− Trường hợp tốt nhất: Mỗi đồ thị có 2 đỉnh và 1 cạnh nối giữa 2 đỉnh đó. Trong
trường hợp này, độ phức tạp O là một hằng số;
− Trường hợp xấu nhất: Số đỉnh của các đồ thì lớn và bậc của các đỉnh bằng nhau
nhưng không tương ứng đôi một để có thể xây dựng được một hàm f tìm song ánh.
Trường hợp này, độ phức tạp O(n!)
2. 6. Đánh giá thực nghiệm:
Với thuận toán trên, nếu cho hai đồ thị cỡ càng nhỏ thì thuật toán mang lại hiệu
quả cao hơn. Tuy nhiên, trên thực tế, vấn đề so khớp đồ thị không chỉ dừng lại ở đồ thị
cỡ nhỏ và vô hướng có quan tâm đến trọng số (độ dài cạnh), …
Vì vậy, cần có thuật toán tối ưu hơn có thể giải quyết được vấn đề này.
Qua tìm hiểu và sưu tầm tài liệu, em xin giới thiệu một thuật toán có thể áp dụng
hiệu quả hơn để giải quyết vấn đề so khớp đồ thị phù hợp với thực tiễn. Nội dung giải
pháp và các thuật toán kèm theo được tóm tắt ở phần 3 của tiểu luận này!
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
14
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
PHẦN 3. GIỚI THIỆU MỘT THUẬT TOÁN POLYNOMIAL-TIME
ÁP DỤNG CHO BÀI TOÁN SO KHỚP ĐỒ THỊ
3. 1. Mở rộng bài toán so khớp đồ thị phù hợp với thực tế:
Trên thực tế, việc so khớp đồ thị có thể được thực hiện ở những đồ thị cỡ lớn và
thỏa một số yêu cầu khác như: có hướng, có trọng số, …

Hãy xem một số hình ảnh về dạng đồ thị cỡ lớn:
Hình 6. Đồ thị 17 đỉnh
Hình 7. Đồ thị 30 đỉnh
3. 2. Giới thiệu hướng tiếp cận thuật giải:
Một thuật toán là một phương pháp giải quyết vấn đề phù hợp để thực hiện như
một chương trình máy tính. Trong khi thiết kế các thuật toán, chúng ta thường phải đối
mặt với một số phương pháp khác nhau. Tuy nhiên, có nhiều vấn đề mà các thuật toán
chỉ được biết đến mất quá lâu để tính toán các giải pháp mà với thực tế là vô dụng. Ví
dụ, cách tiếp cận ngây thơ của máy tính tất cả n! hoán vị có thể có của các đỉnh n để
cho thấy rằng một cặp đồ thị GA và GB là không đẳng cấu là không thực tế ngay cả khi
dữ liệu đầu vào nhỏ.
Một thuật toán thời gian đa thức (polynomial-time) là một trong những thuật
toán có số lượng các bước tính toán luôn luôn được bao bọc bởi một hàm đa thức của
các kích thước của đầu vào. Vì thế, nó thực sự hữu ích trong thực tế. Các lớp của tất cả
các vấn đề mà có thuật toán polynomial-time được ký hiệu là P. Nếu đồ thị GA và GB
là đẳng cấu thì chúng phải có các vectơ tần số cùng dấu trong bảng tra cứu
1 2
, , ,
n
i i i
f f f

chúng có ma trận dấu hiệu S
A
*
và S
B
*
giống hệt nhau và ta có một hàm đẳng cấu φ.
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040

15
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
Ngược lại, chúng ta sẽ thấy rằng các ma trận dấu hiệu S
A
*
và S
B
*
không thể được
thể hiện giống hệt nhau khi và chỉ khi các đồ thị và GA GB là không đẳng cấu. Do đó,
ta có một thuật toán polynomial-time để giải quyết các vấn đề đồ thị đẳng cấu, cho thấy
vấn đề đồ thị đẳng cấu là P.
3. 3. Các thủ tục sử dụng trong polynomial-time algorithm:
Ý tưởng rút ra từ thuật toán em nghiên cứu được có thể tóm tắt lại như sau:
Bước 1: Tìm độ dài đường đi ngắn nhất từ một đỉnh u đến đỉnh v thuộc đồ thị G (dùng
thuật toán Dijkstra (Procedure 3.3.1);
Bước 2: Dùng thuật toán 3.2.1 để tính toán độ dài đường đi ngắn nhất từ u đến v trong
đồ thị G’ với G’ = G \ uv (Procedure 3.3.2)
Bước 3: Xây dựng ma trận ký hiệu S và ma trận hình thức S
*
(Procedure 3.3.3)
− Với S là một ma trận gồm u hàng, v cột và S
uv
= ± d
uv
. n
uv
. m
uv
Trong đó:

 ± là ký hiệu cho biết có đường đi từ u đến v hay không. Nếu uv ∈ E thì
ký hiệu “+”, ngược lại, ký hiệu “–“
 d
uv
= d(u,v) trong G’;
 n
uv
= số đỉnh của G’.
 m
nv
= số cạnh của G’.
− S
*
là một ma trận n×n với S
UV
như các giá trị trong hàng u và cột v, S = [S
UV
]
được sắp xếp lại các hàng, cột của S theo một phép hoán vị của vector f
i
(i=1, , n);
Bước 4: So sánh và hoán đổi cột và hàng của 2 ma trận hình thức S
A
*
và S
B
*
(Procedure
3.3.4)
3.3.1. Proceduce 3.3.1:

Thủ tục này là thuật toán Dijkstra. Cho một đồ thị G và một đỉnh u, ta tính toán
khoảng cách ngắn nhất (u, v) đến tất cả các đỉnh v của G.
a(u, v) = 1 nếu uv ∈ E và a( u, v) = ∞ nếu uv ∉ E.
Tập Vknown lưu trữ các đỉnh mà khoảng cách ngắn nhất (u, v) đã tìm được và một
khoảng cách d’(u, w) cho mỗi đỉnh w ngoài V
known
.
 Khởi tạo: Thiết lập V
known
= {u} , d (u, u ) = 0 và d’ (u, w) = a (u, w) cho mỗi
đỉnh w bên ngoài V
known
.
 Lặp: Chọn đỉnh w
min
bên ngoài V
known
sao cho d’(u, w
min
) là ngắn nhất. Thêm w
min
vào V
known
và cập nhật các khoảng cách d’(u, w) = min { d’(u, w), d (u, w) + a (u,
w) } cho mỗi đỉnh w bên ngoài V
known
.
 Kết thúc: Lặp cho đến khi Vknown chứa tất cả các đỉnh của G hoặc cho đến khi
d ' (u, w) = ∞ ứng với mỗi đỉnh w bên ngoài Vknown . Trong trường hợp cuối,
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040

16
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
không có đỉnh hơn nữa có thể được lựa chọn và các đỉnh còn lại không được kết
nối với các đỉnh u.
3.3.2. Proceduce 3.3.2:
 Sử dụng Procedure 3.3.1: tính đường đi ngắn nhất (u, x) đến tất cả các đỉnh của
Gx\ uv.
 Sử dụng Procedure 3.3.1, tính đường đi ngắn nhất (v, y) đến tất cả các đỉnh của
Gy \ uv.
 Trường hợp đặc biệt, độ dài ngắn nhất của (u, v) trong G\ uv là khoảng cách
d(u,v).
 Nếu u = u
1
, u
2
, , u
r
và v = v
1
, v
2
, , v
s
là đường đi ngắn nhất tìm thấy ở trên mà
u
r
= v
s
và tổng chiều dài của hai con đường là khoảng cách d (u , v) trong đồ thị
G \ uv, sự kết hợp của hai đỉnh là đỉnh của cặp đồ thị g

uv
. Mỗi đỉnh w của cặp đồ
thị g
uv
thu được theo cách này, bởi vì bất kỳ đường đi ngắn nhất (u, v) có chứa w
thu được bằng cách kết nối một đường ngắn nhất (u, w) với một đường (w, v)
trong G \ uv. Như vậy, ít nhất là một cặp đường đi ngắn nhất tìm thấy như trên
phải thỏa mãn u
r
= v
s
= w, với mỗi đỉnh w của đồ thị guv.
3.3.3. Proceduce 3.3.3:
 Sử dụng 3.3.2, cho mỗi cặp đỉnh u và v, ta tính toán khoảng cách d(u, v) trong
G\ uv và đồ thị g
uv
.
 Các phần tử tương ứng của hàng u và v cột của ma trận ký hiệu S được tính như
sau: S
UV
= ± d
uv
.n
uv
.m
uv
Trong đó:
 ± là ký hiệu cho biết có đường đi từ u đến v hay không. Nếu uv ∈ E thì
ký hiệu “+”, ngược lại, ký hiệu “–“
 d

uv
= d(u,v) trong G’;
 n
uv
= số đỉnh của G’.
 m
nv
= số cạnh của G’.
 Viết tập tất cả các ký hiệu S
UV
khác biệt trong bảng tham chiếu từ s
1
, s
2
, , s
r
.
 Đối với mỗi dòng i của ma trận ký hiệu S (i = 1 , 2, , n), tính toán tần số xuất
hiện của vector f
i
= (f
i
(1)
, f
i
(2)
, , f
i
(r)
), với f

i
(k)
là số lần ký hiệu s
k
xuất hiện ở hàng
i. Với S là một ma trận đối xứng , vector tần số ký hiệu cho cột i cũng giống như
các vector tần số ký hiệu cho dòng i (i = 1, 2, , n).
 Viết các vector tần số ký hiệu f
1
, f
2
, , f
n
trong bảng tham chiếu
1 2
, , ,
n
i i i
f f f
.
 Sắp xếp lại các hàng và cột của ma trận ký hiệu theo hoán vị i
1
, i
2
, ,i
n
từ các
đỉnh 1, 2, , n của G để có được ma trận hình thức S* .
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
17

THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
3.3.4. Proceduce 3.3.4:
Cho đồ thị GA và GB với các vectơ tần số ký hiệu tương ứng trong bảng tham chiếu
của S
A
*
và S
B
*
là như nhau, (f
A
i
1
, f
A
i
2
, , f
A
i
n
) = ( f
B
i'
1
, f
B
i'
2
, , f

B
i'
n
), ta sắp xếp lại i''
1
,
i''
2
, , i''
n
của các đỉnh của GB nếu một trong hai phần từ đầu tiên của S
B
*
mà không phù
hợp với các phần tử tương ứng của S
A
*
ở chỉ số xuất hiện lớn nhất có thể trong hàng thứ
tự đầu tiên hoặc S
A
*
= S
B
*
.
 Gán A = S
A
*
và B = S
B

*
.
 Đọc các ma trận A và B trong hàng thứ tự (đọc mỗi hàng từ trái sang phải và đọc
các hàng từ trên xuống dưới ). Nếu tất cả các mục tương ứng A
ij
và B
ij
của A và
B tương ứng với nhau thì dừng lại. Ngược lại, tìm phần tử đầu tiên B
ij
trong B
mà không tương ứng với mục A
ij
trong A. Ta tìm k> i và hoán đổi hàng (k , j)
với cột (k , j) của B để đảm bảo rằng không có sự không tương ứng xuất hiện.
Nếu không có k như vậy tồn tại thì dừng lại . Lặp lại quá trình này cho đến khi
sự tương ứng không thể được tìm thấy hoặc tất cả các phần tử của A đều tương
ứng với các phần tử của B.
3.3.5. Thuật giải:
Cho đồ thị GA và GB, ta xác định xem GA và GB là đẳng cấu hay không. Nếu GA
và GB là đẳng cấu, ta triển khai một ánh xạ f xác định đẳng cấu rõ ràng.
 Sử dụng Procedure 3.3.3 để tính toán các ma trận ký hiệu và ma trận hình thức
SA* và SB* . Nếu các vectơ tần số ký hiệu theo thứ tự trong bảng tham chiếu
của S
A
*
và S
B
*
là khác nhau, thì GA và GB là không đẳng cấu và dừng lại.

 Ngược lại, các vectơ tần số ký hiệu theo thứ tự trong bảng tham chiếu của S
A
*

S
B
*
là như nhau: (f
A
i
1
, f
A
i
2
, , f
A
i
n
) = (f
B
i'
1
, f
B
i'
2
, , f
B
i'

n
) .
 Cho k = 1, 2, , n:
 Gán A = S
A
*
và B = S
B
*
.
 Tráo đổi hàng (1, k) và cột (1, k) của B.
 Sử dụng thủ tục 3.3.4, nếu A = B thì dừng lại. Ngược lại, bắt đầu với giá
trị tiếp theo của k . Nếu k = n thì dừng lại .
 Nếu A ≠ B thì GA và GB là không đẳng cấu. Ngược lại, A = B thì GA và
GB là đẳng cấu và sắp xếp lại i'
1
, i''
2
, , i''
n
của các đỉnh của GB để có được
S
B
*
= B một đẳng cấu tương ứng φ (i
1
) = i''
1
, φ (i
2

) = i''
2
, , φ (i
n
) = i''
n
.
3. 4. Ví dụ áp dụng:
Cho hai đồ thị GA, GB, mỗi đồ thị 10 đỉnh như hình 8:
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
18
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
Hình 8. Hình minh họa cho ví dụ
 Các ma trận kề tương ứng như sau:
Graph A:
Graph B:
 Ma trận hình thức và bảng tham chiếu của từng đồ thị:
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
19
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
 Ma trận sau khi sắp xếp lại dòng/ cột:
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
20
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
Tìm thấy dòng 3, cột 4 của ma trận B (gạch dưới) không phù hợp với ma trận A nên
thực hiện hoán đổi cột 4 và cột 5 (và hàng 4 với hàng 5). Ta được:
Tiếp tục tìm thấy sự không phù hợp đầu tiên ở hàng 3, cột 5. Ta so sánh giá trị và
đổi cột 5 với cột 8 (và hàng 5 với hàng 8). Ta thu được ma trận B như sau:
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
21

THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
Bây giờ không còn tìm thấy bất kỳ sự không phù hợp nào giữa ma trận A và ma
trận B. Ta có A = B nên kết luật GA và GB đẳng cấu rồi đưa ra phép đẳng cấu và kết
thúc thuật toán.
3. 5. Kết quả thực hiện demo:
GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040
22
THUẬT TOÁN & PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ GVHD: PGS.TS ĐỖ VĂN NHƠN
TÀI LIỆU THAM KHẢO
1. Bài giảng môn học Thuật toán và phương pháp giải quyết vấn đề, 2013, PGS.TS
Đỗ Văn Nhơn, Đại học CNTT;
2. Giáo trình Lý thuyết đồ thị:
/>3. Các website:
 /> />%C4%91%E1%BB%93_th%E1%BB%8B
 />GIẢI PHÁP CHO BÀI TOÁN SO KHỚP ĐỒ THỊ HVTH: LÊ KIM NGA-CH1301040

×