Bài toán vòng Hamilton (The Hamiltonian-cycle problem):

Một phần của tài liệu Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN NP-Completeness (Trang 37)

5. CÁC BÀI TOÁN NP-ĐẦY ĐỦ (NP-COMLETE PROBLEMS ): 1 Bài toán clique ((The clique problem) :

5.3.Bài toán vòng Hamilton (The Hamiltonian-cycle problem):

Bây giờ, chúng ta trở lại bài toán vòng Hamilton trong phần II.

Định lý 13. Bài toán vòng Hamilton là NP-đầy đủ.

Chứng minh :

Đầu tiên chúng ta chỉ ra rằng : HAM-CYCLE ∈NP. Cho một đồ thị G =

(V,E), chứng nhận của chúng ta là chuỗi |V| các đỉnh tạo thành vòng Hamilton.

Thuật toán xác minh kiểm tra chuỗi này chứa mỗi đỉnh trong V chính xác chỉ

một mà với đỉnh đầu tiên được lặp lại tại điểm kết thúc cuối cùng, nó thành lập

một vòng trong G. Đó là, nó kiểm tra mà đó là một cạnh giữa mỗi cặp của các

đỉnh liên tiếp nhau và giữa các đỉnh đầu tiên và các đỉnh cuối cùng. Xác minh này có thể được biểu diễn trong thời gian đa thức.

Bây giờ chúng ta chứng tỏ rằng VERTEX-COVER ≤ p HAM-CYCLE mà

chỉ ra rằng HAM-CYCLE là NP-đầy đủ. Cho một đồ thị vô hướng G = (V,E)

một số nguyên k, chúng ta xây dựng một đồ thị vô hướng G’ = (V’,E’) mà có

một vòng Hamilton khi và chỉ khi G có một đỉnh cover kích cỡ k.

Cách xây dựng của chúng ta dựa trên một widget, một widget là một bộ

phận của một đồ thị tuân theo các tính chất chắc chắn.

Hình 16. Widget đã sử dụng trong việc rút gọn bài toán vertex-cover đến bài toán vong Hamilton. Một cạnh (u,v) của đồ thi G tương ứng với Widget Wuv trong đồ thị G’ được tạo nên bởi việc rút gọn. (a)Widget, với các đỉnh riêng biệt đã gán nhãn

(b)-(d)các đường đi đã được tô đậm chỉ có thể có một đường qua widget bao gồm tất cả các đỉnh, kết quả chỉ các liên kết từ widget đến G’qua các đỉnh [u,v,1], [u,v,6], [v,u,1] và [v,u,6]

Hình 16 (a) chỉ widget chúng ta sử dụng. Đối với mỗi cạnh (u,v)E, đồ thị

G’ mà chúng ta xây dựng sẽ chứa một sao chép của mỗi đỉnh trong Wuv bởi

[u,v,i] hoặc [v,u,i], 1≤ i ≤ 6, vì thế mỗi widget Wuv chứa 12 đỉnh. Widget Wuv

cũng chứa 14 cạnh, xem ở hình 16 (a).

Dọc theo cấu trúc bên trong của widget, chúng ta tuân theo các tính chất chúng ta muốn bằng cách giới hạn các liên kết giữa các widget và phần còn lại của đồ thị G’ mà chúng ta xây dựng. Riêng chỉ các đỉnh [u,v,1], [u,v,6], [v,u,1] và [v,u,6] sẽ có các cạnh liên quan từ mặt ngoài Wuv. Bất kỳ vòng Hamilton của

G’ sẽ phải đi ngang qua các cạnh của Wuv trong một trong 3 cách ở hình 16 (b) - (d). Nếu vòng vào đỉnh [u,v,1], nó phải đi qua đỉnh [u,v,6] và nó cũng thăm tất cả 12 đỉnh của widget (hình 16 (b)) hoặc 6 đỉnh [u,v,1] qua [u,v,6] (hình 16 (c)). Trong trường hợp sau, vòng sẽ phải reenter widget để thăm các đỉnh [u,v,1] qua [u,v,6]. Tương tự, nếu vòng thăm qua đỉnh [u,v,1], nó phải đi qua đỉnh [v,u,6] và nó cũng thăm tất cả 12 đỉnh của widget (hình 16 (d)) hoặc thăm 6 đỉnh [v,u,1] qua [v,u,6] (hình 16 (c)). Không có đường đi nào khác qua widget mà thăm tất cả 12 đỉnh. Đặc biệt, nó có thể xây dựng hai đường đi đỉnh rời (vertex-disjoint), một đường kết nối [u,v,1] đến [u,v,6] và một đường khác kết nối [v,u,1] đến [v,u,6], như thế union (hợp) của hai đường đi chứa tất cả các đỉnh của widget.

Chỉ các đỉnh khác trong V’ khác hơn các widgets là các đỉnh chọn s1, s2,...,sk. Chúng ta sử dụng các cạnh liên quan trên các đỉnh chọn trong G’ để chọn

k đỉnh của cover trong G.

Thêm các cạnh trong các widgets, có hai loại cạnh trong E’, hình 17.

Hình 17 . Sự rút gọn của một trường hợp bài toán đỉnh cover đến một trường hợp của bài toán vòng Hamilton. Hình (a), là một đồ thị vô hướng G với một đỉnh cover kích cỡ 2, chứa các đỉnh đã bôi đen w và y. Hình (b), là một đồ thị vô hướng G’

được sinh ra bởi sự rút gọn, với đường đi Hamilton tương ứng với đỉnh cover đã bôi đen Đỉnh cover {w,y} tương ứng với các cạnh (s1, [w, x, 1])(s2, [y, x, 1]) xuất hiện trong vòng Hamiton.

Đầu tiên, cho mỗi đỉnh uV, chúng ta thêm các cạnh để nối các cặp của

các widget theo thứ tự từ một đường đi chứa tất cả các widget tương ứng với các cạnh liên quan trên u trong G. Chúng ta tùy tiện thứ tự các đỉnh gần kề đến mỗi đỉnh uV như u(1), u(2),...,u(degree(u)), mà degree(u) là số các đỉnh gần kề đến u.

Chúng ta tạo một đường đi trong G’ qua tất cả các widget tương ứng với các (adsbygoogle = window.adsbygoogle || []).push({});

cạnh liên quan trên u bằng cách thêm vào E’ các cạnh {([u,u(i),6], [u,u(i-1),1]) : 1≤

idegree(u)-1}. Trong hình 17., ví dụ, chúng ta thứ tự các đỉnh gần kề đến ω

như x, y, z và vì thế đồ thị G’ trong phần (b) của hình gồm các cạnh trong G’ lấp đầy một đường đi chứa tất cả các widget tương ứng với các cạnh trên u trong G.

Khả năng trực giác phía sau các cạnh này là nếu chúng ta chọn một đỉnh u

V trong đỉnh cover của G, chúng ta có thể xây dựng một đường đi từ [u,u(1),1] đến [u,u(degree(u)),6] trong G’ mà “covers” tất cả các widget tương ứng với các cạnh liên quan trên u. Đó là, đối với mỗi một các widgets này, nói rằng Wu,u(i), [u,u(i),1] , [u,u(i),2], ..., [u,u(i),6].

Loại cuối cùng của các cạnh trong E’ nối đỉnh đầu tiên [u,u(1),1] và đỉnh cuối cùng [u,u(degree(u)),6] của một trong các đường đi đến một trong các đỉnh chọn. Đó là, gồm các cạnh :

{(SJ, [u,u(1),1]) : u V và 1 ≤jk} ∪ {(SJ, [u,u(degree(u)),6]) : uV và 1 ≤ j k} Kế tiếp, chúng ta chỉ ra rằng kích cỡ của G’ là đa thức trong kích cỡ của G. Các đỉnh của G’ là các đỉnh trong các widgets, thêm các đỉnh chọn. Mỗi widget chứa 12 đỉnh và có k≤ |V| các đỉnh chọn, cho một tổng các đỉnh :

|V’| = 12 |E| + k

≤ 12 |E| + |V|

Các cạnh của G’ là các cạnh trong các widgets, đó là đường đi giữa các widgets và kết nối các đỉnh chọn đến các widgets. Có 14 cạnh trong mỗi widget, hoặc 14 |E| trong tất cả các widgets. Cho mỗi đỉnh uV , có degree (u) - 1 các cạnh giữa các widgets, vì thế tổng qua tất cả các đỉnh trong V, đó là :

∑∈ ∈ − = − V u V E u ree( ) 1) 2| | | | (deg

Các cạnh giữa các widget. Cuối cùng, có 2 cạnh cho mỗi cặp chứa một đỉnh chọn và một đỉnh của V, hoặc 2k |V| như các cạnh. Tổng các cạnh của G’ là :

|E’| = (14 |E|) + (2|E| - |V|) + (2k |V|) = 16 |E| + (2k-1) |V|

≤ 16 |E| + (2|V|-1) |V|

Bây giờ chúng ta chỉ ra rằng sự chuyển từ đồ thị G đến G’ là một sự rút gọn. Đó là, chúng ta phải chỉ ra rằng G có một đỉnh cover của kích cỡ k khi và chỉ khi G’

có một vòng Hamilton.

Cho rằng G=(V,E) có một đỉnh cover V*V kích cỡ k. Lấy V* = {u1, u2,...,

uk}. Như hình 17. biểu diễn, chúng ta thành lập một vòng Hamilton trong G’

gồm edges8 cho mỗi đỉnh ujV*. Gồm các cạnh {([uj, ui j, 6], [uj, ui j 1 − , 1]) : 1≤i

≤ degree(uj)}, mà kết nối tất cả các widget tương ứng với các cạnh liên quan trên

uj. Chúng ta cũng gồm các cạnh trong vòng các widget này như hình 16 (b) - (d) biểu diễn, phụ thuộc vào khi và chỉ khi cạnh là được covered bởi một hoặc hai đỉnh trong V*. Vòng hamilton cũng bao gồm các cạnh :

{(sj, [uj, ui j, 1]): 1≤ j ≤ k} ∪ {(sj+1, [uj, u ree uj j )) ( (deg , 6]) : 1≤ j ≤ k-1} ∪ {(s1, [uk, u ree k )) uk ( (deg , 6]) }.

Theo hình 17., người đọc có thể xác minh xác cạnh từ một vòng. Vòng bắt đầu tại s1, thăm tất cả các widget tương ứng với các cạnh liên quan trên u1, sau đó thăm s2, thăm tất cả các widget tương ứng với các cạnh liên quan trên u2 và tiếp tục cho đến khi nó trở về s1. Mỗi widget đã thăm một hoặc hai lần phụ thuộc

vào một hoặc hai đỉnh của V* cover cạnh tương ứng của nó. Bởi vì V* là một

đỉnh cover cho G, mỗi cạnh vòng E là liên quan trên một số đỉnh trong V* và vì

vòng thăm mỗi đỉnh trong mỗi widget của G’. Bởi vì vòng cũng thăm mỗi đỉnh

chọn, nó là Hamilton.

Ngược lại, cho rằng G’ = (V’,E’) có một vòng Hamilton cE’. Chúng ta khẳng định rằng tập :

V* = {uV : (sj,[u,u(1),1])c, với một số 1 j k} (V.3.1)

là một đỉnh phủ cho G. Để xem tai sao, Chia C thành các đường đi lớn nhất bắt đầu tại một số đỉnh chọn sj, ngang qua một cạnh (sj,[u,u(1),1]) cho một vài uV (adsbygoogle = window.adsbygoogle || []).push({});

và kết thúc tại một đỉnh chọn sj không đi qua bất kỳ đỉnh chọn khác. Chúng ta

hãy gọi mỗi đường đi như thế là một “cover path”. Từ cách xây dựng G’, mỗi

cover đường đi phải bắt đầu tại một vài si, lấy cạnh (si,[u,u(1),1]) cho một số đỉnh

uV, đi qua tất cả các widget tương ứng với các cạnh trong E liên quan trên u

và sau đó kết thúc tại một số đỉnh chọn sj. Chúng ta đề cập đến đường đi cover này như pu và bằng phương trình (V.3.1), chúng ta đặt u thành V*. Mỗi widget thăm bởi pu phải là Wuv hoặc Wvu cho một vài vV. Cho mỗi widget đã thăm bởi pu , các đỉnh của nó đã thăm bởi một hoặc hai đường đi cover. Nếu chúng đã thăm bởi một đường đi cover, thì cạnh (u,v)E đã covered trong G bởi đỉnh u. Nếu hai đường đi thăm widger, thì đường đo cover khác phải là pu, mà vV* và cạnh (u,v)E đã covered bởi cả hai uv. Vì mỗi đỉnh trong mỗi widget đã

thăm bởi một số đường đi cover, chúng ta thấy rằng mỗi cạnh trong E là đã

covered bởi một số đỉnh trong V*.

Một phần của tài liệu Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN NP-Completeness (Trang 37)