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
Trang 1BÀ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
Trang 2MỤC LỤ
LỜI NÓI ĐẦU 3
I GIỚI THIỆU BÀI TOÁN 4
1 TỔNG QUAN VỀ ĐỒ THỊ 4
1.1 Khái niệm 4
1.2 Các cách biểu diễn đồ thị 4
2 BÀI TOÁN TÔ MÀU ĐỒ THỊ 6
3 Một số ứng dụng của bài toán tô màu đồ thị 6
3.1 Bài toán lập lịch 6
3.2 Register Allocation 7
3.3 Sắp lịch thi, sắp thời khóa biểu 7
II MÔ HÌNH VẤN ĐỀ 8
1 Phát biểu bài toán 8
2 Một số định nghĩa, tính chất, thuật ngữ 8
2.1 Tô màu đỉnh (Vertex Coloring) 8
2.2 Đa thức màu (Chromatic Polynomial) 9
2.3 Tô màu cạnh 11
2.4 Tô màu toàn bộ 11
2.5 Các tính chất 11
Trang 3IV PHÂN TÍCH THUẬT TOÁN 19
V HIỆU CHỈNH, NÂNG CAO THUẬT TOÁN 20
VI ĐÁNH GIÁ & CHỨNG MINH THUẬT TOÁN 21
VII CÀI ĐẶT CHƯƠNG TRÌNH 22
1 Nền tảng công nghệ: 22
2 Giao diện chương trình 23
TÀI LIỆU THAM KHẢO 26
Trang 4LỜ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ênLâm Hàn Vũ
Trang 5I GIỚI THIỆU BÀI TOÁN
đồ 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ểudiễ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ộtcá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
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
Trang 6khô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ị.
Labeled graph 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ạnhchỉ 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
Biểu diễn đồ thị trên sử dụng danh sách kề
Trang 7a adjacent to b,c
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ảiqua hơn một thế kỷ và tiêu tốn khá nhiều công sức nghiên cứu củacá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 đị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ư
Trang 8chú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ôixin 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ệutrong việc mô hình nhiều dạng bài toán về lập lịch và phân công Bàitoá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ôngviệ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ữngslot 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 đảmbảo thời gian để hoàn thành tất cả các công việc ngắn nhất (dùng ít slotthời gian nhất)
Đồ thị tương ứng để giải quyết bài toán lập lịch được phát biểunhư 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đỉnh tương ứng với hai công việc có đụng độ với nhau thì được nối vớinhau bằng 1 cạnh Sắc số của đồ thị (sẽ được trình bày ở phần II) cũngtương ứng chính là thời gian tối ưu (số slot thời gian nhỏ nhất) để giảiquyết toàn bộ công việc mà không xảy ra bất kì sự đụng độ nào
Trang 9thanh 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ể
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 :
Trang 10Cho 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)
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)
Trang 11Ví 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:
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
Trang 12đồ 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 Birkhoff 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 Birkhoff đượ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à ,
Trang 13Có 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:
- 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 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
Trang 142.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:
Trang 15Đồ 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 K5 hoặc K3,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ánnày Chứng minh sai nổi tiếng là của Alfred Kempe vào năm 1879 PercyHeawood 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:
Trang 16- 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êmbấ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)G).
3 đỉnh AA,BB,CC tạo thành 1 clique Đồ thị trên có nhiều clique lớn nhất
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
Trang 17trú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.
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 G3.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);
Thêm màu cho Colors;
done = Coloring(V, Colors,treenode);
Trang 18Để 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 vi như vậy, việc xác định đỉnh kề của vi và chọn 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 2n , như vậy, thuật toán vét cạn có độ phứctạp O(2n)
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 vi
2.3 Nếu Colors == NULL ==> Thêm 1 màu mới vào Colors, tô màu đó cho vi
End
Ví dụ :
Trang 19Đồ 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
Trang 20Tạ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ậcdegree(vi) của vi, do đó, độ phức tạp của giải thuật được tính bằng
Ví dụ:
Trang 21Cho đồ thị G(V,G) như sau:
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: