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

Tiểu luận môn Thuật Toán và Phương Pháp Giải Quyết Vấn Đề PHÂN TÍCH, THIẾT KẾ, CẢI TIẾN VÀ MINH HỌA THUẬT TOÁN TÔ MÀU ĐỒ THỊ

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 (695.73 KB, 29 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
BÀI THU HOẠCH MÔN:
THUẬT TOÁN VÀ PHƯƠNG PHÁP GIẢI QUYẾT
VẤN ĐỀ
ĐỀ TÀI:
PHÂN TÍCH, THIẾT KẾ, CẢI TIẾN VÀ MINH HỌA
THUẬT TOÁN TÔ MÀU ĐỒ THỊ
Ging viên phụ trách: PGS. TS. ĐỖ VĂN NHƠN
Học viên thực hiện: LÂM HÀN VŨ
Mã học viên: CH1301119
TP. HỒ CHÍ MINH, THÁNG 10/2014
MỤC LỤC
Trang 3
LỜI NÓI ĐẦU
Để có thể hoàn thành tốt bài báo cáo, trước tiên tôi gởi lời
chân thành cảm ơn đến PGS. TS. Đỗ Văn Nhơn đã tận tình giảng
dạy và giúp đỡ trong thời gian thực hiện bài tiểu luận.
Xin gửi lời cảm ơn đến gia đình, cảm ơn các anh chị, bạn bè,
những người luôn sát cánh, động viên tôi trên bước đường học tập
cũng như trong cuộc sống. Xin chân thành biết ơn sự tận tình dạy
dỗ và sự giúp đỡ của tất cả quý thầy cô tại trường Đại học Công
Nghệ Thông Tin, đặc biệt là các thầy cô trong khoa Khoa học Máy
tính, cảm ơn các thầy cô thuộc bộ phận quản trị thiết bị đã tạo
điều kiện thuận lợi về mặt tinh thần, điều kiện học tập trong quá
trình học tập môn học. Tất cả các kiến thức mà nhà trường và quý
thầy cô đã truyền đạt là hành trang to lớn để tôi mang theo trên
con đường học tập, làm việc và nghiên cứu cũng như trong quá
trình hoàn thiện nhân cách của mình.
TP. HCM, ngày 10 tháng 10 năm 2014
Học viên


Lâm Hàn Vũ
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 4
I. GIỚI THIỆU BÀI TOÁN
1. TỔNG QUAN VỀ ĐỒ THỊ
1.1. Khái niệm
Một cách không chính thức, đồ thị là một tập các đối tượng được gọi là các đỉnh
(hoặc nút) nối với nhau bởi các cạnh (hoặc cung). Cạnh có thể có hướng hoặc vô hướng.
Đồ thị thường được vẽ dưới dạng một tập các điểm (các đỉnh nối với nhau bằng các đoạn
thẳng (các cạnh).
Đồ thị biểu diễn được rất nhiều cấu trúc, nhiều bài toán thực tế có thể được biểu
diễn bằng đồ thị. Ví dụ, cấu trúc liên kết của một website có thể được biểu diễn bằng một
đồ thị có hướng như sau: các đỉnh là các trang web hiện có tại website, tồn tại một cạnh có
hướng nối từ trang A tới trang B khi và chỉ khi A có chứa 1 liên kết tới B.
Cấu trúc đồ thị có thể được mở rộng bằng cách gán trọng số cho mỗi cạnh. Có thể
sử dụng đồ thị có trọng số để biểu diễn nhiều khái niệm khác nhau. Ví dụ, nếu đồ thị biểu
diễn một mạng đường giao thông, các trọng số có thể là độ dài của mỗi con đường. Một
cách khác để mở rộng đồ thị cơ bn là qui định hướng cho các cạnh của đồ thị (như đối với
các trang web, A liên kết tới B, nhưng B không nhất thiết cũng liên kết tới A). Loại đồ thị
này được gọi là đồ thị có hướng. Một đồ thị có hướng với các cạnh có trọng số được gọi là
một lưới.
Đồ thị vô hướng
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 5
1.2. Các cách biểu diễn đồ thị
- Ma trận kề (Adjaceny matrix) - một ma trận N × N, trong đó N là số đỉnh của đồ
thị. Nếu có một cạnh nào đó nối đỉnh v
i
với đỉnh v
j

thì phần tử M
i,j
bằng 1, nếu
không, nó có giá trị 0. Cấu trúc này tạo thuận lợi cho việc tìm các đồ thị con và để
đo các đồ thị.
Adjacency matrix
Biểu diễn đồ thị bằng ma trận kề
- Danh sách kề (Adjacency list) - Mỗi đỉnh của đồ thị có một danh sách các đỉnh kề
nó (nghĩa là có một cạnh nối từ đỉnh này đến mỗi đỉnh đó). Trong đồ thị vô hướng,
cấu trúc này có thể gây trùng lặp. Chẳng hạn nếu đỉnh 3 nằm trong danh sách của
đỉnh 2 thì đỉnh 2 cũng phi có trong danh sách của đỉnh 3. Lập trình viên có thể
chọn cách sử dụng phần không gian thừa, hoặc có thể liệt kê các quan hệ kề cạnh
chỉ một lần. Biểu diễn dữ liệu này thuận lợi cho việc từ một đỉnh duy nhất tìm mọi
đỉnh được nối với nó, do các đỉnh này đã được liệt kê tường minh.
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 6
Biểu diễn đồ thị trên sử dụng danh sách kề
a adjacent to b,c
b adjacent to a,c
c adjacent to a,b
Biểu diễn đồ thị bằng dăn sách kề
2. BÀI TOÁN TÔ MÀU ĐỒ THỊ
Tô màu đồ thị bắt nguồn từ bài toán tô màu các quốc gia trên
một bản đồ sao cho không có hai quốc gia nào chung đường biên
giới được tô cùng màu. Nếu chúng ta xem các quốc gia như các
điểm trên mặt phẳng, và vẽ một cạnh kết nối giữa hai cặp đỉnh
tương ứng của hai quốc gia nào có chung đường biên giới, thì ta
thu được một đồ thị phẳng.
Năm 1852, giả thuyết 4 màu được đề cập lần đầu tiên bởi một
người Anh Francis Guthrie. Trong khi tô màu bản đồ cho các vùng

của nước Anh, ông nhận thấy chỉ cần 4 màu là đủ để tô cho các
tỉnh sao cho không có hai tỉnh nào chung biên giới mà lại cùng
màu. Từ đây, bài toán 4 màu ra đời và trở thành một trong những
bài toán khó giải nhất trong lý thuyết đồ thị lúc đó. Bài toán đã trải
qua hơn một thế kỷ và tiêu tốn khá nhiều công sức nghiên cứu của
các nhà khoa học để giải quyết. Mãi đến năm 1976, định lý 4 màu
được chứng minh bởi Kenneth Appel và Wolfgang Haken tại trường
Đại học Illinois với sự trợ giúp của máy tính. Định lý bốn màu (hay
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 7
định lý bản đồ 4 màu) nghĩ rằng đối với bất kỳ mặt phẳng nào
được chia thành các vùng phân biệt, chẳng hạn như bản đồ hành
chính của một quốc gia, chỉ cần dùng tối đa bốn màu để phân biệt
các vùng lân cận với nhau. Hai vùng được coi là lân cận nếu như
chúng có chung nhau một đoạn đường biên, không tính chung
nhau một điểm.
Nhận thấy được những ứng dụng rộng rãi và mạnh mẽ của nó,
từ đầu nhưng năm 70 của thế kỷ XX, tô màu đồ thị đã được chú
trọng nghiên cứu như một vấn đề thuật toán và thu được những
thành công đáng kể.
3. Một số ứng dụng của bài toán tô màu đồ thị
Đồ thị và bài toán tô màu đô thị cung cấp nhiều giải pháp và ứng dụng
để giải quyết nhiều bài toán thực tế trong khoa học – kĩ thuật. Ở đây, tôi
xin nêu ra một vài ứng dụng tiêu biểu của tô màu đồ thị như sau :
3.1. Bài toán lập lịch
Tô màu đồ thị và tính tổng quát của nó là một công cụ hữu hiệu
trong việc mô hình nhiều dạng bài toán về lập lịch và phân công. Bài
toán lập lịch ở đây có thể được phát biểu như sau : Giả sử chúng ta có
một tập các công việc T cần gán vào những slot thời gian, mỗi công
việc chỉ cần 1 slot thời gian, và mỗi slot thời gian có thể chấp nhận vô số

công việc. Các công việc có thể được lập lịch theo bất kì thứ tự nào,
nhưng những cặp công việc đụng độ nhau cần phải được sắp vào những
slot thời gian khác nhau. Sự đụng độ ở đây có thể do cả hai cùng phải sử
dụng một tài nguyên không thể chia sẽ nào đó. Việc lập lịch cần đảm
bảo thời gian để hoàn thành tất cả các công việc ngắn nhất (dùng ít slot
thời gian nhất).
Đồ thị tương ứng để giải quyết bài toán lập lịch được phát biểu
như trên là đồ thị gồm tập các đỉnh là các công việc cần lập lịch. Hai
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 8
đỉnh tương ứng với hai công việc có đụng độ với nhau thì được nối với
nhau bằng 1 cạnh. Sắc số của đồ thị (sẽ được trình bày ở phần II) cũng
tương ứng chính là thời gian tối ưu (số slot thời gian nhỏ nhất) để giải
quyết toàn bộ công việc mà không xảy ra bất kì sự đụng độ nào.
3.2. Register Allocation
Việc đưa các biến số thường dùng vào thanh ghi, một bộ nhớ dung
lượng nhỏ và rất nhanh được sử dụng để tăng tốc độ xử lí của các
chương trình máy tính bằng cách cung cấp các truy cập trực tiếp đến
các giá trị cần dùng, là một trong những hoạt động then chốt làm tăng
tốc độ của chương trình. Việc này có tên là Register Allocation và thường
được thực hiện bởi một trình biên dịch trong giai đoạn phát sinh mã hóa.
Yêu cầu đặt ra là số lượng các biến cần dùng đến, cần được lưu vào
thanh ghi có thể rất lớn và số lượng thanh ghi trong máy tính thì hạn
chế, ta cần tiết kiệm số thanh ghi tới mức tối đa có thể.
Vấn đề Register Allocation được giải quyết như sau : trình biên
dịch xây dựng một đồ thị mà ở đó, các đỉnh của đồ thị là kí hiệu của các
than ghi và cạnh nối giữa 2 nodes nếu chúng cùng lúc cần dùng đến.
Nếu đồ thị có thể được tô chỉ với k màu thì các biến có thể chỉ cần lưu
trữ trong k thanh ghi.
3.3. Sắp lịch thi, sắp thời khóa biểu

Sắp lịch thi ( hay những biến thể của nó là sắp thời khóa biểu, sắp
lịch công tác,…) là một trong những ứng dụng rất khó và mất nhiều thời
gian, công sức để giải quyết nếu không áp dụng kết quả của bài toán tô
màu đồ thị. Ở các trường đại học, cao đẳng, vào cuối mỗi học kì, cần tổ
chức thi các môn học đượ c tổ chức trong học kì đó. Yêu cầu đặt ra là
cần phải đưa ra một lịch thi mà ở đó không có một học sinh nào phải thi
2 môn được tổ chức thi cùng lúc, và thời gian thi phải ngắn nhất có thể.
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 9
II. MÔ HÌNH VẤN ĐỀ
1. Phát biểu bài toán
Bài toán tô màu đồ thị tổng quát có thể được phát biểu như sau :
Cho một đồ thị G = (V,E) vô hướng N đỉnh, mỗi đỉnh được nối
với một số đỉnh khác bằng một cung nối trực tiếp duy nhất (không
có 2 đỉnh nào có nhiều hơn 1 đường nối trực tiếp).
Bài toán đặt ra: sử dụng số màu ít nhất, hãy tô màu cho các đỉnh
sao cho không có 2 đỉnh nào có 2 màu giống nhau mà lại được nối
trực tiếp với nhau.
2. Một số định nghĩa, tính chất, thuật ngữ
2.1. Tô màu đỉnh (Vertex Coloring)
Tô màu đỉnh đồ thị được nghiên cứu và áp dụng phổ biến
nhất trong bài toán tô màu đồ thị. Bài toán được phát biểu
như sau:
o Cho đồ thị G(V,E) với V là tập hợp các đỉnh của đồ thị,
E là tập hợp các cạnh nối các đỉnh có liên quan của đồ
thị.
o Việc tô màu đồ được thực hiện bằng cách: tô màu tất cả
các đỉnh trong V sao cho bất kì 2 đỉnh trong G được nối
bởi 1 cạnh đều phải thỏa điều kiện không cùng màu với
nhau.

o Bài toán tô màu đỉnh trở nên tối ưu khi số màu được sử
dụng để tô các đỉnh trong V của đồ thị G là ít nhất.
o Số màu ít nhất có thể tô hoàn chỉnh đồ thị G được gọi là
chromatic number - sắc số , kí hiệu: X(G)
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 10
o Bài toán tô k màu lên 1 đồ thị được gọi là bài toán k-
coloring. Bài toán được gọi là k-chromatic nếu k =
X(G).
Ví dụ:
Cho đồ thị G(V,G) như sau:
Với k = 3. Bài toán k-coloring được thực hiện cho kết quả:
Tuy nhiên, sắc số của đồ thị G là X(G) = 2 nếu như ta tô màu như
sau:
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 11
Như vậy, kếu k=X(G) = 2, bài toán được gọi là k-chromatic.
2.2. Đa thức màu (Chromatic Polynomial)
Trong lý thuyết đồ thị, Đa thức màu (tiếng Anh: Chromatic
polynomial) của một đồ thị biểu diễn số cách tô màu các đỉnh của
đồ thị đó theo số màu. Đa thức màu là đối tượng nghiên cứu của lý
thuyết đại số đồ thị, một nhánh của toán học.
Đa thức màu được đề xuất bởi Geogre David Birkho‰ trong
một nỗ lực của ông nhằm giải quyết bài toán định lý bốn màu.
Định lý của Geogre David Birkho‰ được phát biểu như sau :
− Mọi đồ thị phẳng G đều có sắc số không lớn hơn 4, nếu
với mọi G, trong đó P(G,k) xác định số cách tô
màu đỉnh G bởi k màu.
− Giá trị của đa thức màu của đồ thị G tại k bằng số cách tô màu
đỉnh đồ thị G với k màu. Đa thức màu thường được kí hiệu là ,

χ, hoặc π.
Ví dụ:
Với đồ thị sau, nếu sử dụng 1 màu hoặc 2 màu, ta không thể
thực hiện tô màu đồ thị hoàn chỉnh.
Nếu sử dụng 3 màu, ta có 12 cách để tô màu đồ thị. Nếu sử
dụng 4 màu, ta có thể sử dụng 24 + 4*12 = 72 cách ( sử dụng tất
cả 4 màu, ta có 4! = 24 cách tô mỗi đỉnh 1 màu riêng biệt, nếu sử
dụng 3 màu, ta có mỗi 12 cách cho 3 màu đã chọn ra trong số 4
màu) .
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 12
Có tất cả 12 cách tô đồ thị P
3
Từ đó rút ra kết luận, đa thức màu là 1 hàm p(G,k) nhằm biểu diễn
số cách tô màu cho đồ thị G nếu có k màu nhất định.
Sắc số có thể định nghĩa theo đa thức màu như sau:
sắc số của đồ thị G là giá trị nguyên dương nhỏ nhất k mà đa thức
màu của G tại k nhận giá trị dương:
χ .
Đa thức màu của 1 số đồ thị:
Đồ thị tam
giác K
3
Đồ thị đường
đi P
n
Đồ thị đầy đủ
K
n
Cây với n đỉnh

Đồ thị chu
trình C
n
Đồ thị
Perdesen
2.3. Tô màu cạnh
− Bài toán tô màu cạnh của 1 đồ thị là phương pháp tô màu
cho riêng từng cạnh của đồ thị, sao cho ở bất kì đỉnh nào
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 13
trên đồ thị, các cạnh nối đến đỉnh đó phải có màu khác
nhau.
− Bài toán tô màu cạnh với k màu được gọi là bài toán k-
edge-coloring.
− Đồ thị được tô hoàn chỉnh sử dụng ít màu nhất được gọi là
chromatic index, hay edge chromatic number.
2.4. Tô màu toàn bộ
Phương pháp tô màu toàn bộ là sự kết hợp vừa tô màu đỉnh, vừa tô
màu cạnh. Nghĩa là đồ thị gồm các đỉnh và cạnh sau khi tô màu
thỏa mãn 2 tính chất:
− Bất kì 2 đỉnh có chung cạnh không trùng màu với nhau.
− Bất kì các cạnh có chung đỉnh không trùng màu với nhau.
2.5. Các tính chất
Đồ thị phẳng: Đồ thị vô hướng G được gọi là đồ thị phẳng nếu
ta có thể biểu diễn nó trên một mặt phẳng sao cho không có cạnh
nào cắt nhau.
Các đồ thị không phẳng nổi tiếng:
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 14
Đồ thị k5- đồ thị đầy đủ Đồ thị K

3,3
- Đồ thị 2 phía đầy đủ
Định lý Kuratowski: Đồ thị G là đồ thị phẳng nếu và chỉ nếu G
không chứa đồ thị con đẳng cấu với K
5
hoặc K
3,3
.
Ví dụ:
Các đồ thị con sau không phải là đồ thị phẳng:
 Định lý 4 màu: Số màu của một đồ thị phẳng là không lớn
hơn 4.
Bài toán được đưa ra năm 1850. Có rất nhiều chứng minh sai về bài toán
này. Chứng minh sai nổi tiếng là của Alfred Kempe vào năm 1879. Percy
Heawood phát hiện ra chứng minh sai ở trên vào năm 1890 Dựa vào đó,
năm 1976 Appel và Haken đã chứng minh bằng cách sử dụng máy tính
Clique:
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 15
− một clique trong đồ thị vô hướngG là tập các đỉnhV (V là tập con
của tập các đỉnh của G) thoả mãn: với mỗi cặp đỉnh thuộc V luôn
tồn tại một cạnh của G nối chúng. Do vậy một đồ thị con được tạo
ra từ V sẽ là một đồ thị đầy đủ. Kích thước của một clique là số
đỉnh của nó.
− Clique cực đại (maximal clique) của G là clique không thuộc bất cứ
một clique nào khác rộng hơn nó, nói cách khác là không thể thêm
bất cứ đỉnh nào vào một clique cực đại để tạo ra clique có số đỉnh
lớn hơn.
− Clique lớn nhất (maximum clique) của G là clique có số đỉnh lớn
nhất của G. Một clique lớn nhất đồng thời là một clique cực đại,

nhưng điều ngược lại chưa chắc đã đúng.
− Chỉ số clique (clique number) của đồ thị G là số đỉnh của clique lớn
nhất trong G. Chỉ số clique của đồ thị G được ký hiệu là ω(G).
3 đỉnh AA,BB,CC tạo thành 1 clique. Đồ thị trên có nhiều clique lớn nhất
với chỉ số là 3.
III. THIẾT KẾ THUẬT TOÁN
1. Phương pháp vét cạn
Phương pháp vét cạn thường được sử dụng trong tô màu đồ thị để
thử tất cả các khả năng có thể, nghĩa là đầu tiên thử tiến hành tô màu
đồ thị bằng 1 màu, 2 màu, 3 màu, cho đến khi tìm ra phương pháp
thỏa mãn yêu cầu, đây là phương pháp tối ưu nhất để tìm ra cách tô có
số màu sử dụng bằng với sắc số của đồ thị.
Ta thiết kế thuật toán vét cạn dựa theo nguyên tắc số màu tăng
dần như sau: Lưu trữ các màu đã tô của mỗi đỉnh trong đồ thị bằng cấu
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 16
trúc cây, mỗi đỉnh trong đồ thị là 1 bậc của cây, đỉnh cuối cùng của đồ
thị sẽ là nút lá trong cây.
Giải thuật:
Treenode treecolor = Root // Cây dùng lưu trữ màu của các đỉnh;
Hàm tô màu :
// V: đỉnh đang xét, Colors: tập màu có thể tô được trên đỉnh
đó
bool Coloring(V, Colors, treecolor)
success = true;
1. foreach C in Colors
1.1 Tô màu C cho V
1.2 Thêm V đã được tô màu vào 1 nhánh của
treecolor
2. Nếu V là đỉnh cuối cùng trong tập các đỉnh của đồ thị

return true;
3. foreach ( nhánh con N in treecolor)
3.1 Foreach V'> V in G // Với mỗi đỉnh có thứ tự
> thứ tự của V trong G
3.1.1 Colors' = tập màu thích hợp cho V' ;
3.1.2 Nếu Colors' = NULL ==> Trở về bước 3.
3.1.3 Ngược lại :
3.1.3.1 result = Coloring(V',Colors',N);
4. return success;
Thủ tục xử lý tô màu đồ thị:
Colors = null;
done = false;
V = đỉnh đầu tiên trong đồ thị
While ( !done)
{
Thêm màu cho Colors;
done = Coloring(V, Colors,treenode);
}
Để thực thi thuật toán vét cạn, xem như số màu dùng để tô là không
đáng kể, mỗi lần gọi hàm Coloring, số lần gán c màu cho n đỉnh tốn thời
gian n, và cứ mỗi đỉnh v
i
như vậy, việc xác định đỉnh kề của v
i
và chọn
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 17
màu thích hợp cho các đỉnh đó, đồng thời gọi đệ quy ứng với mỗi đỉnh,
thực hiện cho n đỉnh tiêu tốn 2
n

, như vậy, thuật toán vét cạn có độ phức
tạp O(2
n
).
Phương pháp vét cạn đưa ra kết quả tốt nhất, nó có vẻ rất thích
hợp với các đồ thị nhỏ, tuy nhiên đối với các đồ thị phức tạp thì sẽ tiêu
tốn rất nhiều thời gian thực hiện cũng như tài nguyên hệ thống. Do đó,
để giải quyết các bài toán đồ thị phức tạp, ta có thể tiếp cận vấn đề
theo hướng cố gắng tìm ra một giải pháp tốt, không nhất thiết là giải
pháp tối ưu.
2. Phương pháp tham lam
Có rất nhiều giải pháp được đưa ra nhằm giải quyết bài toán tô màu đồ
thị với số đỉnh lớn và có độ phức tạp hợp lý hơn so với phương pháp vét
cạn. Một trong những giải pháp được sử dụng nhiều nhất đó là áp dụng
phương pháp tham lam.
Thuật toán được trình bày như sau:
Begin
1. Colors = null; // tập màu dùng tô các đỉnh.
2. for i =1 to n do // cho i chạy từ đầu đến cuối
tập đỉnh của G
2.2 Nếu Colors khác NULL ==> Tô màu đầu tiên không
xung đột cho v
i
2.3 Nếu Colors == NULL ==> Thêm 1 màu mới vào
Colors, tô màu đó cho v
i
End.
Ví dụ :
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 18

Đồ thị bắt đầu tại đỉnh A. Các đỉnh lân cận chưa tô màu, và tập
màu == NULL nên ta thực hiện bước 2.3, thêm 1 màu mới vào
Colors và tô màu đó cho A.
Tương tự với B và C, tập màu lúc này có 1 phần tử nhưng do màu
này đã được tô cho A: là đỉnh có chung cạnh B,C, nêu với mỗi B và
C, ta thêm vào Colors 1 màu mới và gán màu đó cho B,C.
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 19
Tại D, tập màu ban đầu có 3 phần tử, sau khi loại ra 2 màu đã
được tô ở 2 đỉnh kề B và C, ta tô màu còn lại cho D.
Thực hiện tương tự với E,F,G, ta được đồ thị sau khi tô màu sử
dụng phương pháp Greedy như sau:
Với mỗi lần lặp tăng i, độ phức tạp của bài toán phụ thuộc vào bậc
degree(v
i
) của v
i
, do đó, độ phức tạp của giải thuật được tính bằng , và
hàm trên tỉ lệ với O(n). Giải thuật Greedy thực hiện đúng yêu cần của
bài toán đồ thị với thời gian xử lý khá tốt, tuy nhiên, nó lại cho kết quả
không thực sự tốt.
Ví dụ:
Cho đồ thị G(V,G) như sau:
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 20
Với k = 3. Áp dụng thuật toán tham lam vừa trình bày, ta được
thực hiện cho kết quả X(G) = 3 như sau:
Tuy nhiên, sắc số của đồ thị G là X(G) = 2 nếu như ta tô màu như
sau:
Giải thuật tham lam cải tiến được thực hiện tương tự như ban đầu, tuy

nhiên, sau khi tô màu cho 1 đỉnh, ta tạm thời loại bỏ đỉnh đó ra khỏi đồ
thị và tiếp tục thực hiện với các đỉnh tiếp theo.
Cải tiến giải thuật tham lam: Với giải thuật tham lam cải tiến, còn
được gọi là phương pháp Largest Degree First, các đỉnh được sắp
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 21
xếp theo bậc từ cao xuống thấp, quá trình tô màu được thực hiện
bằng cách chọn đỉnh có bậc cao nhất, gán cho màu được tô ít nhất
không xung đột.
Với giải thuật này, số màu sử dụng để tô đồ thị sẽ ít hơn so với giải
thuật tham lam ban đầu, tuy nhiên độ phức tạp cao hơn do tốn chi
phí sắp xếp các đỉnh và tính bậc các đỉnh của đồ thị, nhưng vẫn ở
mức chấp nhận được.
IV. PHÂN TÍCH THUẬT TOÁN
Sử dụng phương pháp vét cạn cho đồ thị chắc chắn sẽ cho
được một lời giải tối ưu, tuy nhiên, ta phải trả một giá khá đắt bởi
độ phức tạp cao của phương pháp này. Thực tế cho thấy, phương
pháp vét cạn cho tô màu đồ thị chỉ phù hợp cho những đồ thị đơn
giải với kích thước nhỏ. Một phương pháp khá quen thuộc và hiệu
quả là phương pháp tham lam. Chúng tôi sử dụng phương pháp
tham lam cùng một số heuristic để giải quyết bài toán.
Giải thuật tha lam cho bài toán tô màu đô thị xem xét các
đỉnh theo một thứ tự cụ thể và tô cho một màu x trong tập những
màu sẵn có sao cho x chưa được tô cho bất cứ đỉnh kề nào của ;
trong trường hợp tất cả những màu sẵn có đề được các đỉnh kề của
sử dụng, ta tô bằng một màu mới. Mức độ tối ưu của việc tô màu
phụ thuộc vào chiến lược lựa chọn sắp xếp thứ tự cho các đỉnh.
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 22
Giải thuật tô màu đồ thị theo phương pháp tham lam cho kết quả khác

nhau khi sử dụng các chiến lược các đỉnh khác nhau.
Với mỗi đồ thị, luôn tồn tại một cách sắp xếp các đỉnh mà nhờ đó,
việc tô màu bằng phương pháp tham lam cho được lời giải tối ưu
(sắc số của đồ thị là nhỏ nhất). Hai phương pháp sắp xếp các
đỉnh thường được sử dụng là :
− Chiến lược sắp xếp tĩnh : dựa trên bậc của đỉnh, số màu cần
thiết để tô cho đồ thị trong trường hợp xấu nhấu là
Max(degree) + 1, trong đó Max(degree) là bậc cao nhất của
các đỉnh.
− Chiến lược sắp xếp động : với chiến lược này, bậc của một
đỉnh được định nghĩa bằng số các đỉnh kề nó mà chưa được
tô màu, nếu đỉnh đã được tô màu thi bậc của nó là -1. Cứ sau
mỗi lần tô màu cho một đỉnh, ta cần cập nhật lại bậc và sắp
xếp lại các đỉnh. Quá trinh sắp xếp các đỉnh diễn ra trong
từng bước tô màu nên nó được gọi là chiến lược sắp xếp
động. Chiến lược này sử dụng nguyên lý thứ tự nên còn được
gọi là giải thuật tô màu tuần tự (Squential Coloring
Algorithm). Chúng tôi lựa chọn giải thuật này để cài đặt
chương trình.
V. HIỆU CHỈNH, NÂNG CAO THUẬT TOÁN
Với những phân tích và nhận định ở phần (III), ta tiến hành
cải thiện nâng cao thuật toán tô màu đồ thị sử dụng chiến lược sắp
xếp động. Thuật toán tô màu đồ thị khi đó được trình bày như sau:
Input : Đồ thị G = (V,E).
Output : Đồ thị G = (V,E) có các đỉnh đã được gán màu.
Bước 0 :
i := 0;
k : = 1
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 23

Lập danh sách các đỉnh của đồ thị E’ = [v1, v2, ,vn];
Bước 1 :
If(E’ = {} or k = n) then Stop, đồ thị được tô bằng i
màu.
Else
Sắp xếp E’ theo thứ tự bậc giảm dần : degree(v1)
degree(v2) … degree(vn)
Bước 2 :
S := đỉnh đầu tiên trong danh sách;
n:=n+1;
For(int j:=0; j< i; j++)
if( màu j chưa được dùng bởi bất kì đỉnh nào kề S)
then
{
tô màu j cho S;
IsColored(S) := true;
}
Bước 4 :
If( !IsColored(S)) then
{
i := i + 1;
tô màu i cho S;
IsColored(S) := true;
}
Bước 5 :
Degree[S] = -1;
Foreach(Node node in Kề(S)]
Degree[node]:= Degree[node] – 1;
Quay lại Bước 1;
VI. ĐÁNH GIÁ & CHỨNG MINH THUẬT TOÁN

Việc đánh giá độ phức tạp của giải thuật tô màu tuần tự
(Squential Coloring Algorithm) phụ thuộc vào hai yếu tố chính là :
phương pháp biểu diễn của đồ thị và giải thuật sắp xếp các đỉnh.
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 24
Ở đây, chúng tôi chọn cách biểu diễn đồ thị bằng danh sách
kề và quick-sort để sắp xếp các đỉnh. Trong trường hợp xấu nhất,
đồ thị G = (E,V) là đồ thị đầy đủ, ta có :
+ Thời gian sắp xếp n đỉnh : O(nlogn)
+ Ứng với mỗi lần sắp xếp, ta cần duyệt qua i màu sẵn có
để thử tô cho. Quá trình tô màu cho S kết thúc bằng
việc tô cho S bằng một màu mới. Quá trình này cần O(i)
thời gian.
+ Việc cập nhật lại bậc của các đỉnh tốn O(n) thời gian.
Quá trình trình trên thực hiện n lần. Do đó, độ phức tạp của giải
thuật được tính :
Như vậy, độ phức tạp của giải thuật trong trường hợp tồi tệ nhất là
− Tính dừng : Giải thuật tô màu đồ thị dừng khi tất cả các đỉnh
trong đồ thị được tô màu hoặc đồ thị không có đỉnh nào.
− Tính đúng : Trong một số ít các trường hợp, giải thuật tô màu
đồ thị nêu trên không cho được lời giải tối ưu. Tuy nhiên, lời
giải của nó thường rất tốt và chấp nhận được. Tốc độ thực
hiện nhanh chóng là một ưu thế lớn của giải thuật.
− Đánh giá chung :
+ Độ phức tạp chính của thuật toán chủ yếu nằm ở thao
tác sắp xếp các đỉnh để tìm được đỉnh có bậc cao nhất
hiện tại. Ta có thể cải tiến bước này để giảm độ phức
tạp của giải thuật.
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ
Trang 25

+ Không cho lời giải tối ưu trong mọi trường hợp, nhưng
lời giải tốt và có thể chấp nhận được.
+ Tốc độ thực hiện nhanh chóng.
+ Là sự kết hợp giữa phương pháp tham lam và quy tắc
heuristic (Largest degree ¨ll recursive).
VII. CÀI ĐẶT CHƯƠNG TRÌNH
Sử dụng thuật toán tô màu đồ thị đã được trình bày ở mục
(III) để xây dựng chương trình.
1. Nền tảng công nghệ:
Chương trình giải bài toán tô màu đồ thị được xây dựng chủ
yếu sử dụng:
− Ngôn ngữ lập trình C#
− IDE lập trình Microsoft Visual Sutdio 2012
− Microsoft XNA 3.1
Chương trình được xây dựng trên nền tảng Microsoft XNA
Framework 3.1 nên ta cần cài đặt thêm Microsoft XNA Framework
Redistributable 3.1 mới có thể chạy được chương trình. Ta có thể
download gói này ở địa chỉ sau: />us/download/details.aspx?id=15163.
2. Giao diện chương trình
Giao diện chương trình gồm:
• Biểu diễn đồ thị vô hướng đọc từ ¨le input.txt. Đồ thị gồm các
node và cạnh nối giữa chúng. Mỗi node có thông tin: tên
node và bậc của node. Mặt định, tất cả các node trong đồ thị
được tô chung một màu.
GVHD: PGS. TS. Đỗ Văn Nhơn Học viên: Lâm Hàn Vũ

×