Các thuật toán Backtrack luôn đảm bảo tìm được chu trình Hamilton (nếu có) hoặc sẽ
kết thúc sau khi vét cạn các trường hợp mà đồ thị không có chu trình Hamilton, tuy nhiên
khả năng thực hiện hạn chế và thời gian chạy không khả thi trên các đồ thị lớn. Các thuật
toán Heuristic có sự cải tiến về khả năng thực hiện trên các đồ thị lớn và thời gian chạy
tuyến tính hoặc đa thức, tuy nhiên nó không đảm bảo rằng sẽ tìm được chu trình Hamilton,
mặc dù được thực hiện trên đồ thị Hamilton. Dưới đây là một số thuật toán Backtrack và
Heuristic xác định chu trình Hamilton trong đồ thị [5], [12], [38]
27 trang |
Chia sẻ: lavie11 | Lượt xem: 960 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Tóm tắt Luận án Chu trình Hamilton và chu trình dài nhất trong một số lớp đồ thị có tổng bậc lớn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ng ứng thay cho ).
Một đường đi là mở rộng (theo tập đỉnh) của đường đi nếu . Tương
tự, một chu trình là mở rộng của chu trình nếu .
Với , ta ký hiệu là đoạn đường chạy dọc theo từ đỉnh tới đỉnh . Như
vậy, nếu là các đỉnh cuối của thì cũng chính là . Ngoài ra, | | quy ước là số
đỉnh nằm trên đoạn đường con này.
Giả sử chu trình . Ta quy định một chiều quay ⃗⃗ ⃗ theo
thứ tự chỉ số các đỉnh (chỉ số được lấy theo ). Với đỉnh , ký hiệu
lần
lượt là đỉnh liền trước và liền sau của theo chiều quay đã định. Với tập đỉnh thì
,
. Với số nguyên dương , ký hiệu
5
và
. Ta ký hiệu đoạn đường trên bắt
đầu từ một đỉnh và kết thúc tại theo chiều quay đã quy định bởi ⃗⃗ ⃗ , đoạn
đường đó theo chiều ngược lại ký hiệu là ⃖⃗⃗⃗ . Nếu là một thành phần liên thông của
, ký hiệu là tập hợp các láng giềng của trên . Một dãy cung ngoại biên nối
hai đỉnh trên là một đường đi có các đỉnh cuối là 2 đỉnh đó và các đỉnh trong thuộc
. Đặc biệt, một cạnh nối 2 đỉnh trên cũng là một dãy cung ngoại biên.
Đôi khi ta cũng thường không viết dấu phẩy (,) ngăn cách giữa các đỉnh của một chu
trình hoặc một đường đi. Ví dụ, viết thay cho .
1.3. Chu trình Hamilton
Chu trình đi qua mọi đỉnh của đồ thị, mỗi đỉnh đi qua đúng một lần, gọi là chu trình
Hamilton. Đồ thị có chu trình Hamilton được gọi là đồ thị Hamilton. Tương tự, đường đi
qua mọi đỉnh của đồ thị, mỗi đỉnh đi qua đúng một lần, gọi là đường Hamilton và đồ thị có
đường Hamilton gọi là đồ thị nửa Hamilton.
Lịch sử phát sinh đồ thị Hamilton được xuất phát từ trò chơi đố vui của William
Rowan Hamilton vào năm 1859. Chu trình Hamilton có nhiều ứng dụng trong thực tế, ví dụ
như trong bài toán người bán hàng, lập kế hoạch, hay trong thiết kế vi mạch, thiết kế đường
truyền trong mạng Cho đến nay, vấn đề chu trình Hamilton vẫn còn là mở và trở thành
một vấn đề trung tâm của lý thuyết đồ thị với rất nhiều công trình nghiên cứu. Thông qua ba
bài tổng quan của Ronald J. Gould trong [25], [26], [27] thì có thể thấy rằng trong vòng 20
năm trở lại đây có khoảng 400 bài báo khoa học nghiên cứu về chu trình Hamilton được
đăng tải trên các tạp chí khoa học quốc tế có uy tín hàng đầu.
Trong luận án sẽ nghiên cứu chu trình Hamilton theo hướng sau:
Nghiên cứu bài toán trên lớp đồ thị có tổng bậc và
lớn.
Nghiên cứu độ phức tạp của bài toán và xác định ranh giới để bài toán chuyển
từ lớp sang lớp .
Xây dựng thuật toán thời gian đa thức để xác định chu trình Hamilton trong một số
lớp đồ thị đã khảo sát mà bài toán thuộc lớp .
1.3.1. Độ phức tạp của bài toán
Bài toán đã được chứng minh trong [23] là các bài toán .
(Hamiltonian Cycle Problem)
Instance: Đồ thị .
Question: có là đồ thị Hamilton?
Một số tác giả đã nghiên cứu đến độ phức tạp của bài toán trên những lớp đồ thị
đặc biệt, chẳng hạn như trong [37] đánh giá độ phức tạp trên lớp đồ thị có hướng phẳng, hay
6
trong [3] nghiên cứu trên hai lớp đồ thị dạng lưỡng phân... Trong [15], các tác giả đã chỉ ra
rằng bài toán vẫn còn là bài toán trên lớp đồ thị
với mọi :
Định lý 1.1 [15, Định lý 16].
là bài toán với mọi .
Kết quả trên là một tiền đề quan trọng để tác giả tiếp tục nghiên cứu đến độ phức tạp
của bài toán trên các lớp đồ thị có tổng bậc và
lớn.
1.3.3. Một số điều kiện đủ đối với bậc của đỉnh
Các kết quả nghiên cứu về chu trình Hamilton hầu hết tập trung ở điều kiện đủ, đặc
biệt là điều kiện đủ đối với bậc của đỉnh. Ta bắt đầu bằng với một kết quả của Dirac:
Định lý 1.4 [17]. Nếu đồ thị với đỉnh và bậc mỗi đỉnh đều không nhỏ hơn
thì là
đồ thị Hamilton.
Định lý Dirac là trường hợp riêng của Định lý Ore.
Định lý 1.5 [36]. Nếu đồ thị với đỉnh và thì là đồ thị Hamilton.
Với đồ thị tough, mở rộng cho Định lý Ore, Jung có kết quả sau:
Định lý 1.6 [29]. Cho là đồ thị 1-tough với đỉnh và . Khi đó,G là đồ thị
Hamilton.
Mở rộng kết quả cho có:
Định lý 1.7 [18]. Cho G là đồ thị 1-tough với đỉnh và
. Khi đó, là đồ
thị Hamilton.
Với đồ thị -liên thông, Bondy đưa ra kết quả tổng quát cho như sau:
Định lý 1.8 [11]. Nếu là đồ thị -liên thông thỏa mãn
thì là đồ thị
Hamilton.
Liên quan đến khoảng cách có kết quả sau:
Định lý 1.10 [32, Định lý 5]. Cho là đồ thị 2-liên thông với đỉnh thỏa mãn
. Khi đó xảy ra một trong hai trường hợp sau:
1. là đồ thị Hamilton.
2. là số lẻ và ̅
̅
̅
.
1.3.4. Một số thuật toán xác định chu trình Hamilton
Các nghiên cứu về thuật toán xác định chu trình Hamilton được tiếp cận theo các
hướng sau:
Thuật toán Backtrack (Quay lui).
Thuật toán Heuristic.
Thuật toán tìm kiếm chu trình Hamilton cho các lớp đồ thị đặc biệt.
7
Các thuật toán Backtrack luôn đảm bảo tìm được chu trình Hamilton (nếu có) hoặc sẽ
kết thúc sau khi vét cạn các trường hợp mà đồ thị không có chu trình Hamilton, tuy nhiên
khả năng thực hiện hạn chế và thời gian chạy không khả thi trên các đồ thị lớn. Các thuật
toán Heuristic có sự cải tiến về khả năng thực hiện trên các đồ thị lớn và thời gian chạy
tuyến tính hoặc đa thức, tuy nhiên nó không đảm bảo rằng sẽ tìm được chu trình Hamilton,
mặc dù được thực hiện trên đồ thị Hamilton. Dưới đây là một số thuật toán Backtrack và
Heuristic xác định chu trình Hamilton trong đồ thị [5], [12], [38]:
Bảng 1.1. Một số thuật toán Backtrack và Heuristic xác định chu trình Hamilton
Thuật toán Tác giả Loại
Pósa Pósa Heuristic
UHC Angluin and Valiant Heuristic
HAM Bollobas, Fenner and Frieze Heuristic
SparseHam Frieze Heuristic
HideHam Broder, Frieze and Shamir Heuristic
DB2 Brunacci Heuristic
LongPath Kocay and Li Heuristic
LinearHam Thomason Heuristic
Snakes and Ladders
P. Baniasadi, V. Ejov, J.A. Filar, M.
Haythorpe, S. Rossomakhine
Heuristic
MultiPath Kocay Backtrack
MultiPath cải tiến Andrew Chalaturnyk Backtrack
KTC Shufelt and Berliner Backtrack
Một số tác giả khác đã nghiên cứu tới việc xây dựng các thuật toán xác định chu trình
Hamilton trong các lớp đồ thị đặc biệt. Các thuật toán này là chính xác và đảm bảo tìm được
chu trình Hamilton, thời gian đa thức, tuy nhiên nhược điểm là không thực hiện được trên
đồ thị tổng quát. Gần đây, các tác giả trong [28] đã đưa ra thuật toán thời gian
trên đồ thị Circular-Arc, trong [22] sử dụng phương pháp “tham lam” và 2-matching để xây
dựng thuật toán thời gian xác định chu trình Hamilton trong đồ thị ngẫu
nhiên Với đồ thị Ore (lớp đồ thị ), một số tác giả cũng đưa ra thuật toán đa thức để
xác định chu trình Hamilton, chẳng hạn như thuật toán do Albertson đề xuất [4]
1.4. Bao đóng đồ thị
Bổ đề 1.2 [10]. Giả sử đồ thị có bậc và hai đỉnh không kề nhau thỏa mãn
. Khi đó, là đồ thị Hamilton khi và chỉ khi là đồ thị Hamilton.
Khái niệm bao đóng của đồ thị được Bondy và Chvátal đưa ra lần đầu tiên trong [10].
Bao đóng của đồ thị , ký hiệu bởi là đồ thị thu được từ bằng cách bổ sung thêm
các cạnh nối các cặp đỉnh không kề nhau có tổng bậc không nhỏ hơn , quá trình này được
thực hiện cho đến khi nào không còn cặp đỉnh không kề nhau mà có tổng bậc không nhỏ
hơn nữa. Bao đóng của một đồ thị luôn xác định duy nhất, không phụ thuộc vào thứ tự
cạnh mới được thêm vào [2].
8
Hình 1.5. Quá trình tạo bao đóng đồ thị.
Trong việc bổ sung lần lượt các cạnh mới để tạo bao đóng , ta thực hiện việc gán
nhãn tăng dần theo thứ tự các cạnh được bổ sung bằng mảng . Trước hết, [ ] với
mọi cạnh và đặt . Khi cạnh mới đầu tiên được bổ sung, ta gán [ ]
, và thu được đồ thị mới . Quá trình được thực hiện liên tục cho đến khi
không có cạnh nào được bổ sung nữa và thu được đồ thị cuối cùng là . Rõ ràng
là: .
Thuật toán 1.2. Xây dựng đồ thị bao đóng và gán nhãn cho các cạnh.
Input: Đồ thị .
Output: Đồ thị và các cạnh được gán nhãn.
Procedure Construct_Cl
Begin
For each do
Begin
[ ] ;
For each do If Then [ ] [ ] ;
End;
For each do [ ] ;
;
Repeat
Stop True;
For each do
For each do
If and [ ] [ ] Then
Begin
Stop False; ;
; [ ] ;
[ ] [ ] ; [ ] [ ] ;
End;
Until Stop;
End;
Nếu là một đồ thị con của , ta đặt: [ ] [ ] .
9
Mệnh đề 1.2. Nếu thì là đồ thị Hamilton khi và chỉ khi là đồ thị
Hamilton.
Thuật toán 1.3. Biến đổi chu trình Hamilton của đồ thị bao đóng.
Input: là một chu trình Hamilton của .
Output: Một chu trình Hamilton của đồ thị .
Procedure TransformCycle( )
Begin
While ( [ ] ) do
Begin
Tìm [ ] [ ];
Tìm và [ ] [ ] [ ];
;
Đánh số lại các đỉnh trên theo thứ tự mới:
;
End;
End;
1.6. Chu trình trong đồ thị có tập láng giềng lớn
Định lý 1.20 [8]. Nếu là đồ thị 2-liên thông và thì .
Định lý 1.21 [8]. Nếu là đồ thị 1-tough và thì .
Bauer, Fan, Veldman đã đưa ra Giả thuyết quan trọng sau:
Giả thuyết 1.3 [8, Giả thuyết 27]. Nếu là đồ thị 1-tough và thì
.
1.7. Kết luận Chƣơng 1
Như vậy, chương này đầu tiên đã giới thiệu các khái niệm cơ bản nhất của lý thuyết đồ
thị cần thiết cho luận án. Kế đến giới thiệu các Bổ đề, Thuật toán cơ bản, đặc biệt là bao
đóng đồ thị làm nền tảng cơ sở quan trọng cho các chứng minh trong luận án. Cuối cùng
trình bày tổng quan về chu trình trong đồ thị, tập trung trọng tâm tới chu trình Hamilton với
các vấn đề nêu ra là: độ phức tạp bài toán của , một số điều kiện cần và đủ cho một đồ
thị là Hamilton, một số thuật toán để xác định chu trình Hamilton trong đồ thị. Ngoài ra, chu
trình Dominating, chu trình trong đồ thị có tập láng giềng lớn cũng được đề cập tới.
Định lý 1.1 của các tác giả trong [15] đã chỉ ra rằng bài toán trong lớp đồ thị
vẫn còn là bài toán với mọi là tiền đề để tác giả tiếp tục nghiên
cứu bài toán cho lớp đồ thị tổng quát hơn theo các giá trị (với tổng quát) và
trong Chương 2 và Chương 3. Giả thuyết 1.3 của các tác giả trong [8] đưa ra đánh giá về độ
10
dài của chu trình dài nhất hiện nay vẫn còn là vấn đề mở, trong Chương 4 tác giả sẽ đưa ra
một chứng minh cho Giả thuyết này.
CHƢƠNG 2. MỘT SỐ LỚP ĐA THỨC CỦA BÀI TOÁN
2.1. Giới thiệu bài toán và
Với số nguyên dương và số thực ta xét bài toán tổng quát sau:
Instance: Đồ thị thỏa mãn
.
Question: có là đồ thị Hamilton?
Với , mở rộng cho bài toán khi ta chỉ xét tới các cặp đỉnh khoảng cách 2:
Instance: Đồ thị thỏa mãn
.
Question: có là đồ thị Hamilton?
Trường hợp thì và chính là bài toán trong trường hợp tổng quát.
2.2. Độ phức tạp của bài toán và
Từ Định lý 1.1, dễ dàng suy ra Hệ quả sau:
Hệ quả 2.1. là bài toán .
Định lý 2.1. là bài toán .
Định lý 2.2. là bài toán .
Như vậy, với thì bài toán vẫn còn là bài toán .
Giả thuyết 2.1. Với mọi số nguyên dương thì bài toán thuộc lớp .
2.3. Độ phức tạp của bài toán
2.3.1. Một số kết quả với
Từ Định lý 1.4 (Dirac) và Định lý 1.5 (Ore) ta hiển nhiên có:
Hệ quả 2.2. và là các bài toán thuộc lớp .
Từ Định lý 1.8 (Bondy) cho trường hợp , ta có:
Hệ quả 2.3. Mọi đồ thị 2-liên thông thỏa mãn
là đồ thị Hamilton.
Điều kiện
là tốt nhất có thể theo nghĩa là tồn tại vô hạn đồ thị 2-liên thông
thỏa mãn
nhưng không Hamilton, chẳng hạn các đồ thị ̅ với .
11
Hệ quả 2.4.
là bài toán thuộc lớp .
Hệ quả 2.5. là bài toán thuộc lớp .
Với kết quả của Bondy (Định lý 1.8) cho trường hợp thì không thể kết luận cho
độ phức tạp của bài toán vì điều kiện 3-liên thông không phải là điều kiện cần của một
đồ thị Hamilton. Ta sẽ chứng minh cũng là bài toán thuộc lớp bằng việc
khảo sát lớp đồ thị thỏa mãn .
Định lý 2.3. Cho đồ thị 2-liên thông thỏa mãn . Khi đó, hoặc là đồ thị
Hamilton, hoặc và có cấu trúc thuộc một trong 3 dạng sau:
1. Dạng 1: Tồn tại | | sao cho . (Hình 2.1)
Hình 2.1. Đồ thị Dạng 1, Định lý 2.3.
2. Dạng 2: có ba đồ thị con đầy đủ và một đỉnh sao cho tồn tại
, , và . Hơn
nữa, tồn tại ba đỉnh , , sao cho
. Ngoài ra, đỉnh có thể kề với bất kỳ đỉnh còn lại nào. (Hình 2.2)
Hình 2.2. Đồ thị Dạng 2, Định lý 2.3.
3. Dạng 3: có ba đồ thị con đầy đủ | | | | | | và tồn tại các
đỉnh với sao cho
. (Hình 2.3)
12
Hình 2.3. Đồ thị Dạng 3, Định lý 2.3.
Hệ quả 2.6. Mọi đồ thị 2-liên thông thỏa mãn và là đồ thị Hamilton.
Từ thuật toán đa thức nhận biết 3 dạng đồ thị đặc biệt không Hamilton trong Định lý
2.3, ta có:
Định lý 2.4. là bài toán thuộc lớp .
2.4. Bài toán
Từ Định lý 1.10, để đánh giá được độ phức tạp của bài toán ta sẽ đưa ra
thuật toán thời gian sau:
Thuật toán 2.4. Nhận biết đồ thị thuộc dạng: ̅
̅
̅
.
Input: Đồ thị .
Output: Is_Graph4 = True nếu ̅
̅
̅
,
ngược lại, Is_Graph4 = False.
Chương trình:
Function Boolean Is_Graph4
Begin
If ( ) Then Return False;
Tính bậc các đỉnh của ;
;
For each do
If (
) Then ;
If (| |
) and ( là tập đỉnh độc lập) Then
Return True
Else Return False;
End;
Hệ quả 2.7.
là bài toán thuộc lớp .
Hệ quả 2.8. là bài toán thuộc lớp .
13
2.5. Kết luận Chƣơng 2
Bài toán đã được đánh giá độ phức tạp trong [15] và Chương này tác giả đã tiếp
tục nghiên cứu mở rộng theo hai bài toán (với nguyên dương tổng quát) và .
Các kết quả đạt được như sau:
Với thì các bài toán vẫn còn là bài toán .
Với thì các bài toán và thuộc lớp .
Như vậy, có thể nói rằng Giả thuyết 2.1 đã được tác giả giải quyết đến trường hợp
, với thì vẫn còn là vấn đề mở.
Dựa trên các kết quả đạt được và Hệ quả 2.6, tác giả đưa ra Giả thuyết thứ hai:
Giả thuyết 2.2. Với mọi số nguyên dương , nếu đồ thị 2-liên thông thỏa mãn và
thì là đồ thị Hamilton.
CHƢƠNG 3. THUẬT TOÁN ĐA THỨC XÁC ĐỊNH CHU TRÌNH
HAMILTON TRONG ĐỒ THỊ
VÀ
Chương này tác giả sẽ đề xuất các thuật toán đa thức xác định chu trình Hamilton cho
hai lớp đồ thị
và
. Thêm vào đó, tác giả đề xuất việc sử dụng bao
đóng đồ thị để mở rộng lớp đồ thị thực hiện thuật toán. Cuối cùng, tác giả tiến hành thực
nghiệm trên các đồ thị có số đỉnh lớn để cho thấy tính hiệu quả và khả thi thực hiện của các
thuật toán đề xuất.
3.1. Thuật toán cho lớp đồ thị
Bổ đề 3.1. Cho là đồ thị thỏa mãn
và là đồ thị Hamilton. là một chu trình
bất kỳ trong , là một thành phần liên thông của . Giả sử các đỉnh của
được đánh số theo một chiều quay trên lần lượt là . Nếu có không quá
đỉnh thì sẽ xảy ra một trong các trường hợp sau:
1. Tồn tại sao cho
.
2. Tồn tại
với .
3. Tồn tại , khi đó kề với tất cả các đỉnh
,
4. Tồn tại sao cho
.
a. Thuật toán 3.1. Xác định chu trình Hamilton cho đồ thị
.
Input: Đồ thị 2-liên thông thỏa mãn
.
Output: Chu trình Hamilton của nếu là đồ thị Hamilton, hoặc trả lời không có
chu trình Hamilton.
Procedure Hamilton2*;
14
BEGIN
// Kiểm tra không là đồ thị Hamilton
1: If ( ̅
̅
̅
) Then
2: Begin
3: Thông báo không có chu trình Hamilton;
4: Kết thúc;
5: End;
// Trường hợp là đồ thị Hamilton
6: Tìm một chu trình tùy ý của đồ thị ;
// Vòng lặp mở rộng tập đỉnh của
7: While | | Do
8: Begin
9: Tìm một thành phần liên thông của – ;
10: Đánh số các đỉnh của lần lượt là ;
// Mở rộng chu trình theo 4 trường hợp
11: If tồn tại
Then
12: Begin
13: Tìm sao cho
;
14: Tìm một đường đi nối x với y trong ;
15: Thay thế thành chu trình mới
⃗⃗ ⃗ ;
16: End
17: Else If tồn tại
Then
18: Begin
19: Tìm sao cho ;
20: Tìm một đường đi nối x với y trong ;
21: Thay thế thành chu trình mới ⃖⃗⃗⃗
⃗⃗ ⃗ ;
22: End
23: Else If tồn tại Then
24: Begin
25: Chọn tùy ý và tìm sao cho ;
26: Tìm một đường đi nối x với y trong ;
27: Thay thế thành chu trình mới ⃖⃗⃗⃗
⃗⃗ ⃗ ;
28: End
29: Else
30: Begin
31: Tìm
và tìm sao cho ;
32: Tìm một đường đi nối x với y trong ;
33: Thay thế thành chu trình
⃗⃗ ⃗
⃗⃗ ⃗ ;
34: End;
35: End;
END;
Thuật toán 3.1 cần không quá phép toán thực hiện.
15
3.2. Thuật toán cho lớp đồ thị
Ý tưởng của thuật toán là trong trường hợp 2-liên thông thì xây dựng một chu trình
tùy ý trong với thời gian đa thức, sau đó mở rộng cho đến khi đủ đỉnh bằng cách
nối thêm một số cạnh cho cặp đỉnh không kề nhau có tổng bậc không nhỏ hơn , đồng thời
kết hợp với việc gán nhãn cho các cạnh (được trình bày trong phần 1.4). Cuối cùng, ta sử
dụng Thuật toán 1.3 (TransformCycle) để tìm chu trình Hamilton cho đồ thị ban đầu từ .
a. Thuật toán 3.2. Xác định chu trình Hamilton cho đồ thị
Input: Đồ thị 2-liên thông thỏa mãn
.
Output: Chu trình Hamilton của .
Procedure Hamilton3;
BEGIN
// Gán nhãn bằng 1 cho tất cả các cạnh của
1: For each in do [ ] ;
2: ;
3: Tìm một chu trình tùy ý của đồ thị ;
4: While | | Do
5: Begin
6: Đánh số lại các đỉnh của ;
7: Tìm một thành phần liên thông của – ;
8: Tìm tập đỉnh ;
// Mở rộng theo 3 trường hợp
9: If tồn tại Then
10: Begin
11: Tìm sao cho ;
12: Tìm một đường đi nối x với y trong ;
13: Thay thế thành chu trình mới ⃗⃗ ⃗ ;
14: End
15: Else If tồn tại Then
16: Begin
17: Tìm sao cho ;
18: Tìm một đường đi nối x với y trong ;
19: Thay thế thành chu trình mới ⃖⃗⃗⃗ ⃗⃗ ⃗ ;
20: End
21: Else
22: Begin
23: Tìm hai đỉnh bất kỳ thuộc ;
// Bổ sung cạnh mới cho đồ thị và gãn nhãn
24: ;
25: ;
26: [ ] ;
27: Tìm sao cho ;
16
28: Tìm một đường đi nối x với y trong ;
29: Thay thế thành chu trình mới ⃖⃗⃗⃗ ⃗⃗ ⃗ ;
30: End;
31: End;
// Biến đổi thành chu trình Hamilton của ban đầu
32: TransformCycle( );
END;
Thuật toán 3.2 cần không quá phép toán thực hiện.
3.3. Sử dụng bao đóng cho các lớp đồ thị có tổng bậc lớn
Theo Mệnh đề 1.2 thì là đồ thị Hamilton khi và chỉ khi là đồ thị Hamilton.
Trong đồ thị bao đóng , bậc của mỗi đỉnh đều không nhỏ hơn bậc của đỉnh tương ứng
trong đồ thị (Vì ), do đó các điều kiện về tổng bậc
lớn trong đồ thị bao
đóng sẽ có nhiều khả năng thỏa mãn hơn so với đồ thị ban đầu. Sau khi tìm được
một chu trình Hamilton trong đồ thị , sử dụng Thuật toán 1.3 sẽ tìm được một chu
trình Hamilton trong đồ thị ban đầu từ chu trình . Do đó, tác giả đưa ra đề xuất sau:
Hình 3.1. Sơ đồ thuật toán xác định chu trình Hamilton sử dụng bao đóng đồ thị
17
Đề xuất 3.1. Sử dụng bao đóng đồ thị kết hợp với các thuật toán xác định chu trình
Hamilton trong các lớp đồ thị có tổng bậc lớn để có thể thực hiện cho lớp đồ thị tổng quát
hơn.
Như vậy, thay vì việc không áp dụng được thuật toán cho đồ thị ban đầu, khi chuyển
sang đồ thị bao đóng thì khả năng áp dụng được thuật toán sẽ cao hơn. Với Thuật toán 3.1
và 3.2 khi sử dụng bao đóng đồ thị như sơ đồ thuật toán trên cũng chỉ cần không quá
phép toán thực hiện.
Với các đồ thị có tổng bậc lớn thì số cạnh cũng lớn nên khi chạy chương trình cho
Thuật toán tìm chu trình Hamiltton trên đồ thị bao đóng thì thời gian tăng không đáng kể.
3.4. Chƣơng trình thực nghiệm
Phần này sẽ xây dựng chương trình thực nghiệm cho hai thuật toán 3.1 và 3.2 mà tác
giả đã đề xuất để xác định chu trình Hamilton cho lớp đồ thị
và
.
3.4.1. Giới thiệu chƣơng trình
Hình 3.2. Sơ đồ khối thực hiện chương trình
Chương trình thực nghiệm sẽ được xây dựng theo sơ đồ khối đưa ra trong Hình 3.2 và
phần thực hiện Tìm Chu trình Hamilton theo thuật toán tƣơng ứng sẽ được đo thời gian.
Tác giả xây dựng hai chương trình thực nghiệm xác định chu trình Hamilton như sau:
Bảng 3.1. Các chương trình thực nghiệm xác định chu trình Hamilton
Chƣơng trình Lớp đồ thị Thuật toán áp dụng Thời gian
Chương trình 1
. Thuật toán 3.1
Chương trình 2
. Thuật toán 3.2
18
Việc xác định giá trị hoặc
cần thuật toán nên việc kiểm tra một đồ thị bất
kỳ có thuộc lớp
hoặc
chỉ mất thời gian là , do đó Chương trình
có thể nhận dữ liệu đầu vào là đồ thị tổng quát và thực hiện khả thi với các đồ thị lớn.
Chương trình sử dụng ngôn ngữ lập trình C# và được tiến hành thực nghiệm trên máy
tính sử dụng Hệ điều hành Windows7, bộ vi xử lý Core i3 2.53 GHz, RAM 8GB.
3.4.2. Bộ dữ liệu đầu vào
Do không có đồ thị mẫu và cũng chưa có tác giả nào tiến hành thực nghiệm việc tìm
chu trình Hamilton trên những lớp đồ thị
và
nên tác giả sẽ xây dựng
hai bộ dữ liệu được sinh ngẫu nhiên gồm các đồ thị 2-liên thông thỏa mãn điều kiện đầu vào
tương ứng của Thuật toán 3.1 hoặc Thuật toán 3.2 để thực nghiệm.
Bộ dữ liệu 1 gồm các đồ thị thỏa mãn điều kiện
, nhưng không thỏa mãn
điều kiện
. Bộ dữ liệu 2 gồm các đồ thị thỏa mãn điều kiện
, nhưng
không thỏa mãn điều kiện
.
Bảng 3.2. Danh sách các đồ thị được tiến hành thực nghiệm
Số đỉnh
( )
Đồ thị
Bộ dữ liệu 1
(
)
Bộ dữ liệu 2
(
)
1000 S2sao-1000 S3-1000
2000 S2sao-2000 S3-2000
3000 S2sao-3000 S3-3000
4000 S2sao-4000 S3-4000
5000 S2sao-5000 S3-5000
6000 S2sao-6000 S3-6000
7000 S2sao-7000 S3-7000
8000 S2sao-8000 S3-8000
9000 S2sao-9000 S3-9000
10000 S2sao-10000 S3-10000
3.4.3. Đánh giá hiệu năng
Bảng 3.3. Thống kê thời gian chạy chương trình khi sử dụng Thuật toán 1.1
Chƣơng trình 1 Chƣơng trình 2
Đồ thị Thời gian (s) Đồ thị Thời gian (s)
S2sao-1000 2.467 S3-1000 2.283
S2sao-2000 19.664 S3-2000 17.945
S2sao-3000 64.895 S3-3000 61.586
19
S2sao-4000 154.620 S3-4000 141.135
S2sao-5000 300.194 S3-5000 264.959
S2sao-6000 525.644 S3-6000 476.623
S2sao-7000 836.379 S3-7000 754.716
S2sao-8000 1249.134 S3-8000 1122.091
S2sao-9000 1780.245 S3-9000 1618.704
S2sao-10000 2416.288 S3-10000 2200.797
Thuật toán 3.1 và Thuật toán 3.2 đều có điểm chung là sử dụng Thuật toán 1.1 để xây
dựng một chu trình ban đầu, sau đó mở rộng cho đến khi có đủ đỉnh do đó độ dài
của chu trình ban đầu sẽ có ảnh hưởng rất lớn đến thời gian chạy chương trình.
Thuật toán 1.1 tìm một chu trình bất kỳ trong đồ thị làm chu trình khởi tạo ban đầu,
tuy nhiên độ dài của là thường là nhỏ. Để tăng tốc độ thực hiện cho chương trình thì có
thể sử dụng một số phương pháp Heuristic thay cho Thuật toán 1.1 để chu trình ban đầu
có độ dài lớn, khi đó số vòng lặp mở rộng chu trình sẽ giảm đáng kể.
Đề xuất 3.2. Tìm một đường đi dài nhất có thể, sau đó tìm cặp đỉnh thuộc sao
cho và đoạn đường dài nhất có thể. Khi đó, ta có một chu trình độ dài lớn là
;
Đề xuất trên có thể được thực hiện bởi Thuật toán sau.
Thuật toán 3.3. Xác định một chu trình có độ dài lớn trong đồ thị 2-liên thông
Input: Đồ thị 2-liên thông .
Output: Một chu trình của có độ dài lớn.
Procedure Create_Long_Cycle()
Begin
Tìm một cạnh ;
;
Stop = False;
While Not(Stop) Do
Begin
Stop = True;
For each Do
If và ( là một đỉnh cuối của ) Then
Begin
; ;
Stop = False;
End;
End;
Found = False; Length = ;
20
While Not(Found) Do
Begin
If tồn tại sao cho | | = Length và Then
Begin
; Found = True;
End
Else Length = Length – 1;
End;
End;
Thay thế Thuật toán 1.1 bởi Thuật toán 3.3 để tìm chu trình khởi tạo ban đầu , tác giả
đã cải tiến được đáng kể thời gian chạy hai chương trình.
Bảng 3.4. Tổng hợp thời gian chạy Chương trình 1 trước và sau khi cải tiến.
Đồ thị
Chƣơng trình 1 Chƣơng trình 1 cải tiến
Độ dài
ban đầu
Thời gian
(s)
Độ dài ban
đầu
Thời gian
(s)
S2sao-1000 4 2.467 999 0.032
S2sao-2000 4 19.664 1997 0.098
S2sao-3000 4 64.895 2988 0.653
S2sao-4000 4 154.620 3980 1.738
S2sao-5000 4 300.194 4997 0.482
S2sao-6000 4 525.644 5990 1.996
S2sao-7000 4 836.379 6987 3.470
S2sao-8000 4 1249.134 7951 16.556
S2sao-9000 4 1780.245 8997 1.496
S2sao-10000 4 2416.288 9986 7.569
Bảng 3.5. Tổng hợp thời gian chạy Chương trình 2 trước và sau khi cải tiến.
Đồ thị
Chƣơng trình 2 Chƣơng trình 2 cải tiến
Độ dài
ban đầu
Thời gian
(s)
Độ dài
ban đầu
Thời gian
(s)
S3-1000 3 2.283 994 0.065
S3-2000 3 17.945 1998 0.123
S3-3000 3 61.586 2992 0.436
S3-4000 3 141.135 3995 0.639
S3-5000 3 264.959 4997 0.799
S3-6000 3 476.623 5997 1.418
S3-7000 3 754.716 6995 1.753
S3-8000 4 1122.091 7998 2.192
S3-9000 3 1618.704 8998 2.569
S3-10000 3 2200.797 9998 3.373
21
Phân tích sự ảnh hưởng của độ dài chu trình khởi tạo ban đầu đối với thời gian chạy
chương trình, tác giả chọn đồ thị S3-2000 để tiến hành thực nghiệm (bằng Chương trình 2).
Kết quả thực nghiệm được đưa ra trong Bảng 3.6 và Hình 3.3 như sau:
Bảng 3.6. Thống kê thời gian chạy Chương trình 2 trên đồ thị S3-2000 theo độ dài chu trình khởi
tạo ban đầu.
Độ dài ban đầu Thời gian (s)
3 17.945
200 14.802
400 12.266
600 10.095
800 8.588
1000 6.737
1200 5.380
1400 4.391
1600 2.893
1800 1.587
1998 0.123
Hình 3.3. Biểu đồ thời gian chạy Chương trình 2 trên đồ thị S3-2000 theo độ dài chu trình khởi tạo
ban đầu.
3.5. Kết luận Chƣơng 3
Chương này đã đề xuất hai thuật toán chính xác để xác định chu trình Hamilton trong
lớp đồ thị
và
. Hai thuật toán này đã được đánh giá trên phương diện
lý thuyết là không quá phép toán thực hiện và tác giả cũng đã tiến hành thực nghiệm
trên các đồ thị lớn từ 1000 đỉnh đến 10000 đỉnh. Kết quả thực nghiệm đã cho thấy tính khả
thi, hiệu quả và ý nghĩa thực tiễn của các thuật toán do tác giả đề xuất.
22
Tác giả đã tiến hành thực nghiệm theo hai chương trình khác nhau và đánh giá được
yếu tố ảnh hưởng chính đến thời gian chạy chương trình là độ d
Các file đính kèm theo tài liệu này:
- tt_chu_trinh_hamilton_va_chu_trinh_dai_nhat_trong_mot_so_lop_do_thi_co_tong_bac_lon_3762_1920000.pdf