Ví dụ: Xét đồ thị định hướng có 4 đỉnh và độ dài các cung được cho bởi ma trậ nC như sau

Một phần của tài liệu Giáo trình Phân tích thiết kế thuật toán (Nghề Lập trình máy tính): Phần 2 - Tổng cục dạy nghề (Trang 35 - 37)

d(i, S) = (C[i, k] + d(k, S - {k}) (1) Nghiệm tối ưu cần tìm là d(1, V - {1}) và

d(1, V - {1}) = (C[1, k] + d(k, V - {1, k}) (2)

Như vậy chúng ta sẽ tính được d(1, V - {1}) nếu ta biết được d(k, V - {1} với mọi k = 2, ..., n. Rõ ràng là d(i, ) = C[i, 1] với 2 i n. Sử dụng (1) ta tính được d(i, S) với tất cả S chỉ chứa 1 đỉnh. Từ đó ta tính được d(i, S) với S chỉ chứa 2 đỉnh. Tiếp tục ta tính được d(i, S) với S chứa 3 đỉnh, 4 đỉnh, ... cho tới khi ta tính được các d(k, V - {1, k}) với k = 2, .., n. Từ dó, theo (2) ta tính được độ dài đường đi ngắn nhất của người bán hàng.

Ví dụ : Xét đồ thị định hướng có 4 đỉnh và độ dài các cung được cho bởi ma trận C nhưsau sau 0 10 15 20 5 0 9 10 6 13 0 12 8 8 9 0 Ta có : d(2, ) = C[2, 1] = 5 d(3, ) = C[3, 1] = 6 d(4, ) = C[4, 1] = 8 Sử dụng (2) ta tính được : d(2, {3}) = C[2, 3] + d(3, ) = 15 d(2, {4}) = 18 d(3, {2}) = 18

d(3, {4}) = 20 d(4, {2}) = 13 d(4, {3}) = 15

Tiếp theo ta tính được d(i, S) với i  1, và S gồm hai đỉnh khác 1 và i. d(2, {3, 4}) = min {C[2, 3] + d(3, {4}), C[2, 4] + d(4, {3})} = 25 d(3, {2, 4}) = min {C[3, 2] + d(2, {4}), C[3, 4] + d(4, {2})} = 25 d(4, {2, 4}) = min {C[4, 2] + d(2, {3}), C[4, 3] + d(3, {2}) } = 23 Cuối cùng ta có : d(1, {2, 3, 4}) = min{C[1, 2]+d(2, {3, 4}+C[1, 3]+d(3, {2, 4})+C[1,4]+d(4, {2, 3})} = min {35,40,43} = 35

Như vậy, đường đi ngắn nhất của người bán hàng có độ dài 35. Đường đi ngắn nhất này có thể xây dựng được bằng cách với mỗi d(i, S) ta lưu lại đỉnh j mà tại đó vế phải của (1) đạt min. Gọi J(i, S) là đỉnh j này. Chẳng hạn, từ các kết quả tính tốn trên ta có :

J(1, {2, 3, 4}) = 2 J(2, {3,4}) = 4 J(4, {3}) = 3

Do đó đường đi ngắn nhất là (1, 2, 4, 3, 1).

Chúng ta thử đánh giá thời gian thực hiện thuật toán này. Gọi N là số các d(i, S) cần phải tính. Trước hết có n-1 khả năng chọn i (i chạy từ 1 tới n). với mỗi i số các tập S có k phần tử, S khơng chứa 1 và i, là . Do đó :

N = = (n-1)2n-2

Mặt khác để tính d(i, S) với S gồm k phần tử, theo công thức (1) ta phải thực hiện k-1 phép so sánh để tìm min. Do đó thuật tốn địi hỏi thời gian n22n. So sánh với phương pháp vét cạn n! đường đi để tìm ra đường đi nhắn nhất, thuật tốn này tốt hơn.

Phân tích thiết kế thuật tốn

Một phần của tài liệu Giáo trình Phân tích thiết kế thuật toán (Nghề Lập trình máy tính): Phần 2 - Tổng cục dạy nghề (Trang 35 - 37)

Tải bản đầy đủ (PDF)

(77 trang)