Tải bản đầy đủ (.docx) (21 trang)

Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng

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 (223.4 KB, 21 trang )

DANH MỤC TÀI LIỆU THAM KHẢO
MỤC LỤC
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 1
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
LỜI CẢM ƠN
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 2
cây quyết định
Đầu tiên em xin gởi lời cảm ơn chân thành đến thầy Đỗ Phúc – Giảng viên
cao học trường đại học Công nghệ thông tin tp. Hồ Chí Minh đã tận tình giảng dạy,
hướng dẫn em trong suốt môn học. Đồng thời cũng chính thầy Phúc đã gợi ý cho
em nghiên cứu đề tài này làm bài thu hoạch môn.
Do thời gian và khả năng còn hạn chế, chắc chắn bài thu hoạch sẽ còn nhiều
thiếu sót. Rất mong được ý kiến đóng góp của thầy, cô, và các bạn.
Xin chân thành cảm ơn!
DANH MỤC TÀI LIỆU THAM KHẢO
PHẦN I - TỔNG QUAN
Bài thu hoạch này tập trung nghiên cứu bài báo Subgraph Isomorphism in
Polynomial Time (SIPT) của 2 tác giả B.T.Messmer và H.Bunker, phân tích
những điểm mạnh, yếu của thuật toán đồng thời tìm cách tối ưu hóa thuật toán.
Những phân tích trong bài thu hoạch dựa theo những ý kiến của riêng em và góp
ý của cộng đồng mạng, tuy nhiên chưa được nhận xét của các chuyên gia nên có
thể còn tồn tại nhiều hạn chế sai sót.
Hiện nay, hai tác giả nêu trên đã xây dựng được một phương pháp mới để
nâng cấp thuật toán theo hướng giảm độ lớn của cây quyết định. Tuy nhiên đây
là tài liệu mới được cung cấp thu phí trên mạng nên em chưa có điều kiện
nghiên cứu thêm. Đó là một thiếu sót lớn và em sẽ cố gắng khắc phục trong thời
gian tới để mở rộng bài thu hoạch sử dụng cho các mục đích lớn hơn.
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 3
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO


PHẦN II - THUẬT TOÁN SIPT
1 Bài toán đẳng cấu đồ thị và đẳng cấu đồ thị con
Bài toán đẳng cấu đồ thị (graph isomorphism) và đẳng cấu đồ thị con
(subgraph isomorphism) là hai bài toán khó trong lĩnh vực đồ thị. Phương pháp
giải quyết hai bài toán trên rất đơn giản nhưng lại luôn có vấn đề về tốc độ xử lý
và bộ nhớ để lưu trữ khi thực hiện. Cho tới thời điểm hiện tại đã có rất nhiều
thuật toán ra đời để giải quyết vấn đề này và cũng đã có những thành tựu nhất
định, tuy nhiên vẫn chưa có thuật toán nào thật sự giải quyết được bài toán này
một cách triệt để.
2 Thuật toán SIPT
Thuật toán hoạt động theo cơ chế xây dựng một cây quyết định cho một
đồ thị ban đầu (tạm gọi là model graph). Khi cần so sánh nó với một đồ thị khác
(tạm gọi là input graph), ta sẽ đưa input graph vào cây quyết định và vận hành
để xem mối quan hệ giữa hai đồ thị với nhau. Như vậy đồ thị sẽ được thực hiện
qua 3 bước:
- Xây dựng cây quyết định cho model graph.
- Phân tích input graph thành một chuỗi tham số để đưa vào cây quyết
định.
- Đưa input graph đã được phân tích vào cây quyết định và đưa ra kết quả.
2.1 Xây dựng cây quyết định cho model graph
Cho một ma trận của đồ thị có nhãn, có hướng model graph như hình vẽ:
- Mỗi hàng, cột đại diện cho một đỉnh của đồ thị.
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 4
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
- Mỗi ô khác 0 đại diện cho một cạnh nối giữa 2 đỉnh tương ứng là đỉnh từ
cột đến đỉnh từ hàng của đồ thị. Giá trị trong ô là trọng số của cạnh.
- Mỗi ô là giao của hai đỉnh giống nhau là nhãn của đỉnh đó.
Phân tích ma trận thành các thành phần như sau để xây dựng cây quyết
định:

