Thuật toán xây dựngđồ thị Hamilton tối đại ≥4 đỉnh [1]

Một phần của tài liệu Chu trình Hamilton tổng quát trong đồ thị vô hướng Nguyễn Văn Thái. (Trang 38 - 66)

Xuất phát từ một chu trình C gồm n đỉnh. Ta chọn x0 là một đỉnh tùy ý

trên C và xác định

Nếu tập Xi và Yi đã được xác định, thì ta xác định đỉnh xi Xi sao cho

tồn tại x’Xi cách xi khoảng cách 2 dọc theo chu trình C, và yi là đỉnh kề với

v1 v5 v2 v4 v3 v1 v5 v2 v4 v3 G1 G2 G3 v1 v5 v2 v4 v3

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

xi và x’ trên C. Tập hợp Xi+1Yi+1 được xác định theo quy tắc sau:

Xi+1=Xi {xi}, Yi+1=Yi{yi} với i = 1,2,...[n/2]-1.

Đồ thị G thu được bằng cách bổ sung các cạnh nối các đỉnh yi với tất cả các đỉnh không thuộc Xi+1 Yi+1 là đồ thị Hamilton tối đại n đỉnh.

Ví dụ:

Hình 2.9. Đồ thị Hamilton tối đại 9 đỉnh và 7 đỉnh

2.3. Kết luận

Ở phần trên ta vừa trình bày, tìm hiểu về đồ thị Hamilton, một số điều kiện cần để đồ thị cho trước có chu trình Hamilton.

Bài toán HC đã được chứng minh là bài toán NP-C, chính vì vậy mà không tồn tại thuật toán đa thức xác định sự tồn tại chủa chu trình Hamilton trên đồ thị cho trước. Việc xác định sự tồn tại của chu trình Hamilton chủ yếu dựa vào các tính chất và các dấu hiệu riêng. Trong phần này luận văn mới đề cập tới 2 thuật toán nhằm xác định sự tồn tại của chu trình hamilton trong đồ thị G cho trước theo hướng đệ quy.

Cũng trong chương này luận văn đề cập tới một dạng đồ thị mở rộng của Hamilton là đồ thị hamilton tối đại. Luận văn trình bày thuật toán về cách xây dựng đồ thị Hamilton tối đại n đỉnh.

Trong chương tiếp theo luận văn sẽ tập trung vào tìm hiểu về chu trình trội và độ khó của bài toán xác định chu trình trội trong đồ thị cho trước.

x0 y1 x1 y2 x2 y3 x3 x0 y1 x1 y2 x2

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Chƣơng III: CHU TRÌNH TRỘI 3.1. Khái niệm chu trình trội và các điều kiện đủ

3.1.1. Khái niệm:

Định nghĩa 3.1 [9]: Cho đồ thị G = (V,E), một chu trình C của đồ thị G

được gọi là chu trình trội (Chu trình Dominating) khi và chỉ khi G - C không còn cạnh nào cả.

Định nghĩa 3.2 [4] Chu trình C được được gọi là chu trình trội thì mọi cạnh của G đều có ít nhất một đỉnh nằm trên C.

- Đồ thị chứa chu trình trội được gọi là đồ thị trội. Ví dụ:

Hình 3.1. Đồ thị có duy nhất một chu trình Hamilton, nhưng có nhiều chu trình trội (Dominating)

Hình 3.2. Đồ thị không có chu trình Hamilton, có duy nhất mội chu trình trội

Dễ dàng nhận thấy:

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

- Đồ thị chứa chu trình Hamilton thì cũng chứa chutrình trội.

- Trong đồ thị Hamilton, một chu trình Hamilton cũng chính là chu trình trội. Điều ngược lại không phải lúc nào cũng đúng.

3.1.2. Một số điều kiện đủ của chu trình trội

Định lý 3.1. (Nash-Williams [18]):

