Tải bản đầy đủ (.pdf) (64 trang)

Nghiên cứu bài toán tô màu đồ thị và ứng dụng lập lịch thi trong đào tạo theo hệ thống tín chỉ

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 (943.07 KB, 64 trang )

NGUYỄN VĂN LƯỢNG

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2


NGUYỄN VĂN LƯỢNG

LUẬN VĂN THẠC SĨ MÁY TÍNH

NGHIÊN CỨU BÀI TOÁN TÔ MÀU ĐỒ THỊ
VÀ ỨNG DỤNG LẬP LỊCH THI TRONG ĐÀO TẠO
THEO HỆ THỐNG TÍN CHỈ

LUẬN VĂN THẠC SĨ MÁY TÍNH

KHÓA 2011 - 2013

HÀ NỘI, 2013


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2

NGUYỄN VĂN LƯỢNG

NGHIÊN CỨU BÀI TOÁN TÔ MÀU ĐỒ THỊ
VÀ ỨNG DỤNG LẬP LỊCH THI TRONG ĐÀO TẠO
THEO HỆ THỐNG TÍN CHỈ

Chuyên ngành: Khoa học máy tính


Mã số: 60 48 01 01

LUẬN VĂN THẠC SĨ MÁY TÍNH

Người hướng dẫn khoa học: PGS. TS Lê Huy Thập

HÀ NỘI, 2013


LỜI CẢM ƠN
Trước tiên, em xin gửi lời cảm ơn và lòng biết ơn sâu sắc nhất tới thầy
giáo PGS. TS Lê Huy Thập, người đã luôn động viên, tận tình hướng dẫn và
giúp đỡ em rất nhiều về kiến thức, kinh nghiệm trong quá trình thực hiện đề tài.
Em xin chân thành cảm ơn các thầy cô phòng Sau Đại học, các thầy cô
khoa Công nghệ thông tin, các thầy cô thuộc Viện Công nghệ Thông tin Viện
Khoa học và Công nghệ Việt Nam, cũng như tất cả các thầy cô Trường Đại
học Sư phạm Hà Nội 2 đã tạo điều kiện và truyền đạt những kiến thức quý
báu cho em trong suốt quá trình học tập.
Xin chân thành cảm ơn các anh, các chị và các bạn học viên lớp Cao học
K15KHMT- trường Đại học sư phạm Hà Nội 2 đã luôn động viên, giúp đỡ,
nhiệt tình chia sẻ những kinh nghiệm học tập và công tác trong suốt khoá học.
Mặc dù rất cố gắng, song luận văn này không thể tránh khỏi những
thiếu sót, kính mong được sự chỉ dẫn của các quý thầy cô và các bạn.

Hà Nội, tháng 12 năm 2013
Tác giả

Nguyễn Văn Lượng



LỜI CAM ĐOAN
Tôi xin cam đoan rằng số liệu và kết quả nghiên cứu trong luận văn này
là trung thực và không trùng lặp với các đề tài khác. Tôi cũng xin cam đoan
rằng mọi sự giúp đỡ cho việc thực hiện luận văn này đã được cảm ơn và các
thông tin trích dẫn trong luận văn đã được chỉ rõ nguồn gốc.

Hà Nội, tháng 12 năm 2013
Tác giả

Nguyễn Văn Lượng


MỤC LỤC
MỞ ĐẦU........................................................................................................... 1
Chương 1: CƠ SỞ LÝ THUYẾT...................................................................... 4
1.1. Tổng quan đơn đồ thị vô hướng hữu hạn................................................... 4
1.1.1. Đơn đồ thị vô hướng liên thông ....................................................... 4
1.1.2. Đồ thị phẳng ..................................................................................... 5
1.1.3. Đồ thị vô hướng con đầy đủ và màu đồ thị...................................... 6
1.2. Giới thiệu các thuật toán tô màu .............................................................. 11
1.2.1. Thuật toán thu gọn (hòa nhập) đỉnh (Contraction Algorithm)....... 11
1.2.2. Thuật toán tô màu tuần tự (Sequential Coloring) .......................... 14
1.2.3. Thuật toán duyệt theo chiều sâu có chặn nhánh............................. 19
1.2.4. Thuật toán tham lam (Greedy Coloring)........................................ 20
1.3. Giới thiệu các phương pháp lập lịch thi................................................... 22
1.3.1. Các phương pháp thông thường ..................................................... 22
1.3.2. Phương pháp lập lịch thi dựa vào tô màu đồ thị ............................ 22
1.4. Kết luận chương ....................................................................................... 26
Chương 2: ỨNG DỤNG LÝ THUYẾT ĐỒ THỊ VÀO LẬP LỊCH THI....... 27
2.1. Ma trận liền kề ......................................................................................... 27

