Phƣơng phỏp tham lam giải một số bài toỏn về đồ thị

Một phần của tài liệu Về các bài toán NP C và một số phương pháp giải (Trang 27 - 32)

Giải thuật tham lam GrA (Greedy algorithm) là một thuật toỏn giải

quyết một bài toỏn theo kiểu metaheuristic để tỡm kiếm lựa chọn tối ưu ở

mỗi bước đi với hy vọng tỡm được tối ưu toàn cục.

Đối với nhiều bài toỏn, giải thuật tham lam hầu như khụng cho ra lời giải tối ưu toàn cục (nhưng khụng phải luụn như vậy), vỡ chỳng thường khụng

chạy trờn tất cả cỏc trường hợp. Chỳng cú thể bỏm chặt lấy một số lựa chọn

nhất định một cỏch quỏ sớm, điều này dẫn đến hậu quả là trong giai đoạn sau,

cỏc thuật toỏn này khụng thể tỡm ra cỏc lời giải toàn cục tốt nhất. Vớ dụ, đối

với bài toỏn tụ màu đồ thị và tất cả cỏc bài toỏn NP-C khỏc, khụng một thuật toỏn tham lam đó được biết nào đảm bảo tỡm thấy cỏc lời giải tối ưu. Tuy nhiờn, cỏc thuật toỏn này vẫn hữu ớch vỡ chỳng dễ thiết kế và cho ra cỏc ước lượng tốt về lời giải tối ưu.

Nếu cú thể chứng minh rằng một thuật toỏn tham lam cho ra kết quả tối ưu toàn cục cho một lớp bài toỏn nào đú, thỡ thuật toỏn thường sẽ trở thành phương phỏp được chọn lựa, vỡ nú chạy nhanh hơn cỏc phương phỏp tối ưu húa khỏc như quy hoạch động. Cỏc vớ dụ cho giải thuật loại này là bài toỏn tụ màu đồ thị, thuật toỏn Kruskal và thuật toỏn Prim dành cho bài toỏn cõy bao trựm nhỏ nhất, thuật toỏn Dijkstra dành cho bài toỏn đường đi ngắn nhất

nguồnđơn, và thuật toỏn tỡm cõy Huffman tối ưu.

Thuật toỏn tham lam để giải bài toỏn tụ màu:

* Phỏt biểu bài toỏn

Bài toỏn tụ màu rất quen thuộc , bài toỏn điển hỡnh chớnh là bài toỏn 4 màu được phỏt biểu như sau : Mọi bản đồ trờn mặt phẳng đều cú thể tụ bằng 4 màu sao cho khụng cú hai nước lỏng giềng nào lại bị tụ cựng 1 màu. Vậy chỳng ta sẽ mở rộng bài toỏn trờn thành một bài toỏn tổng quỏt mà hầu hết chỳng ta đều đó quen thuộc :

Cho một đồ thị vụ hướng N đỉnh ( N <= 200 ), mỗi đỉnh được nối với 1 số đỉnh khỏc bằng 1 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 là : Hóy tụ màu cỏc đỉnh sao cho khụng cú hai đỉnh nào cú 2 màu giống nhau mà lại nối trực tiếp với nhau với số màu cần tụ là ớt nhất.

Bài toỏn trờn cú rất nhiều cỏch giải. Trong đú cỏch đơn giản nhất để giải bài toỏn trờn là Duyệt cú chặn nhỏnh. Thuật toỏn trờn khỏ hiệu quả. Cú thể phỏt biểu qua cỏch trờn như sau :

Procedure try(k : integer) ; Var ok : boolean;

Begin If ( k > N) then Begin Cap_nhat_min; Exit; End; Ok := false; For i := 1 to somau do If To_duoc_mau(i,k) then Begin Ok := true;

Dat_trang_thai(i,k); { Ghi nhan i co mau k, va danh so cac dinh ke voi i phai co mau khac i }

Try(k+1); Tra_trang_thai(i,k); end; if (ok = false) { inc(somau); Dat_trang_thai(somau,k); Try(k+1); Tra_trang_thai(somau,k); Dec(somau); }

End;

Tuy nhiờn với dữ liệu lớn một chỳt thỡ thuật toỏn Duyệt sẽ khụng tối ưu về mặt thời gian. Do đú chỳng ta sẽ ỏp dụng thuật toỏn tham lam để giải bài toỏn trờn.

Thuật toỏn

Cho đồ thị G = (V, E), /V/ = n.

Bài toỏn đặt ra là tụ màu đồ thị G với số màu ớt nhất.

-Trước hết ta định nghĩa bậc của một đỉnh là số đỉnh trờn đồ thị chưa được tụ mầu mà đỉnh này được nối trực tiếp với đỉnh đang xột bằng một cạnh nối trực tiếp. Nếu đỉnh đú khụng được nối với bất kỳ đỉnh nào thỡ bậc của đỉnh đú là 0.

í tưởng là trờn mỗi bước tụ màu được nhiều đỉnh nhất bằng 1 màu.

-Bƣớc 1 : Sắp xếp cỏc đỉnh theo thứ tự giảm dần của bậc.

-Bƣớc 2 : Tụ màu 1 cho đỉnh cú bậc cao nhất và lần lượt cỏc đỉnh khụng liền kề với cỏc đỉnh đó được tụ màu.

-Bƣớc 3 : Tiếp tục tụ màu 2, màu 3… cho cỏc đỉnh cũn lại.

Bƣớc 1 : Sắp xếp cỏc đỉnh theo thứ tự giảm dần của bậc

Đỉnh g b e h a d f c (adsbygoogle = window.adsbygoogle || []).push({});

Bậc của đỉnh 5 4 4 4 3 3 3 2

- Bƣớc 2 : Tụ màu 1 cho đỉnh cú bậc cao nhất và lần lượt cỏc đỉnh khụng liền kề với cỏc đỉnh đó được tụ màu.

+ Tụ màu 1 cho đỉnh c, đỉnh g.

+ Tụ màu 2 cho đỉnh b, đỉnh d, đỉnh f

+ Tụ màu 3 cho đỉnh a, đỉnh e.

+ Tụ màu 4 cho đỉnh h.

Vậy số màu đó dựng để tụ màu cho đồ thị là 4.

Một phần của tài liệu Về các bài toán NP C và một số phương pháp giải (Trang 27 - 32)