Giả sửa G là đồ thị 2-liên thông n đỉnh với bậc nhỏ nhất (G) ≥ . Khi đó, bất kỳ chu trình dài nhất trong G là một chu trình trội.

Ví dụ:

Hình 3.3. Đồ thị 2-liên thông với chu trình trội dài nhất độ dài 4

Theo ví dụ: Đồ thị G là 2 liên thông, số đỉnh n = 4, tất cả các đỉnh đều có bậc ≥ 2 =  Theo định lý Nash-Williams chu trình dài nhất là chu trình trội.

Kết quả nghiên cứu của Nash-Williams đã mở ra các hướng nghiên cứu, thảo luận về chu trình trội trong lớp đồ thị vô hướng.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Định lý 3.3. [4]: Giả sửa G là đồ thị 2-liên thông n đỉnh thỏa mãn d(x) + d(y) + d(z) ≥ n+2 cho tất cả các tập đỉnh độc lập x, y, z. Khi đó mọi chu trình dài nhất trong G là chu trình trội.

Ví dụ:

Hình 3.4. Đồ thị G có chu trình dài nhất (độ dài 6) là chu trình trội Theo ví dụ:

- Đồ thị G là đồ thị 2-liên thông

- Các tập đỉnh độc lập: (1,2,3); (4,5,6); (4,5,7); (4,6,7); (5,6,7) đều có tổng bậc ≥ n+2 = 8

Do đó, theo định lý, G có chu trình dài nhất là chu trình trội.

Một bài toán được đặt ra là cho trước đồ thị G, hỏi có tồn tại chu trình trội trong đồ thị G hay không (ký hiệu DC)? Đây vẫn còn là một vấn đề mở.

Bài toán xác định chu trình trội trong đồ thị (DC) được phát biểu như sau:

Instance: Đồ thị vô hướng G

Question: Có tồn tại chu trình trội trong G hay không? Theo [9] tác giả đã chỉ ra bài toán DC là bài toán NP-C

Chúng ta chứng minh rằng bài toán xác định sự tồn tại của chu trình trội trong đồ thị G cho trước là bài toán NP-C bằng cách xây dựng phép quy dẫn đa thức từ bài toán chu trình Hamilton về bài toán chu trình trội.

1 2

3

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Chứng minh:

Rõ ràng DC NP. Để chứng minh DCNP-C. Chúng ta chứng tỏ rằng HC DC. Thật vậy, ta xây dựng phép quy dẫn đa thức từ tập dữ kiện của HC vào tập dữ kiện của DC như sau:

Xuất phát từ tập dữ kiện của HC là đồ thị G với tập đỉnh V={v1,

v2,...,vn}, ta xây dựngđồ thị G’ bằng cách thêm vào G một tập hợp các đỉnh

A={w1, w2,...,wn} cô lập và nối vi với wi (với i=1,2,...,n) bởi một cạnh (Hình 3.5). Dễ nhận thấy, việc xây dựng đồ thị G’ từ đồ thị G có thể thực hiện bởi thật toán đơn định trong thời gian O(n). Với Gn đỉnh và m cạnh, G’2n

đỉnh và n+m cạnh.

Hình 3.5. Đồ thị GG’ được xây dựng từ đồ thị G

Để hoàn tất việc chứng minh, ta chỉ cần chỉ ra rằng G chứa chu trình Hamilton khi và chỉ khi G’ chứa chu trình trội.

- Chiều thuận: Hiển nhiên, vì theo các xây dựng G’, mọi chu trình Hamilton C trong G là một chu trình trội trong G’.

- Chiều ngược lại: Chúng ta sẽ chứng tỏ rằng mọi chu trình trội trong

G’ là một chu trình Hamilton trong G.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Giả sử rằng C’ là chu trình trội trong G’; và C’ không đi qua đỉnh nào đó trong G.

Khi đó, đồ thị G - C’ còn chứa cạnh Điều này mâu thuẫn với giả thiết rằng C’ là chu trình trội trong G’. Mâu thuẫn này chứng tỏ rằng mọi chu trình trội C’ trong G’ là một chu trình Hamilton trong G. Vì vậy G chứa một chu trình Hamilton khi và chỉ khi G’ chứa chu trình trội.

Như vậy, bài toán xác định sự tồn tại của chu trình trội trong đồ thị bất kỳ cho trước là bài toán NP-C.

3.1.3. Chu trình trội trong lớp đồ thị 2-liên thông thỏa mãn (G) .

Lớp đồ thị thỏa mãn (G) được khảo sát trong mối liên hệ với các chu trình dài nhất của chúng. Trong [9] đã đưa ra các kết quả trong lớp đồ thị

2-liên thông thỏa mãn (G)

Định lý 3.4. [10] Nếu G là đồ thị 2-liên thông với (G) và C là một chu trình dài nhất tùy ý của G thì G - C hoặc là đồ thị không chứa cạnh nào cả, hoặc là đồ thị đầy đủ.

Định lý 3.5. [10] Cho G là đồ thị 2-liên thông với (G) . Khi đó các mệnh đề sau là tương đương:

a) G là đồ thị trội

b) Mọi chu trình dài nhất của G đều là chu trình trội c) GK với K là tập các đồ thị đặc biệt.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Cho số tự nhiên s ≥ 2 và n1, n2,...,ns ≥ 1, thì ký hiệu là hợp của s đồ thị đầy đủ lạ nhau , ,..., . Trong trường hợp n1=n2=...=ns=n

ta viết thay cho .

Lớp K là hợp của lớp các đồ thị K1, K2, K3, K4, K5 Trong đó:

K1 là lớp đồ thị 3r đỉnh (với r =  ≥ 3), lớp đồ thị này đẳng cấu với đồ thị G thỏa mãn:

Ví dụ:

Hình 3.6. Đồ thị K1

K2 là lớp đồ thị 15 đỉnh và có  ≥ 5, lớp đồ thị này đẳng cấu với đồ thị

G thỏa mãn: Ví dụ:

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Hình 3.7. Đồ thị K2

K3 là lớp đồ thị 3r đỉnh và có bậc nhỏ nhất  = r ≥ 3, lớp đồ thị này đẳng cấu với đồ thị G thỏa mãn:

Ví dụ:

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

K4 là lớp đồ thị 3r +2 đỉnh và có bậc nhỏ nhất  = r +1 ≥ 3, lớp đồ thị này đẳng cấu với đồ thị G thỏa mãn:

Ví dụ:

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

K5 là lớp đồ thị 3r +2 đỉnh và có bậc nhỏ nhất  = r +1 ≥ 3, lớp đồ thị này đẳng cấu với đồ thị G thỏa mãn:

Ví dụ:

Hình 3.10. Đồ thị K5

3.2. Thuật toán xác định chu trình trội

Như đã chứng minh ở phần trên, bài toán DC là bài toán NP-C, chính vì vậy mà không tồn tại thuật toán đơn định với thời gian đa thức để giải quyết bài toán. Dưới đây luận văn đi sâu vào nghiên cứu thuật toán xác định có tồn tại của chu trình trội trong lớp đồ thị con là đồ thị 2-liên thông thỏa mãn bậc nhỏ nhất (G) . Cụ thể ta sẽ dựa vào định lý 3.5.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Như vậy dựa vào định lý 3.5 ta thấy việc nhận biết sự tồn tại của chu trình trội trong đồ thị G cho trước là dễ dàng vì ta chỉ cần chỉ ra rằng G là đồ thị 2-liên thông có bậcnhỏ nhất (G) và đồ thị G này không thuộc lớp đồ thị đặc biệt K.

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

Input: Đồ thị G.

Output: - G có phải là đồ thị 2-liên thông? (G) - G có chu trình trội hay không?

3.2.1. Thuật toán: (Xác định đồ thị G có chu trình trội hay không?)

Bước 1: Tính bậc cho mỗi đỉnh