Thành phần đầu tiên sẽ là ô đầu tiên của ma trận. Các thành phần tiếp theo
sẽ là các ô kế cận bên phải và bên dưới của thành phần trước đó. Như vậy số
lượng thành phần sẽ lớn dần lên khi càng về cuối ma trận.
Lưu các thành phần này lại và tiếp tục phân tích tất cả các hoán vị của ma
trận.
Xây dựng cây quyết định của tất cả các thành phần trên theo thứ tự của
các thành phần bằng cách sau:
Ta phân nhóm các hoán vị của input graph thành các nhóm có thành phần
số 1 (đầu tiên) giống nhau. Mỗi nhóm sẽ là nút của cây quyết định, thành phần
số 1 sẽ là nhãn của nút đó.
Chọn một nhóm đã chia trong bước đầu tiên, ta lại tiếp tục phân nhóm
theo các nhóm có thành phần thứ 2 giống nhau. Tạo các nút của cây quyết định
theo như cách của bước 1.
Tiếp tục thực hiện các bước xây dựng cây quyết định với các nút còn lại
tương tự như cách trên. Cuối cùng ta sẽ có cây quyết định như sau:
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 5
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
2.2 Phân tích input graph thành một chuỗi tham số để đưa vào cây quyết
định
Cách phân tích input graph thành các thành phần cũng giống như trên.
Tuy nhiên ta chỉ thực hiện với đồ thị chính chứ không phải phân tích tất cả các
hoán vị của input graph như đã làm với model graph.
2.3 Đưa input graph đã được phân tích vào cây quyết định và đưa ra kết
quả
Chọn thành phần số 1 của input graph đưa vào cây quyết định đã tạo để
tìm đường đi. Nếu không có đường đi thì kết luận “Hai đồ thị không đẳng cấu
với nhau”. Nếu có thì thực hiện bước tiếp theo.
Chọn thành phần số 2 của input graph đưa vào cây quyết định để tìm
đường đi tiếp. Nếu không có đường đi thì kết luận “Hai đồ thị không đẳng cấu

với nhau”.
Thực hiện tiếp tục cho đến khi input graph hết thành phần hoặc đi đến
cuối cây quyết định. Khi đó ta kết luận:
Nếu input graph hết thành phần nhưng chưa đi đến cuối cây: input graph
là đồ thị con của model graph.
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 6
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
Nếu input graph hết thành phần và đã đi đến cuối cây: input graph là đẳng
cấu với model graph.
Nếu input graph chưa hết thành phần nhưng đã đi đến cuối cây: model
graph là đồ thị con của input graph.
Ngoài ra với mỗi nút có nhãn nhiều hơn 1 phần tử, ta có thể gom nhóm lại
thành cây quyết định con, cách này sẽ làm tăng số nút nhưng sẽ giảm bộ nhớ lưu
trữ và các phép toán so sánh với mảng dài.
3 Tỉa bớt cây quyết định
Nhìn vào ví dụ ta cũng có thể dễ dàng nhận thấy là cây quyết định sẽ có
số nút và số đường đi rất lớn. Hai tác giả của thuật toán cũng đã thấy được điều
này và đưa ra một phương pháp để tỉa bớt độ lớn của cây quyết định,cách thực
hiện như sau:
Với mỗi nút lớp thứ 2, nếu ta gộp với nút mạng trước trở thành một ma
trận và so sánh với các nút mạng cùng cấp, nếu 2 nút mạng giống nhau thì ta có
thể đưa 2 nút mạng về cùng 1 đường đi của cây quyết định. Ta có thể xem hình
sau để hiểu rõ thêm cách tỉa bớt các nút mạng. Hai tác giả cũng đã đưa ra một
vài ý tưởng về việc lưu vết các đỉnh đã đi qua, tuy nhiên cách này sẽ gây ra một
sự lãng phí bộ nhớ và tốn rất nhiều thời gian để thực hiện:
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 7
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
4 Ưu, khuyết điểm của thuật toán