2.2. Xác định đồ thị con đầy đủ dựa vào ma trận liền kề................................ 29
2.3. Tô màu đồ thị dựa vào ma trận liền kề .................................................... 34
2.3.1. Thuật toán sắp xếp đỉnh của đơn đồ thị ......................................... 34
2.3.2. Thuật toán tô màu đơn đồ thị với ma trận liền kề .......................... 35
2.4. Lập lịch thi ............................................................................................... 37
2.4.1. Đặt vấn đề....................................................................................... 37
2.4.2. Bài toán lập lịch thi theo hệ thống tín chỉ ...................................... 37
2.5. Kết luận chương ....................................................................................... 48


Chương 3: XÂY DỰNG ỨNG DỤNG LẬP LỊCH THI TRONG ĐÀO TẠO
THEO HỆ THỐNG TÍN CHỈ ......................................................................... 49
3.1. Ứng dụng lập lịch thi tại Trường Đại học Sư phạm Hà Nội 2................. 49
3.1.1. Phân tích, thiết kế bằng UML ........................................................ 49
3.1.2. Các chức năng của chương trình.................................................... 50
KẾT LUẬN ..................................................................................................... 56
TÀI LIỆU THAM KHẢO............................................................................... 57


DANH MỤC TỪ VIẾT TẮT

RLF

Recursive - Largest - First

LF

Largest First

DSATUR


Degree of Saturation

BSC

Backtracking Sequential Coloring


1

MỞ ĐẦU
1. Lý do chọn đề tài
Lập lịch biểu là việc không thể thiếu ở bất kì tổ chức nào hoạt động
trong xã hội loài người. Từ ngàn xưa, con người đã thực hiện việc lập kế
hoạch bằng cách ghi chép bằng tay các kí hiệu hay số liệu, thông tin trên vách
đá, trên tre, trên vải và trên giấy, … có thể gọi chung là trên sổ sách.
Ngày nay, cùng với tiến bộ xã hội, khoa học máy tính đã có những
bước tiến dài, đem lại sự tiện lợi và hiệu quả kinh tế cao trong rất nhiều lĩnh
vực từ công nghiệp cho đến đời sống. Việc lập lịch biểu bắt đầu có sự giúp
sức của máy tính, giúp ghi nhớ các số liệu lớn một cách dễ dàng và thuận lợi
hơn so với ghi chép bằng tay trên sổ sách, nhất là khi vận chuyển. Nhiều phần
mềm máy tính có chức năng hỗ trợ lập lịch như MS.Excel, MS.Project,…
nhưng sự “thiếu thông minh” của chúng vẫn làm cho con người phải tiêu tốn
nhiều thời gian cũng như công sức khi lập lịch. Nhu cầu máy tính thông minh
như con người trở thành bức thiết.
Các kỹ thuật mạnh mẽ của công nghệ tri thức đã sớm cho ra đời những
cỗ máy có trí thông minh nhân tạo dạng hệ chuyên gia như máy chẩn đoán
bệnh, máy dự báo thời tiết, … hoặc dạng hệ tư vấn hỗ trợ con người ra quyết
định trong nhiều tình huống vô cùng hữu ích. Từ đó, những kỹ thuật này cũng
hỗ trợ việc lập lịch biểu trên máy tính trở nên dễ dàng hơn.

Thông thường, tại một trường đại học, nhu cầu có một công cụ hỗ trợ
tự động lập lịch biểu hết sức cần thiết cho hai việc cụ thể: lập lịch giảng dạy
(hay lịch công tác) và lập lịch thi. Tùy vào đặc thù và nhu cầu của mỗi trường
mà các trường đã tự xây dựng công cụ lập lịch thi cho riêng mình, công cụ
này được xây dựng bằng những kỹ thuật khác nhau nhằm đạt kết quả càng
gần với mong muốn càng tốt. Một số kỹ thuật thường được dùng để giải quyết
bài toán lập lịch thi như giải thuật di truyền, leo đồi, luyện thép, … Thế


2

nhưng, qua khảo sát cho thấy khi sử dụng các kỹ thuật trên kết quả của bài
toán vẫn còn nhiều hạn chế. Vì thế, con người vẫn hướng đến một giải pháp
sao cho kết quả bài toán lập lịch thi “tối ưu” hơn nữa.
Đề tài: “Nghiên cứu bài toán tô màu đồ thị và ứng dụng lập lịch thi
trong đào tạo theo hệ thống tín chỉ” tập trung nghiên cứu về lý thuyết đồ thị
mà cụ thể ở đây là bài toán “Tô màu đồ thị”, qua đó tác giả đề xuất một
phương pháp lập lịch thi dựa trên thuật toán tô màu đồ thị.
2. Mục đích nghiên cứu
Nghiên cứu thuật toán tô màu đồ thị.
Ứng dụng xây dựng chương trình lập lịch thi với 2 tiêu chí: phân bổ
đều thời gian sao cho các môn học trong một hệ và các môn thi sử dụng
chung phòng thực hành không thi trùng nhau, thời gian rải đều cho các môn
trong một lớp và trong toàn thời gian.
3. Nhiệm vụ nghiên cứu
Lưu các tham số của đơn đồ thị vô hướng hữu hạn vào cơ sở dữ liệu
quan hệ, tô màu và lập lịch biểu.
4. Đối tượng và phạm vi nghiên cứu
Lý thuyết đồ thị là ngành khoa học được phát triển từ lâu nhưng lại có
nhiều ứng dụng hiện đại. Một đồ thị là một tập hợp các đỉnh và các đường nối

các đỉnh gọi là cạnh (cung). Tô màu đồ thị là phép gán màu cho mỗi đỉnh sao
cho không có hai đỉnh liền kề nhau được gán cùng màu.
Bài toán lập lịch thi được mô hình hóa thành bài toán tô màu đồ thị như
sau: lập đồ thị có các đỉnh là các môn thi, hai môn thi kề nhau nếu có một sinh
viên thi cả hai môn này. Thời điểm thi của mỗi môn được biểu thị bằng các
màu khác nhau.
5. Những đóng góp mới của đề tài
Sự phát triển nhanh chóng của giáo dục song song với sự phát triển
mạnh mẽ của công nghệ thông tin nói chung và đối với Trường Đại học Sư


3

phạm Hà Nội 2 nói riêng, đề tài nguyên cứu của tác giả giúp phần tin học hóa
công tác đào tạo cụ thể là công tác lập lịch thi của các khoa.
Hiện nay các khoa Trường Đại học Sư phạm Hà Nội 2 vẫn còn lập lịch
thi thủ công, Trợ lý giáo vụ khoa xếp bằng tay trên file dữ liệu excel hoặc
word. Với đề tài của tác giả nghiên cứu sẽ thích hợp với thực tiễn sử dụng
của Trường Đại học Sư phạm Hà Nội 2.
6. Phương pháp nghiên cứu
Nghiên cứu tài liệu, tìm hiểu các thông tin trên Internet về các phương
pháp lập lịch biểu.
Nghiên cứu về các thuật toán tô màu.
Ứng dụng lý thuyết tô màu đồ thị vào việc lập lịch biểu, xây dựng
chương trình demo.


4

Chương 1: CƠ SỞ LÝ THUYẾT

1.1. Tổng quan đơn đồ thị vô hướng hữu hạn
1.1.1. Đơn đồ thị vô hướng liên thông
Định nghĩa:
Đơn đồ thị hữu hạn vô hướng được kí hiệu là G =(V,E) trong đó:
i) V là tập hợp khác rỗng mà các phần tử của nó gọi là đỉnh của G và
card(V) = n .
ii) E là tập các cặp (u,v) hai phần tử phân biệt không có thứ tự của E
được gọi là cạnh của G. Cạnh của E được kí hiệu là e = (u, v) hoặc e = uv.
Mỗi cặp đỉnh có nhiều nhất một cạnh.
 Một số khái niệm và tính chất cơ bản:
Bậc của đỉnh: Đồ thị vô hướng G=(V,E). Bậc của đỉnh v, ký hiệu là
deg(v), là số cạnh kề với v, trong đó một khuyên tại một đỉnh được đếm hai
lần cho bậc của đỉnh ấy.
Định lý:
Cho đơn đồ thị G=(V,E), m là số cạnh (cung).
1) 2m  vV deg(v)
2) Số đỉnh bậc lẻ của đồ thị là số chẵn
Đẳng cấu: Cho hai đơn đồ thị G=(V,E) và G’=(V’,E’). Ta nói rằng G
đẳng cấu G’, ký hiệu G  G’, nếu tồn tại song ánh f: V V’ sao cho:
uv là cạnh của G  f(u)f(v) là cạnh của G’.
Nếu G và G’ là các đơn đồ thị vô hướng đẳng cấu qua ánh xạ f thì
chúng có: Cùng số đỉnh, cùng số cạnh, cùng số đỉnh với bậc cho sẵn và
deg(v)=deg(f(v)).
Đồ thị con:
 G’ được gọi là đồ thị con của G, ký hiệu G’ ≤ G nếu V’  V và E’  E.
 Nếu V’=V và E’ E thì G’ được gọi là đồ thị con khung của G.


5