Bước 2: Sắp xếp bậc của đỉnh theo chiều giảm dần. Gán max = bậc lớn nhất của các đỉnh và  = bậc nhỏ nhất của các đỉnh. Kiểm tra  hay không? Nếu không thì G không thỏa mãn lớp đồ thị cần kiểm tra

Bước 3: Kiểm tra G có phải là đồ thị 2-liên thông. Nếu G không là 2- liên thông thì G không thuộc lớp đồ thị cần kiểm tra.

Bước 4: Kiểm tra G có thuộc lớp đồ thị đặc biệt K không? Nếu không thuộc thì kết luận G chứa chu trình trội, ngược lại kết luận G không chứa chu trình trội.

Theo thuật toán, ta thấy việc thực hiện bước 1, bước 2 là hết sức dễ dàng nếu đồ thị được lưu dước dạng ma trận kề, khi đó ta chỉ cần tính tổng dòng (hoặc tổng cột) ta sẽ thu được bậc của từng đỉnh của đồ thị

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Trong bước 3, ta thấy đồ thị G là đồ thị 2-liên thông nếu G là đồ thị liên thông và khi xóa đi một đỉnh tùy ý thì đồ thị thu được vẫn liên thông. Sau đó ta áp dụng lại thuật toán để kiểm tra tính liên thông cho đồ thị mới thu được.

Như vậy để thực hiện bước 3, ta thực hiện thuật toán theo 2 thuật toán sau:

3.2.2. Thuật toán 2.1: (kiểm tra đồ thị liên thông)

Bước 1: Xuất phát từ một đỉnh bất kỳ i của đồ thị. Đánh dấu i.

Bước 2: Từ đỉnh i đã được đánh dấu, đánh dấu đỉnh j nếu đỉnh j chưa được đánh dấu và đỉnh j kề với i.

Bước 3: Thực hiện lại bước 2 cho đến khi không thực hiện được nữa thì chuyển sang bước 4.

Bước 4: Kiểm tra nếu số đỉnh đánh dấu < n (n là số đỉnh của đồ thị G) thì kết luận đồ thị không liên thông, ngược lại đồ thị liên thông.

3.2.3. Thuật toán 2.2: (kiểm tra đồ thị 2-liên thông)

Bước 1: Sử dụng thuật toán 2.1 kiểm tra đồ thị có liên thông hay không. Nếu không thì kết luận không phải đồ thị 2-liên thông.

Bước 2: Với mỗi đỉnh i của đồ thị: Đánh dấu xóa đỉnh i.

Sử dụng thuật toán 2.1 kiểm tra đồ thị thu được sau khi xóa đỉnh i có liên thông hay không. Nếu có thì đánh dấu lại i chưa bị xóa, ngược lại thì đồ thị không phải đồ thị 2-liên thông.

Bước 4 của thuật toán (Kiểm tra đồ thị có thuộc lớp đồ thị đặc biệt K hay không). Để kiểm tra đồ thị G cho trước có thuộc lớp đồ thị đặc biệt K hay không, ta phải kiểm tra G xem có thuộc từng lớp K1 hoặc K2 hặc K3 hoặc K4, hoặc K5 hay không. Nếu không thuộc cả 5 lớp thì ta mới kết luận được đồ thị

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

G không thuộc lớp đồ thị K, ngược lại, nếu đồ thị G thuộc một trong 5 lớp con thì kết luận G thuộc lớp đồ thị K

Để thực hiện bước 4 của thuật toán ta thực hiện theo các thuật toán sau:

3.2.4. Thuật toán 3.1: Kiểm tra đồ thị G có thuộc lớp K1 hay không?

Để nhận biết đồ thị G có thuộc lớp K1 hay không, chỉ cần xem hai đỉnh

u, v có bậc lớn nhất của đồ thị G có thỏa mãn ≥ 2(r-1). Nếu có, bỏ nó đi thì G