Từ những phân tích nêu trên, ta có thể phân tích được những ưu khuyết
điểm của thuật toán như sau:
- Ưu điểm:
+ Áp dụng được cho tất cả những đồ thị có thể biểu diễn dưới dạng ma
trận (vô hướng, có hướng, có trọng số, có nhãn…).
+ Thời gian để so sánh 2 đồ thị rất ít.
+ Sử dụng một đồ thị để so sánh được nhiều lần với tốc độ rất nhanh
không đổi.
+ Giải quyết được bài toán đẳng cấu đồ thị, đẳng cấu đồ thị con, có thể sử
dụng để tính thêm độ sai khác giữa 2 đồ thị.
- Nhược điểm:
+ Thời gian lập cây quyết định ban đầu khá lớn.
+ Không thể áp dụng cho trường hợp so sánh từng cặp đồ thị khác nhau
từng đôi một.
+ Tốn khá nhiều bộ nhớ để chứa cây quyết định.
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 8
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
+ Để tìm được tất cả những nút giống nhau để tỉa bớt cây quyết định rất
khó khăn, để công việc tìm đơn giản hơn thì ta chỉ có thể tìm được một số rất ít
những nhánh giống nhau để tỉa bớt cây quyết định.
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 9
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
PHẦN III - Nâng cấp thuật toán
1 Phân tích thuật toán
Thuật toán dựa trên việc gộp tất cả các hoán vị của đồ thị vào một cây
quyết định. Việc tìm những nhánh có chu trình giống nhau rất hao tốn chi phí về
thời gian và bộ nhớ nên sẽ rất khó để thực hiện.
Bước yếu nhất trong thuật toán theo phân tích là bước xây dựng cây quyết

định, nếu có phương pháp xây dựng cây quyết định có độ lớn thấp hơn và tốc độ
xây dựng nhanh hơn thì sẽ giải quyết được vấn đề tốt hơn.
2 Phương pháp nâng cấp thuật toán
2.1 Ý tưởng nâng cấp thuật toán
Phương pháp nâng cấp thuật toán được định hình dựa trên ý tưởng gắn kết
những hoán vị có sự sai biệt chỉ khác nhau một cặp đối tượng gần nhau đến mức
có thể. Khi đó, việc đưa một hoán vị mới vào cây quyết định sẽ được thực hiện
đơn giản hơn bằng cách đưa thêm một phần rất nhỏ là những đối tượng khác biệt
của hai hoán vị vào cây quyết định.
Như vậy để cho đơn giản nhất ta sẽ sử dụng một thuật toán hoán vị có độ
thay đổi mỗi khi thực hiện hoán vị là ít nhất. Thuật toán hoán vị phải đảm bảo
được đa số các yêu cầu sau đây:
- Ít hao tốn bộ nhớ.
- Mỗi lần tạo hoán vị mới, tao chỉ cần đổi chỗ hai đối tượng càng gần
nhau càng tốt.
Yêu cầu ít hao tốn bộ nhớ sẽ được thực hiện bằng cách cố gắng xây dựng
thuật toán theo cách ta có thể gọi ra một hoán vị khác nhau mỗi khi cần thiết,
các hoán vị gọi ra đương nhiên sẽ phải khác nhau và sẽ được báo khi các hoán vị
đã hết. Thuật toán này sẽ giảm thiểu rất nhiều tài nguyên bộ nhớ của phần mềm
khi hoạt động.
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 10
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
Tuy nhiên việc xây dựng thuật toán hoán vị vẫn còn gặp nhiều khó khăn
do thuật toán hoán vị thật sự vẫn chưa được quan tâm đến nhiều trong quá khứ.
Do đó khi tìm hiểu các thuật toán hoán vị đã có, ta chỉ có được các thuật toán tạo
ra những hoán vị khác nhau sao cho đủ số mà hoàn toàn không tìm thấy được
thuật toán đảm bảo yêu cầu.
2.2 Phương pháp nâng cấp
Dựa trên ý tưởng nâng cấp thuật toán trên, em đã xây dựng nên thuật toán

hoán vị một chuỗi cho trước theo các yêu cầu của mục trước. Yêu cầu mỗi lần
gọi sẽ đưa ra một hoán vị không trùng nhau của thuật toán sẽ được giải quyết
sau. Bước này ta chỉ tìm hiểu cách để tạo ra những hoán vị có độ sai khác nhau
nhỏ nhất trong mức có thể.
2.2.1 Hàm hoán vị
Sau khi xem xét các thuật toán hoán vị thông thường, ta rút ra kết luận
chung là các thuật toán hoán vị đều dựa trên việc đưa một đối tượng mới vào
xen kẽ một mảng đã hoán vị rồi bằng thuật toán đệ quy điển hình như sau:
Hàm đệ quy (mảng) trả về tất cả các mảng
{
Lấy ra phần tử đầu tiên của mảng.
For (i = độ lớn của mảng - 1)
{
Đưa phần tử đầu tiên vào vị trí thứ i của hàm đệ quy(mảng
con trừ đi phần tử đầu tiên)
Trả về mảng đưa vào.
}
}
Từ những phân tích trên, ta xây dựng thuật toán đệ quy như sau:
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 11
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
- Dịch phần tử đầu tiên tới 1 bước bằng cách hoán vị nó với phần tử sau
nó (ta tạm gọi là bước dịch phần tử).
- Tiếp tục dịch phần tử đó đến khi nó đến cuối mảng. Khi đến cuối mảng,
ta đưa nó trở về đầu mảng và dịch phần tử nhỏ hơn nó một đơn vị.
- Khi một phần tử được dịch thì phần tử sẽ được dịch tiếp theo được dịch
sẽ là phần tử trước nó một đơn vị (nếu có).
- Mỗi bước dịch sẽ trả về kết quả là mảng vừa mới dịch xong.
Ta sẽ được kết quả như sau (ví dụ trên mảng 4 phần tử):