Liên thông: Đồ thị G=(V,E) được gọi là liên thông nếu có đường đi
giữa mọi cặp đỉnh u, v bất kỳ trong G.
1.1.2. Đồ thị phẳng
Định nghĩa 1: Một đồ thị được gọi là phẳng nếu nó có thể vẽ được trên
một mặt phẳng mà không có các cạnh nào cắt nhau (ở một điểm không phải là
điểm mút của các cạnh). Hình vẽ như thế gọi là một biểu diễn phẳng của đồ
thị.
Thí dụ 1:
1) Một cây, một chu trình đơn là một đồ thị phẳng.
2) K4 là đồ thị phẳng bởi vì có thể vẽ lại như hình bên không có đường
cắt nhau:

3) Xét đồ thị G như trong hình dưới đây. Có thể biểu diễn G một cách
khác như trong hình bên phải, trong đó bất kỳ hai cạnh nào cũng không cắt
nhau.

4) Đồ thị đầy đủ K5 là một thí dụ về đồ thị không phẳng.
Định nghĩa 2: Cho G là một đồ thị phẳng. Mỗi phần mặt phẳng giới hạn
bởi một chu trình đơn không chứa bên trong nó một chu trình đơn khác, gọi
là một miền (hữu hạn) của đồ thị G. Chu trình giới hạn miền là biên của miền.


6

Mỗi đồ thị phẳng liên thông có một miền vô hạn duy nhất (là phần mặt phẳng
bên ngoài tất cả các miền hữu hạn). Số cạnh ít nhất tạo thành biên gọi là đai
của G; trường hợp nếu G không có chu trình thì đai chính là số cạnh của G.
Thí dụ 2:
1) Một cây chỉ có một miền, đó là miền vô hạn.
2) Đồ thị phẳng ở hình dưới có 5 miền, M5 là miền vô hạn, miền M1 có

biên abgfa, miền M2 có biên là bcdhgb, … Chu trình đơn abcdhgfa không
giới hạn một miền vì chứa bên trong nó chu trình đơn khác là abgfa.

Định lý (Euler, 1752): Nếu một đồ thị phẳng liên thông có n đỉnh, p
cạnh và d miền thì ta có hệ thức:
n  p + d = 2.
Chứng minh: xem [2, 3, 4, 6].
Hệ quả: Trong một đồ thị phẳng liên thông tuỳ ý, luôn tồn tại ít nhất
một đỉnh có bậc không vượt quá 5.
Chứng minh: xem [5].
1.1.3. Đồ thị vô hướng con đầy đủ và màu đồ thị
Đồ thị đầy đủ n đỉnh, ký hiệu là Kn, là đơn đồ thị vô hướng mà giữa hai
đỉnh bất kỳ của nó luôn có cạnh nối. Đồ thị Kn có tất cả n(n-1)/2 cạnh. Nó là
đơn đồ thị có nhiều cạnh nhất, đồng thời là đồ thị chính quy bậc n-1.


7

Ví dụ:

Đồ thị đầy đủ K7
Một đơn đồ thị vô hướng G là môt cặp (V,E) với V là một tập các đỉnh
và E là một tập các cạnh của đồ thị G, trong đó u là một đỉnh liền kề v nếu và
chỉ nếu {u,v} là một cạnh trong E.
Đồ thị vô hướng con đầy đủ của G là một đồ thị vô hướng có tập đỉnh
C  V sao cho mỗi cặp đỉnh trong C là kề nhau ở trong G. Bài toán xác định
đồ thị vô hướng con đầy đủ là bài toán thuộc lớp NP- đầy đủ.
Màu của đồ thị G (hay còn gọi là sắc số của đồ thị G) là số màu ít nhất
(G) cần thiết để tô màu các đỉnh của G sao cho các đỉnh kề nhau được tô bởi
các màu khác nhau.

Ví dụ:
Cho đơn đồ thị vô hướng G dưới đây:

Ta thấy rằng 4 đỉnh b, d, g, e đôi một kề nhau nên phải được tô bằng 4
màu khác nhau. Do đó χ(G) ≥ 4. Ngoài ra, có thể dùng 4 màu đánh số 1, 2, 3,
4 để tô màu G như sau:


8

Như vậy χ(G) = 4.
 Màu (sắc số) của một số đơn đồ thị vô hướng đặc biệt:
Đồ thị G
Đồ thị đầy đủ Kn
Đồ thị vòng Cn
Đồ thị bánh xe Wn
Đồ thị hình sao Sn
Đồ thị hình cây Tn
Ví dụ:

χ(K6) = 6

χ(S9) = 2

Màu của đồ thị χ(G)
χ(Kn) = n
χ(Cn) = 2 với n – chẵn
χ(Cn) = 3 với n – lẻ
χ(Wn) = 4 với n – chẵn
χ(Wn) = 3 với n – lẻ

χ(Sn) = 2
χ(Tn) = 1

χ(C6) = 2

χ(W7) = 3

χ(C7) = 2

χ(W8) = 3


9

 Một số định lý và mệnh đề về màu (sắc số) đồ thị:
Định lý 1: Nếu đồ thị G chứa một đồ thị con đẳng cấu với đồ thị đầy đủ
Kn thì χ(G) ≥ n.
Chứng minh: xem [5]
Định lý 2: Nếu đơn đồ thị G không chứa chu trình độ dài lẻ thì χ(G) =2.
Chứng minh: xem [5]
Định lý 3: Với mỗi số nguyên dương n, tồn tại một đồ thị không chứa
K3 và có sắc số bằng n.
Chứng minh: xem [5]
Định lý 4:
Nếu mọi đỉnh của đồ thị G có bậc không lớn hơn k thì χ(G) ≤ k+1.
Chứng minh: xem [5]
Định lý 5: Với một đồ thị G bất kỳ, ta có thể tìm được một cách phân
hoạch V(G)= V1  V2 (V1, V2 ≠ ) sao cho χ(G[V1]) + χ(G[V2])= χ(G).
Định lý 6: Nếu G là đồ thị không đầy đủ, ta có thể tìm được một cách
phân hoạch V(G)= V1  V2 (V1, V2 ≠ ) sao cho χ(G[V1]) + χ(G[V2]) > χ(G).

Định lý 7: Giả sử |V(G)|=n và V(G) có một phân hoạch {V1,V2, …, Vk}
sao cho ( 1≤ i khi đó χ(G) ≤ n-k+1.
Định lý 8: Nếu G là đơn đồ thị n đỉnh, khi đó ta có χ(
và χ(

) + χ( ) ≤ n+1

). χ( ) ≥ n.
Định lý 9: (Định lý 5 màu của Kempe-Heawood): Mọi đồ thị phẳng

đều có thể tô đúng bằng 5 màu.
Chứng minh: xem [5]
Định lý 10: (Định lý 4 màu của Appel-Haken): Mọi đồ thị phẳng đều
có thể tô đúng bằng 4 màu.


10

Định lý Bốn màu đầu tiên được đưa ra như một phỏng đoán vào năm
1850 bởi một sinh viên người Anh tên là F. Guthrie và cuối cùng đã được hai
nhà toán học Mỹ là Kenneth Appel và Wolfgang Haken chứng minh vào năm
1976. Trước năm 1976 cũng đã có nhiều chứng minh sai, mà thông thường rất
khó tìm thấy chỗ sai, đã được công bố. Hơn thế nữa đã có nhiều cố gắng một
cách vô ích để tìm phản thí dụ bằng cách cố vẽ bản đồ cần hơn bốn màu để tô
nó.
Có lẽ một trong những chứng minh sai nổi tiếng nhất trong toán học là
chứng minh sai “bài toán bốn màu” được công bố năm 1879 bởi luật sư, nhà
toán học nghiệp dư Luân Đôn tên là Alfred Kempe. Nhờ công bố lời giải của
“bài toán bốn màu”, Kempe được công nhận là hội viên Hội Khoa học Hoàng

gia Anh. Các nhà toán học chấp nhận cách chứng minh của ông ta cho tới
1890, khi Percy Heawood phát hiện ra sai lầm trong chứng minh của Kempe.
Mặt khác, dùng phương pháp của Kempe, Heawood đã chứng minh được “bài
toán năm màu” (tức là mọi bản đồ có thể tô đúng bằng 5 màu).
Như vậy, Heawood mới giải được “bài toán năm màu”, còn “bài toán
bốn màu” vẫn còn đó và là một thách đố đối với các nhà toán học trong suốt
gần một thế kỷ. Việc tìm lời giải của “bài toán bốn màu” đã ảnh hưởng đến sự
phát triển theo chiều hướng khác nhau của lý thuyết đồ thị.
Mãi đến năm 1976, khai thác phương pháp của Kempe và nhờ công cụ
máy tính điện tử, Appel và Haken đã tìm ra lời giải của “bài toán bốn màu”.
Chứng minh của họ dựa trên sự phân tích từng trường hợp một cách cẩn thận
nhờ máy tính. Họ đã chỉ ra rằng nếu “bài toán bốn màu” là sai thì sẽ có một
phản thí dụ thuộc một trong gần 2000 loại khác nhau và đã chỉ ra không có
loại nào dẫn tới phản thí dụ cả. Trong chứng minh của mình họ đã dùng hơn
1000 giờ máy. Cách chứng minh này đã gây ra nhiều cuộc tranh cãi vì máy
tính đã đóng vai trò quan trọng biết bao. Chẳng hạn, liệu có thể có sai lầm


11

trong chương trình và điều đó dẫn tới kết quả sai không? Lý luận của họ có
thực sự là một chứng minh hay không, nếu nó phụ thuộc vào thông tin ra từ
một máy tính không đáng tin cậy?
1.2. Giới thiệu các thuật toán tô màu
Một cách tô màu các đỉnh của đồ thị G=(V, E) là một ánh xạ F: Vℕ,
trong đó các đỉnh kề nhau được tô bởi các màu khác nhau trong ℕ (ℕ là tập
hợp các số nguyên không âm), tức là nếu uv  E thì F(u) ≠ F(v). Sắc số χ(

)


là số màu ít nhất cần thiết cho một cách tô màu đồ thị G. Đồ thị G có sắc số k
)=k, và G có thể tô bởi k màu nếu χ(

nếu χ(

) ≤ k. Một lớp màu của một

cách tô màu F chứa tất cả các đỉnh cùng màu. Các lớp màu của F là một phân
hoạch của tập đỉnh V thành các tập con độc lập trong đó các đỉnh của nó
không kề nhau.
1.2.1. Thuật toán thu gọn (hòa nhập) đỉnh (Contraction Algorithm)
Thuật toán này dựa trên một định lý của Zykov. Với các đỉnh x và y
không kề nhau bất kỳ, chúng ta định nghĩa đồ thị G/x,y là một đồ thị thu được
từ G bằng cách hợp nhất y và x thành một đỉnh, tức là ta xóa đỉnh y đi và nối x
với tất cả các đỉnh kề với y trước đó. G+xy là đồ thị thu được từ G bằng cách
thêm vào cạnh xy.
Định lý 1: χ(

) = min{ χ(

), χ(

)} với x, y là hai đỉnh không

kề nhau.
Chứng minh: Gọi C(G) là tập các phép tô màu của G và |F| là số màu
được sử dụng bởi FC(G). Khi đó ta có:
χ(

) = min { |F|: FC(G) }

= min { min { |F|: F(x) = F(y), min { |F|: F(x) ≠ F(y) }}


12

= min { χ(

), χ(

+xy) }.

Bằng cách áp dụng nhiều lần định lý 1, đồ thị G trở thành gốc của cây
nhị phân có các nút là các đồ thị, gọi là cây Zykov. Cấu trúc của cây Zykov
hoàn chỉnh khi ta không tìm được thêm một cách thu gọn G theo định lý 1.
Khi đó các lá của cây Zykov là các đồ thị đầy đủ Gi= (Vi , Ei). Định lý 1 cho
ta χ(
tìm χ(

) = min |Vi |. Đây là cơ sở của thuật toán Corneil - Graham sử dụng để
). Thuật toán sử dụng phép tìm kiếm theo chiều sâu trên cây Zykov.

Mặc dù có một vài kỹ thuật chọn lọc được đưa vào thuật toán này, tuy nhiên
nó vẫn kém hiệu quả hơn thuật toán quay lui tuần tự trong mục 1.2.2.
Cây Zykov ở trên không phải là duy nhất. Nó phụ thuộc vào việc lựa
chọn các cặp đỉnh x và y. Mỗi cây Zykov có đúng một nhánh được sinh ra duy
nhất bởi việc thu gọn các đỉnh không liền kề. Gọi GC là đồ thị đầy đủ ở vị trí
cuối cùng của nhánh này (nút lá). Số lượng các đỉnh |V(GC)| của đồ thị này là
cận trên của χ(

). Vậy một cận trên càng tốt khi mà nhánh tới GC càng dài.


Do đó, một chiến lược tốt cho việc lựa chọn các cặp đỉnh không kề nhau x, y
được thu gọn đó là làm sao cho số cặp đỉnh không kề nhau là nhiều nhất có
thể. Gọi cn(x,y) là số lượng các đỉnh chung kề với cả x và y. Khi đó ta có
|E(G)| - |E(G/x,y)|= cn(x,y). Trong thuật toán Brigham - Dutton, các đỉnh
không kề nhau với số lượng các đỉnh kề chung lớn nhất được thu gọn (hợp
thành một đỉnh) cho tới khi ta thu được một đồ thị đầy đủ.
Một thuật toán hiệu quả hơn và cho kết quả tốt hơn thuật toán Brigham
- Dutton đó là thuật toán RLF (Recursive - Largest - First) của Leighton. Ở
đây, x là một đỉnh cố định có bậc lớn nhất. Một đỉnh y không kề x có số đỉnh
kề chung với x là lớn nhất sẽ được chọn để hòa nhập với x cho tới khi x kề với
tất cả các đỉnh khác (tạo thành một đồ thị con đầy đủ). Để tăng tính hiệu quả
của thuật toán, sau bước này x sẽ được loại bỏ và một đỉnh mới với bậc lớn


13

nhất trong đồ thị còn lại sẽ được chọn. Đỉnh x và tất cả các đỉnh hòa nhập với
x sẽ tạo thành một lớp màu. Nếu x có đỉnh không kề nó và các đỉnh này không
có đỉnh kề chung với x, khi đó đồ thị sẽ không thể thu gọn được thêm nữa và
x sẽ kề với tất cả các đỉnh trong đồ thị con chứa nó. Trong trường hợp xấu
nhất, độ phức tạp của thuật toán RLF là O(|V3|).
Dưới đây là chương trình giả mã cho thuật toán RLF:
Cho một đồ thị G=(V,E) với tập đỉnh V=V(G) và tập cạnh E. Yêu cầu
của bài toán là trả về một phép tô màu F: V  ℕ.
Algorithm RLF:
colornumber=0; // Số lượng các màu được sử dụng để tô G
while (|V(G)| > 0) {
x= đỉnh có bậc lớn nhất trong G;
colornumber = colornumber+1;

F(x)=colornumber;
NN= tập hợp các đỉnh không kề với x;
while (|NN| > 0) { // tìm đỉnh y  NN để có thể thu gọn với x
maxcn= -1; // số đỉnh kề chung với x lớn nhất
ydegree= -1; // bậc của đỉnh y cần tìm.
for mọi đỉnh z  NN {
cn= số lượng đỉnh kề chung của z và x;
if (cn> maxcn or (cn==maxcn and bậc của z < ydegree)) {
y=z;
ydegree = bậc của đỉnh y;
maxcn=cn;
}
}
if (maxcn==0) { // trường hợp không thể thu gọn thêm


14

y= đỉnh có bậc lớn nhất trong NN;
}
F(y) = colornumber;
hòa nhập y và x thành một đỉnh;
cập nhật lại tập hợp NN – các đỉnh không kề với x;
}
G = G – x; // loại bỏ x khỏi G
}
return F.
1.2.2. Thuật toán tô màu tuần tự (Sequential Coloring)
Một trong những phương pháp tô màu đơn giản nhất đó là phương pháp
tô màu tuần tự dựa trên một tập đỉnh O=[ a0, a1, …,an-1] đã được sắp thứ tự:

F(a0)=1.
Nếu a1, …,ai-1 (i ≥ 1) đã được tô màu, đặt F(ai) là màu nhỏ nhất chưa
được dùng bởi các đỉnh kề với ai.
Thuật toán LF (Largest First) dựa trên cách sắp xếp các đỉnh của đồ thị
G theo thứ tự giảm dần về bậc. Nó có độ phức tạp O(|V|2). Tư tưởng chính của
thuật toán như sau:
Algorithm LF:
Sắp xếp các đỉnh trong V theo thứ tự giảm dần về bậc: a[0], …,a[n-1];
optColorNumber=1; // Khởi tạo số màu tối ưu cần sử dụng
while ( |V| >0) { // lặp cho đến khi tất cả các màu được tô
x=a[0]; // xét đỉnh đầu tiên trong danh sách V
F(x) = optColorNumber; // tô màu optColorNumber cho đỉnh x
for ( i=1; i< |V|; i++) {
if (a[i] không kề với x) {


15

F(a[i])=optColorNumber; // tô màu optColorNumber cho
các đỉnh không kề với đỉnh x
}
}
Loại khỏi V tất cả các đỉnh đã được tô màu;
Cập nhật lại các đỉnh trong V theo thứ tự bậc giảm dần;
optColorNumber= optColorNumber +1; //tăng số mŕu cần tô lęn 1
}
return F. // trả về phép tô màu tối ưu
Thuật toán DSATUR (Degree of Saturation) của Brèlaz là thuật toán tô
màu tuần tự trong đó các đỉnh được sắp xếp động sau mỗi bước của thuật
toán. Giả sử F là một phép tô màu bộ phận các đỉnh của G. Bậc bão hòa của

đỉnh x, degs(x) là số lượng các màu khác nhau ở các đỉnh kề với x. DSATUR
bắt đầu bằng việc gán màu 1 cho một đỉnh có bậc lớn nhất. Đỉnh được tô tiếp
theo trong phương pháp này là đỉnh x với bậc degs(x) lớn nhất. Độ phức tạp
của thuật toán DSATUR là O(|V|3).
Định nghĩa 1: Phép tô màu F1, F2 của G=(V,E) được gọi là tương
đương khi chúng tạo ra cùng một cách phân hoạch tập đỉnh V vào các lớp
màu.
Định nghĩa 2: Một phép tô màu F các đỉnh a0, a1, …,an-1 của đồ thị G
được gọi là chặt (sát) với thứ tự đã cho nếu:
F(ai) ≤ colors(i-1) +1 với mọi i =0, 1,…., n-1, trong đó colors(j) là số
màu khác nhau tại các đỉnh a0,…,aj. colors(-1)=0.
Một thuật toán tô màu tuần tự sử dụng quay lui (Backtracking
Sequential Coloring - BSC), trả về giá trị chính xác của χ(

), lần đầu tiên

được đề xuất bởi Brown. Rất nhiều các nhánh của cây tìm kiếm có thể bị loại
bỏ bởi định lý dưới đây.


16

Định lý 2: Mọi phép tô màu F: Vℕ của các đỉnh a0, a1, …,an-1 của đồ
thị G=(V,E) là tương đương với một phép tô màu chặt (sát) với thứ tự đã cho
của các đỉnh.
Chứng minh: Xem [5]
Thuật toán gốc của Brown được cải tiến bởi Brèlaz. Các đỉnh của đồ thị
được lưu trữ trong một mảng A. Ban đầu chúng được sắp xếp theo thứ tự
giảm dần về bậc. Thứ tự này được thay đổi động trong quá trình thực hiện
thuật toán. Giả sử A[0], …, A[i-1] đã được tô màu. Số lượng các màu khác

nhau được sử dụng tại các đỉnh này là colors(i-1) = li. Tập các màu chưa được
sử dụng (có thể tô) tại x=A[i], U= freeColors(x), là tập con của tập {1, 2, …,
li+1} mà chưa được sử dụng trong các đỉnh kề với đỉnh x. Nếu một cận trên
optColorNumber, χ(

) ≤ optColorNumber được thiết lập bởi một phép tô

màu F, khi đó tất cả các màu ≥ optColorNumber có thể loại bỏ khỏi U. Đỉnh
được tô tiếp theo giống như trong thuật toán DSATUR, tức là đỉnh có bậc bão
hòa lớn nhất. Nó sẽ được tô với màu nhỏ nhất trong U. Nếu U rỗng, ta sẽ thực
hiện việc quay lui. Dưới đây là thuật toán giả mã:
Algorithm BSC:
Sắp xếp các đỉnh A=[ a0, …,an-1] theo thứ tự giảm dần về bậc.
start=0;// chỉ số đỉnh xuất phát
optColorNumber=|V|+1;// số màu tối ưu cần sử dụng để tô G
x=A[0]; // đỉnh đầu tiên được tô màu
colors(-1) =0; // colors(j) = số màu được sử dụng để tô A[0], …,A[j]
U=[1]; // biến sử dụng để lưu tập hợp các màu có thể sử dụng để tô.
freeColors(x) = U;// tập hợp các màu có thể tô cho đỉnh x
while (start ≥ 0) { // x được tô màu trong vòng lặp dưới đây. Ta sẽ sử
dụng quay //lui khi U= hoặc tìm thấy một phép tô màu mới.
back=false; // biến logic sử dụng để kiểm tra việc quay lui


17

for (i = start; i< |V|; i++){
if (i > start){
Tìm một đỉnh x có bậc bão hòa degs(x) lớn nhất chưa được
tô màu;

U= tập tất cả các màu có thể tô cho x, các màu này <
optColorNumber;
Sắp xếp U theo thứ tự tăng dần;
}
if (|U| >0) {
k= U[0]; // chọn màu để tô cho x
F(x)=k; // tô màu cho x
Xóa k khỏi U;
freeColors(x)=U;
l= colors(i-1);
colors(i)= max{k ,l};
}
else { // U=, quay lui
start = i-1;
back=true;
break; // thoát khỏi vòng lặp for
}
}
if ( back ) {
if (start ≥ 0) {
x = A[start]; // xét sang đỉnh tiếp theo
Xóa màu đỉnh x;
U= freeColors(x);


18

}
}
else { //trường hợp kết thúc vòng lặp for ở trên mà không phải lệnh

break
Fopt =F; // lưu phương án tô màu tối ưu hiện tại
optColorNumber =colors ( |V|-1);
i = chỉ số đỉnh nhỏ nhất trong các đỉnh có F(A[i])=optColorNumber;
start= i-1;
if (start < 0){
breack; // thoát khỏi vòng lặp while
}
Xóa toàn bộ màu tô cho các đỉnh A[i] với i ≥ start;
for (i=0; i ≤ start; i++) {
x=A[i];
U= freeColors(x);
Xóa khỏi U tất cả các màu ≥ optColorNumber;
freeColors(x) = U; // phép tô màu hiện tại đã được cải tiến
}// lưu ý; ở đây ta có x = A[start] và U= freeColors(x)
}
}
return Fopt. // trả về phương án tô màu tối ưu.
Ở thuật toán trên ta có thể cải tiến như sau:
Nếu tập các đỉnh A của đồ thị được xuất phát theo thứ tự một đồ thị con
đầy đủ kích thước r là A[0], …, A[r-1], khi đó các đỉnh này sẽ được cố định
các màu 1, …, r. Thuật toán trên có thể dừng khi trong quá trình quay lui gặp
phải một chỉ số xuất phát < r. Một cận dưới lb ≤ χ(

) có thể được thiết lập

bằng cách áp dụng thuật toán BSC cho một đồ thị con chặt của đồ thị G.



×