trở thành đồ thị chứa hai đồ thị đầy đủ có hai lớp đỉnh gồm r-1 đỉnh và một đồ thị có r đỉnh, trong đó mọi đỉnh của hai đồ thị đầy đủ r-1 đỉnh và đồ thị r đỉnh phải có cạnh nối tới hai đỉnh đặc biệt u, v ở trên.

Các bước thực hiện: Bước 1: Gán r = 

Bước 2: Kiểm tra |V| = 3r không? Nếu không thì không phải K1

Bước 3: Chọn hai đỉnh u, v có bậc lớn nhất (deg(u) = deg(v) =

max(deg(i)) = k). Nếu k < 2(r-1) thì không phải K1.

Bước 4: Tìm kiếm các đồ thị đầy đủ K_(r-1, r-1, r). Nếu không có thì không phải K1.

Bước 5: Kiểm tra các đỉnh trong K_(r-1, r-1, r) có nối với hai đỉnh u, v

ở trên hay không. Nếu không thì không phải K1

3.2.5. Thuật toán 3.2: Kiểm tra đồ thị G có thuộc lớp K2 hay không?

Để kiểm tra G có thuộc K2 hay không ta kiểm tra xem trên G có chứa 3 đỉnh u, v, w có bậc ≥ 12 sao cho khi bỏ u, vw thì đồ thị có phân rã thành 4 đồ thị đầy đủ mà mỗi đồ thị này gồm 3 đỉnh hay không, và mỗi đỉnh u, v, w

được nối với tất cả các đỉnh của 4 đồ thị đầy đủ 3 đỉnh nói trên. Các bước thực hiện:

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Bước 1: gán r = 

Bước 2: Kiểm tra |V| = 15 không? Nếu không thì không phải K2

Bước 3: Chọn ba đỉnh u, v, w có bậc lớn nhất (deg(u) = deg(v) = deg(w) = max(deg(i)) = k). Nếu k < 12 thì không phải K2

Bước 4: Tìm 4 đồ thị đầy đủ mà mỗi đỉnh của nó gồm 3 đỉnh (K3). Nếu không có thì không phải K2

Bước 5: Kiểm tra các đỉnh của 4 đồ thị đầy đủ K3 xem có nối với ba đỉnh u, v, w ở trên không? Nếu không thì không phải K2

3.2.6. Thuật toán 3.3: Kiểm tra đồ thị có thuộc K3 hay không?

Để kiểm tra G có thuộc K3 hay không ta kiểm tra xem trên G có một tập đỉnh S gồm r-1 đỉnh có bậc ≥ 2(r-1). Nếu có, bỏ chúng đi thì G phân rã thành

r – 1 đồ thị đầy đủ mà mỗi đồ thị này có 2 đỉnh và các đỉnh này được nối tới

r-1 đỉnh thuộc S.

Các bước thực hiện: Bước 1: gán r = 

Bước 2: Kiểm tra |V| = 3r không? Nếu không thì không phải K3

Bước 3: Chọn tập S gồm r – 1 đỉnh ( jS|deg(j) = max(deg(i)) = k). Nếu k < 2(r-1) thì không phải K3

Bước 4: Tìm r-1 đồ thị đầy đủ (K2) và một đồ thị đầy đủ K3. Nếu không có thì không phải K3

Bước 5: Kiểm tra các đỉnh thuộc tập S có nối với các đồ thị đầy đủ trên không? Nếu không thì không phải K3

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

3.2.7. Thuật toán 3.4: Kiểm tra đồ thị G có thuộc lớp K4 hay không?

Để kiểm tra G có thuộc K4 hay không ta kiểm tra xem trên G có chứa 2 đỉnh u, v có bậc lớn nhất ≥ 3r sao cho khi bỏ nó thì đồ thị G trở thành đồ thị

Một phần của tài liệu Chu trình Hamilton tổng quát trong đồ thị vô hướng Nguyễn Văn Thái. (Trang 38 - 66)

Tải bản đầy đủ (PDF)

(66 trang)