0 1 2 3
1 0 2 3
1 2 0 3
1 2 3 0
0 2 1 3
2 0 1 3
2 1 0 3
2 1 3 0
0 2 3 1
2 0 3 1
2 3 0 1
2 3 1 0
0 1 3 2
1 0 3 2
1 3 0 2
1 3 2 0
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 12
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
0 3 1 2
3 0 1 2
3 1 0 2
3 1 2 0
0 3 2 1
3 0 2 1
3 2 0 1
3 2 1 0
Chia các hoán vị trên thành 6 nhóm như sau:
0
01 2 3

10 2 3
12 0 3
12 3 0
1
02 1 3
20 1 3
21 0 3
21 3 0
2
02 3 1
20 3 1
23 0 1
23 1 0
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 13
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
3
01 3 2
10 3 2
13 0 2
13 2 0
4
03 1 2
30 1 2
31 0 2
32 1 0
5
03 2 1
30 2 1
32 0 1

32 1 0
Quan sát bảng hoán vị, ta thấy ta có thể mỗi khi số 0 trở về đầu mảng thì
trong mảng có sự đảo lộn rất lớn, không thể sử dụng theo mục đích của bài toán
được. Do đó cách hoán vị này cũng chưa hoàn toàn đáp ứng được yêu cầu. Theo
quan sát, ta có thể thay đổi thứ tự của mảng lại như sau để đáp ứng được yêu cầu
tốt hơn. Đặt !i là ô thứ i được đảo thứ tự lại từ trên xuống dưới:
0
01 2 3
10 2 3
12 0 3
12 3 0
!
1
21 3 0
21 0 3
20 1 3
02 1 3
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 14
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
2
02 3 1
20 3 1
23 0 1
23 1 0
!
5
32 1 0
32 0 1
30 2 1

03 2 1
4
03 1 2
30 1 2
31 0 2
32 1 0
!
3
13 2 0
13 0 2
10 3 2
01 3 2
Thoạt nhìn thuật toán có vẻ như xáo trộn ngẫu nhiên nhưng khi quan sát
kỹ. Ta có thể xây dựng thuật toán như sau:
- Dịch phần tử số 0 tới.
- Khi một phần tử tới cuối mảng, đảo chiều của nó và dịch phần tử lớn
hơn nó một đơn vị (theo chiều đã quy định trước)
- Trạng thái cuối mảng nêu trên được định nghĩa bằng trạng thái ở bên trái
(hoặc phải tùy theo chiều dịch chuyển) của đối tượng không có đối tượng nào
lớn hơn nó.
- Ta sẽ sử dụng một mảng để lưu chiều dịch chuyển của mảng.
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 15
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
- Hàm dừng khi số hoán vị đủ số n! (n là số phần tử).
Cách giải thích khá nhiều bước nhưng khi cài đặt ta sẽ sử dụng một đoạn
mã java như sau:
public ArrayList<String> next() {
// lan chay dau, khong chay ma tra ve ket qua ban dau
if (firstUse) {

firstUse = false;
loopNum.subtract(BigInteger.ONE);
return data;
}
if (loopNum.equals(BigInteger.ZERO)) return null;
ArrayList<String> result = (ArrayList<String>) curData.clone();
// dich 1 phan tu o dau cua queue theo chieu quy dinh trong nay
String s = "0";
// neu da den cuoi hang thi dich phan tu sau no. Neu thang sau no cung
den cuoi hang thi dich phan tu sau nua.
while (checkIfEnd(s)) {
notHandler(s);
s = String.valueOf(Integer.valueOf(s) + 1);
if (Integer.valueOf(s) == data.size() - 1) {
return null;
}
}
// dich chuyen s
curPosition = result.indexOf(s);
result.remove(s);
result.add(curPosition +
Integer.valueOf(shiftDirect.get(Integer.valueOf(s))), s);
curData = (ArrayList<String>) result.clone();
curPosition = Math.min(curPosition, curPosition +
Integer.valueOf(shiftDirect.get(Integer.valueOf(s))));
loopNum.subtract(BigInteger.ONE);
return result;
}
Theo như thuật toán, ta chỉ cần phải lưu các thông số sau:
- Một mảng chiều dịch chuyển của từng đối tượng bằng một mảng bool

(trong thuật toán dùng mảng integer) có số phần tử bằng với số đỉnh
của đồ thị.
- Một số int chỉ vị trí vừa dịch chuyển.
- Mảng hoán vị trước đó để so sánh.
- Số hoán vị đã thực hiện để làm điều kiện dừng.
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 16
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
Hàm hoán vị này thật sự có thể được xây dựng để thực hiện hoán vị mà
không cần lưu bất kỳ tham số nào. Tuy nhiên khi thực hiện theo phương
pháp đó ta sẽ phải tốn kém rất nhiều chi phí tính toán. Do đó theo đánh
giá hàm hoán vị như trên tạm thời đang là lựa chọn tốt nhất cho thuật toán
xây dựng cây quyết định cho đồ thị hiện nay.
2.2.2 Ứng dụng hàm hoán vị vào thuật toán
Khi sử dụng hàm hoán vị trên vào thuật toán, bài toán của chúng ta trở
nên hết sức đơn giản:
- Lập 1 cây quyết định đơn giản có n nút theo một hoán vị bất kỳ.
- Lấy hoán vị tiếp theo.
- Thêm 1 nút tại điểm vừa hoán vị và gắn kết với cây cũ bằng 2 đường đi
khác nhau.
Để cho dễ hiểu, ta có thể xem thêm ví dụ sau:
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 17
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 18
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
Mỗi hoán vị mới được tạo ra ta chỉ thêm vào cây quyết định cũ 1 nút và 2
đường đi do hoán vị mới chỉ có 2 đối tượng bị đảo vị trí so với hoán vị cũ.
Tổng kết thuật toán phân tích

Sau khi nâng cấp, thuật toán SIPT được thực hiện như sau:
- Đánh số hiệu cho các đỉnh của đồ thị ban đầu.
- Phân tích đồ thị thành các đối tượng.
- Xây dựng cây quyết định của đồ thị theo 1 hoán vị bất kỳ của đồ thị
ban đầu.
- Lấy 1 hoán vị tiếp theo và thêm vào cây quyết định bằng cách thêm
vào 1 nút và 2 cạnh trong cây quyết định.
- So sánh với đồ thị cần so sánh.
Phương pháp này thật sự là không thể thực hiện được nếu dùng các phép
hoán vị thông thường.
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 19
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
PHẦN IV - Kết luận
Thuật toán SIPT nêu trên thật sự cũng không phải là mới nhưng thật sự nó
cũng đưa ra được một phương pháp rất thú vị để giải quyết bài toán so sánh đồ
thị.
Phương pháp nâng cấp đồ thị được đưa ra cũng không có gì là phức tạp,
và cũng có lẽ đã được nhiều người nghĩ đến, có thể trong bài báo mới của hai tác
giả trên cũng đã đưa ra được phương pháp tốt hơn so với cách đề xuất của em.
Ngoài ra phương pháp nâng cấp thuật toán em đưa ra lại là phương pháp
áp dụng một lĩnh vực toán xác suất không có nhiều mối quan hệ với môn học.
Tuy nhiên, ta hi vọng thuật toán đã được nâng cấp này sẽ trở thành góp
phần để giải quyết các vấn đề của bài toán đồ thị hoặc các bài toán cần đến các
thuật toán hoán vị vốn rất ít ỏi. Tạo tiền đề cho bước phát triển của lĩnh vực toán
trên đồ thị của nước ta hiện nay và trong tương lai.
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 20
cây quyết định
DANH MỤC TÀI LIỆU THAM KHẢO
PHẦN V - DANH MỤC TÀI LIỆU THAM KHẢO

Subgraph Isomorphism in Polynomial Time, B.T.Messmer và H.Bunker
Nghiên cứu thuật toán so sánh hai đồ thị bằng phương pháp xây dựng 21
cây quyết định

×