Cho tníớc một đồ thị vô hướng G = (V, E) và một tập K các màu khác nhau. Có hay không cách tô màu đúng các đỉnh V của đồ thị G bằng K màu cho trước? (tô màu đúng được hiểu theo nghĩa hai đỉnh bất kì liên thuộc một cạnh phải được tô bằng hai màu khác nhau).
Ví dụ, xét đồ thị G = (y, E) được cho ở hình 6.2, với AT = 3. Không có cách nào tô màu đúng các đỉnh của G.
202 _
26.CTDL, ..P T P M Ẻ M .B
Hình 6.2. Một đồ thị G không tô màu các đỉnh được hằng ha màu
Trước hết ta nói vể bài toán bốa màu nổi tiếng và sau đó tìm mối liên hệ với bài toán tô màu đỉnh nói trên.
Bài toán bốn màu có thể phát biểu như sau: Phải chăng có thể tô màu mọi bản đồ phẳng, sử dụng không quá bốn màu, sao cho mọi cặp quốc gia có chung một đường biên
ÍỊÌỚỈ đều được tô hằng hai màu khác nhau?
Từ hơn một trăm năm nay, đã có phỏng đoán rằng bốn màu là đủ cho bài toán tô màu bản đồ phẳng nói trên. Tuy nhiên, phải đến năm 1976, K. Appel và w. Hankel mới giải quyết trọn vẹn bài toán bằng một chứng minh khác thường gồm hai bước.
Trong bước 1, các tác giả đã đưa bài toán tổng quát về một số hữu hạn trường hợp (khoảng hem 1800 trường hợp) bằng các lập luận toán học. Trong bước thứ hai, tất cả những trường hợp hữu hạn đó đều được giải quyết bằng những tính toán tốn nhiều thời gian trên máy tính.
Công trình này đã được công bố trên Bull. Amer. Math. So. 82 (1976), với nhan để
"Every planar map is four colorable" (mọi bản đồ phẳng đều có thể tô được tối đa bằng bốn màu)'.
Bây giờ, ta có thể chuyển bài toán tô màu bản đồ thành bài toán tô màu đỉnh của đồ thị. Chơ trước một bản đồ, ta xây dựng một đồ thị G: mỗi quốc gia trên bản đổ ứng với một đỉnh của đồ thị G và hai đỉnh của G được nối với nhau bằng một cạnh nếu hai quốc gia tương ứng 'có đường biên giới chung.
Hình 6.3a là một bản đồ phẳng và hình 6.3h là đồ thị tưofng ứng được xây dựng theo cách mô tả trên.
B
b) c)
Hình 6.3
Khái niệm đồ thị phẳng: Một đồ thị phẳng là một đồ thị có thể được vẽ trên một mặt phẳng sao cho không có hai cạnh nào cắt nhau tại một điểm, không phải là đỉnh chung (nếu có) của chúng.
Đồ thị thu được từ Ịnột bản đổ phẳng theo cách được mô tả ở trên bao giờ cũng là đồ thị phẳng, sau khi đã được sắp xếp lại nếu thấy cần thiết. Ví dụ, hình 6.36 thoạt nhìn dường như không phải là đồ thị phẳng, nhưng nếu biểu diễn nó dưới dạng đồ thị như hình 6.3c' thì đó là một đồ thị phẳng.
Bài toán đoán nhận một đồ thị cho trước có là đồ thị phảng hay không là một bài toán rất hay và kết quả đã được J. Hopcroft và R. E. Tarjan công bố trong bài báo "Efficient planarity testing" trên tạp chí /. /455ƠC'. Comp. Mach. 21 (1974), 549-568. Trong công trình đó, các tác giả đã đề xuất một thuật toán quyết định tuyến tính theo số đỉnh của tập v , xức một thuật toán thời gian 0(1 vi ).
Như vậy, với mọi đồ thị phẳng đều có thể tô được bằng bốn màu. Nhưng đối với một đồ thị không phẳng bất kì thì với K màu cho trước, oó hay không một cách tô màu đúng các đỉnh của đồ thị vẫn là một bài toán nan giải.
Ta sẽ đi tìm một thuật toán đệ quy giải bài toán tô màu đúng các đỉnh của đồ thị G với K màu cho tarớc.
Qiọn e là một cạnh của đổ thị G, có hai đầu mút là u và V. Loại cạnh e khỏi G, đồ thị còn lại sẽ là ơ - (e). Ta phân biệt hai loại tô màu đúng đồ thị G - { í}: những cách tô màu đúng trong đó M và V được tô cùng màu và những cách tô màu đúng trong đó M và V được tô bằng hai màu khác nhau. Khi đó, số cầch tô màu đúng của G - {e} bằng K màu sẽ là tổng các cách tô màu thuộc hai loại trên.
Từ đồ thị ơ - (e}, ta xây dựng một đồ thị mới, kí hiệu Gl{e] như sau: các đỉnh của Gl{e) gồm tất cả các đỉnh của G trừ hai đỉnh u và V, được thay bằng một đỉnh mới, kí hiệu là đỉnh MV, có được từ việc ép dồn hai đỉnh M và V thành một.
Như vậy, đồ thị Gl{e) có số đỉnh ít hơn đồ thị G là 1 đỉnh và có các cạnh được xác định như sau:
- Nếu a, b ỉà hai đỉnh của G/{e}, trong đó khồng có đỉnh nào là đỉnh mới 'mv', thì {a, b) là cạnh của Gl[e) nếu và chỉ nếu nó là cạnh của G.
- {uv, b) là một cạnh của G/{e}nếu và chỉ nếu (u, b) hoặc (v, b) hoặc cả hai là cạnh x ủaG .
Hình 6.4a là đồ thị G CỎI đỉnh và một cạnh được chọn e. Hình 6.4Ố là đổ thị Gl{e]
được xây dựng theo cách mô tả .trên.
a) b)
Hình 6.4
Liên quan tới các cách tô màu đúng hai đồ thị G - {e } và ơ/{ }, ta có các bổ đề sau.
204
B ổ ĐỂ 3.2. Giả sử u và V là hai đỉnh của G sao cho e = (u, v) là một cạnh của G. Khi đó số cách tô màu đúng với K màu phân biệt của đồ thị G - {e}, trong đó hai đỉnh u và V được tô bởi cùng một màu bằng với số cách tô màu đúng của đồ thị G/{e}.
Chứng minh'. Giả sử G/{e} có một cách tô màu đúng với K màu., Ta sẽ tô màu các đỉnh của ơ - {í'} vói Ấ" màu như sau:
- Mõi đỉnh của G - [e] khác với M và V giữ nguyên màu đã có trong cách tô màu của G/{e}.
- Các đỉnh uvà V có màu của đỉnh MV được tô trong cách tô màu của G/{ e}.
Như vậy, ta có một cách tô màu với K màu các đỉnh của G - {ể } và ta sẽ chứng minh rằng đó là một cách tô màu đúng.
Thực vậy, giả s ử /l à một cạnh bất kì của G - {e]. Nếu không có đầu mút nào của/
trùng với u hay V thì rõ ràng các đầu mút của /đ ư ợ c tô bằng hai màu khác nhau vì cách tô màu của Glịe) là đúng. Chỉ còn phải xét một trường hợp khi một đầu mút c ủ a / l à u còn đầu mút kia là một đỉnh A', khác với u và V. Nhưng khi đó, các màu của u và X phải khác nhau vì trong G/Ịé-Ịhai đỉnh uv và A' được nối với nhau bởi một cạnh và do đó phải được tô bằng hai màu khác nhau.
Chúng ta tính số cách tô màu đúng G - [e] vóì K màu và đã chứng minh được rằng số cách tô màu đúng trong đ ó u và V' có cùng màu bằng với số cách tô ứiàu của một đ ồ thị có ít hofn G một đỉnh, là đồ thị G/{e}. Vậy chỉ còn phải xét trưòỉng hợp khi các đỉnh M và V có màu khác nhau. Ta có bổ đề sau.
B ổ Đ Ể 3.3. Giả sử e = (u, v) là một cạnh của G. Khi đó số cách tô màu đúng của G - {e} với K màu, trong đó u và V được tô bằng hai màu khác nhau bằng với số cách tô màu đúng của chính G.
Dễ dàng chứng minh được bổ đề 3.3.
Gọi P(K; G) là số cách tô màu đúng các đỉnh của đồ thị G "với K màu phân biệt. Từ các bổ đề 3.2 và 3.3, ta có
P i K - G - { e } ) = P{K-,G/{e}) + P{K-G).
Suy ra
P{K;, G) = PiK- G - { e ] ) - P(K; Gl{e)) (3.4) Đại lượng P{K\ G), số cách tô màu đúng các đỉnh của đồ thị G với K màu, được gọi là đa thức sắc sổ của G. Ta sẽ đi chứng minh khẳng định rằng đó là một đa thức của K có bậc \V(G) .
Thật vậy, nếu G là đồ thị đầy đủ, n đỉnh thì ta có:
PiK-G) = K { K ~ \ ) . . . ( K - n + ì ) , và P{K\ G) là một đa thức theo K bậc n.
Ta sẽ chứng minh điều khẳng định trên trong tniofng hợp tổng quát.
Khẳng định là đúng nếu G có đúng một đỉnh.
Giả sử khẳng định là đúng với các đồ thị có số đỉnh thực sự nhỏ hơn F , ta sẽ chứng minh khẳng định cũng đúng đối với đồ thị có \v\ đỉnh.
Khẳng định đúng nếu G có F đỉnh và không có cạnh nào.
Như vậy, có thể giả sử rằng điều khẳng định là đúng đối với tất cả các đồ thị có V đỉnh và có số cạnh ít hơn EỊ . Giả sử G có \v\ đỉnh và l^l cạnh. Khi đó từ (3.4) suy ra P{K-, G) là một đa thức có bậc là V , y\ G - ịe] có số cạnh ít hơn của G nên đa thức sắc số của nó là một đa thức bậc V . Còn G/{e) có số đỉnh ít hcfn của G nên P{K\ G/{e}) là một đa thức có bậc nhỏ hơn. Khẳng định đã được chứng minh hằng quy nạp.
Phương trình (3.4) cho ta một thuật toán đệ quy tính đa thức sắc số của một đồ thị G, vì hai đồ thị xuất hiện ở vế phải đều "nhỏ" hơn G, một đồ thị có ít cạnh hơn còn đồ thị kia có ít đỉnh hơn. Thuật toán đó như sau :
f u n c t i o n sac so (G: dot hi) : dathuc ;
{ tính đa thức sắc số của một đồ thị G } i f ơ khụng cú cạnh th e n saỗso =
e l s e
chọn một cạnh e của G ;
sac so := sac so (G-{ e } ) - sacso (G/{ e } );
end; { sacso }
Bây giờ ta chuyển sang việc đánh giá độ phức tạp của thuật toán sacso. Như đã biết, đồ thị G có thể được đưa vào theo một trong nhiều cách, theo danh sách đầy đủ các cạnh của G chẳng hạn (chính là danh sách các cặp đỉnh).
Bước thứ nhất là chọn cạnh e và tạo danh sách cạnh của đồ thị G - {é’1, là một thao tác đơn giản vì chỉ cần bỏ đi một cạnh trong danh sách.
Bước thứ hai, ta gọi sacso trên đồ thị G - {e }
Bước thứ ba là tạo ra danh sách cạnh của đồ thị dồn G/{e) từ danh sách cạnh của G.
Dễ thấy chi phí cho thao tác này là tuyến tính theo số cạnh I^ÍG)! của G.
Bước thứ tư, ta gọi sacso trên đồ ừú Glịe).
Kí hiệu F {\v\, ) là chi phí cực đại của việc gọi sacso trên một đồ thị bất kì có tối đa V đỉnh và tối đa E cạnh. Khi đó, ta có:
F{\v\, |£ |) < F ( |k |, |£| - ì) + c\e \ + F ( |f | - 1, |£| - 1) (3.5)
V Ớ Ì F ( |K |,0 ) = 0.
Nếu ta lần lượt cho E = 1, 2, 3, ta có F( F , 1) < c, F( V , 2)<4c và F( F , 3)<1 Ic.
206
Từ đó, ta đi tìm một nghiệm của (3.5) dưófi dạng F(|V|, E ) < f{ E ).c và nhanh chóng thấy rằng nếu;
/( |£ |) = 2 / ( | £ l - l ) + |^|,(/(:0) = 0) (3.6) thì ta sẽ có một nghiệm như vậy.
Vì (3.6) là một phương trình sai phân cấp một (có dạng A'„ I = i>„+ ịX„ + +, (/? > 0;
A'o cho trước)) nên sau khi giải, thu được:
|£|
/(£ ■ ) = 2'^' ~
J = 0
Tương đương ~ được suy ra từ ước lượng = 2.
ỳ=0
(3.7)
Tóm lại, ta tính được đa thức sắc số theo một thuật toán đệ quy với chi phí tính toán là 0(2^^^') cho những đồ thị có l^l cạnh. Đó là độ phức tạp hàm mũ và chi phí tính toán là cực kì lớn trừ trường hợp đồ thị có số cạnh rất nhỏ.
Đến đây, ta xem xét thuật toán sacso theo một cách khác. Với một đồ thị G, ta có thể định nghĩa một số y(G) = |V(G)| + |£(G)|. Dễ thấy là:
Y(G-{d) = Y(G)-l ;Y(G/{e})<Ỵ(ơ)-2 (3.8) Thực vậy, nếu ta loại đi một cạnh e thì Ỵ phải bớt đi 1, còn khi ta ép dồn đồ thị trên cạnh e thì ta mất đi một đỉnh và ít nhất một cạnh, nên Ỵ sẽ giảm đi ít nhất là 2.
Từ đó, nếu kí hiệu /ỉ(y) là khối lượng tính toán cực đại mà thuật toán sacso thực hiện trên một đồ thị G bất kì, mà với nó:
|V(Ơ)| + |£(G)| < Y (3.9)
thì có thể khẳng định là
^ h { y ) < h i y - ì ) + h { y - 2 ) (y > 2) (3.10) Thực vậy, nếu G là một đồ thị thoả mãn (3.9) thì nếu G có cạnh thì ta có thể thực hiện bước loại bỏ và đồng nhất để chứng minh rằng công sức trong việc tính đa thức sắc số của G nhiều nhất bằng với đại lượng ở vế phải của (3.10). Ngược lại, nếu G không có cạnh thì chi phí tính toán là một đơn vị và nhiều nhất bằng vế phải của (3.10). Vậy kết quả (3.10) là đúng.
Với các điều kiện ban đầu h(0) = /?(!) = 1, nghiệm của bất đẳng thức truy hồi (3.10) hiển nhiên là hệ thức h(y) < F y , trong đó F y là số Fibonacci. Như vậy, ta đã chứng minh rằng độ phức tạp thời gian của thuật toán sacso là:
^ N |V (G )| + |E(G )| ^
ì + y/ỉ
= 0 ( 1 . 6 2 ( 3 . 1 1 )
Phân tích trên không mâu thuẫn với đánh giá độ phức tạp mà ta đã làm. trước đây đối với thuật toán sacso mà chỉ là bổ sung cho đánh giá đó. Điều mà ta chứng minh được là chi phí tính toán đối với thuật toán sacso luôn bằng
0 ( m m - (3 .1 2)
Đối với một đồ thị có số cạnh ít hơn số đỉnh của nó, đại lượng thứ nhất trong dấu ngoặc của (3.12) sẽ là số nhỏ hơn, còn trong Irưòíng hợp ngược lại thì số hạng thứ hai là nhỏ hơn. Trong bất kì trường hợp nào, tốc độ của thuật toán vẫn chậm và ta cần tới những thuật toán nhanh hơn.