Giải thuật tham lam là một heuristic, GrA (Greedy Algorithm) không phải luôn luôn cho lời giải tối ưu, thường nó chỉ cho lời giải gần tối ưu. Khi nó cho lời giải tối ưu thì việc chứng minh tính đứng đắn của thuật toán cũng không đơn giản.
Để mô tả chính xác GrA cần mô tả chính xác môi trường trong đó các bài toán tối ưu đặt ra, trong các bài toán tối ưu trong ngữ cảnh GrA người ta có:
- Tập (danh sách): Các ứng viên, thí dụ, các nút, các cạnh trong đồ thị. - Tập các ứng viên đã sử dụng.
- Một cách để kiểm tra liệu một tập các ứng viên đã cho có lời giải (không nhất thiết là tối ưu) hay không?
- Một hàm lựa chọn (selection function) để chọn các ứng viên chưa được sử dụng.
- Hàm mục tiêu gán giá trị cho các lời giải.
Bài toán: Cho đồ thị G = (V, E). Tìm tập đỉnh C nhỏ nhất phủ G theo nghĩa nếu cạnh uv E u C hoặc v C.
Thuật toán tham lam: * Thuật toán 1:
Input: Đồ thị G = (V, E)
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 1. C =
2. Chọn đỉnh có bậc lớn nhất I' (đỉnh có liên quan đến nhiều cạnh I') 3. C: = C {v} bổ sung v vào C
loại bỏ v và tất cả các cạnh liên thuộc với v
4. Lặp lại bước 2 cho đến khi tất cả các cạnh được phủ.
Vì mục đích của ta là phủ tất cả các cạnh của G bởi số ít đỉnh nhất nên chiến lược chọn trên mỗi bước một đỉnh phủ được nhiều cạnh nhất là hoàn toàn chấp nhận được. Tất nhiên là bài toán NP-C nên không hy vọng là thuật giải này hiệu quả để đạt được tập phủ đỉnh bé nhất.
* Thí dụ 1:
a b c d e f g
1 2 3 4 3 2 1
Hình 2.2. Thí dụ về bài toán phủ đỉnh theo phương pháp tham (n=7) 1. C =
2. Chọn d có bậc 4 C = {d}
loại bỏ d và các cạnh liên thuộc, đồ thị còn lại c e d f g b a c e f b a
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 3. Chọn b => C = {d,b}, loại bỏ d và các cạnh liên thuộc, đồ thị còn lại
4. Chọn e => C = {d,b,e} phủ đỉnh tìm được.
Phủ đỉnh tìm được gồm 3 đỉnh là bé nhất. (Trường hợp này cho lời giải đúng). * Thí dụ 2:
Cho n=13
c1, c2, c3, c4, c5: bậc 1 b1, b2, b3, b4, b5: bậc 4 a1, a2, a3: bậc 5
c e f c4 c5 c3 c1 c2 a3 a1 a2 b5 b4 b3 b2 b1
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ Hình 2.3: Thí dụ về bài toán phủ đỉnh theo phương pháp tham (n=13)
1. C =
2. Chọn a1 (có bậc 5) C = {a1}
loại a1 cùng các cạnh liên thuộc, còn lại đồ thị với các đỉnh a2,a3,b1,b2,b3,b4,b5,c1,c2,c3,c4,c5.
3. Chọn a2 (bậc 5) C = {a1,a2}
loại a2 cùng các cạnh liên thuộc, còn lại đồ thị với các đỉnh a3,b1,b2,b3,b4,b5,c1,c2,c3,c4,c5. c4 c5 c3 c1 c2 a3 a2 b5 b4 b3 b2 b1 c4 c5 c3 c1 c2 a3 b5 b4 b3 b2 b1
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 4. Chọn a3 (bậc 5)
C = {a1,a2,a3}
loại a3 cùng các cạnh liên thuộc, còn lại đồ thị với các đỉnh b1,b2,b3,b4,b5,c1,c2,c3,c4,c5.
5. Chọn 5 đỉnh b,c (b hoặc c) C = {a1,a2,a3,b1,b2,b3,b4,b5} |C| = 8
Lời giải tối ưu:
C* = {b1,b2,b3,b4,b5} |C*| = 5
* Thuật toán 2:
Input: Đồ thị G = (V, E)
Output: Phủ C của G gần với phủ nhỏ nhất. Begin C: = ; While E do c4 c5 c3 c1 c2 b5 b4 b3 b2 b1
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ Chọn trong E cạnh bất kỳ (u,v), rồi loại bỏ các đỉnh u,v từ G và bổ sung nó vào C
End;