1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài tập thuật toan dijkstra

4 12 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 50,35 KB

Nội dung

Thuật toán Dijkstra là một thuật toán trong lĩnh vực đồ thị được sử dụng để tìm đường đi ngắn nhất từ một đỉnh đến tất cả các đỉnh còn lại trong đồ thị có trọng số dương. Thuật toán này được phát triển bởi nhà toán học Edsger W. Dijkstra vào năm 1956. Bắt đầu từ đỉnh nguồn, thuật toán duyệt qua các đỉnh kề với đỉnh hiện tại và cập nhật khoảng cách ngắn nhất từ đỉnh nguồn đến các đỉnh đó. Đồng thời, các đỉnh đã được duyệt qua sẽ được đánh dấu để không duyệt lại. Thuật toán Dijkstra sử dụng hàng đợi ưu tiên (priority queue) để lựa chọn đỉnh tiếp theo cần duyệt, đảm bảo việc chọn đỉnh có khoảng cách ngắn nhất hiện tại từ đỉnh nguồn. Thuật toán tiếp tục duyệt và cập nhật khoảng cách cho đến khi tất cả các đỉnh đã được duyệt qua hoặc hàng đợi ưu tiên trở thành trống. Kết quả cuối cùng là một danh sách các khoảng cách ngắn nhất từ đỉnh nguồn đến tất cả các đỉnh còn lại trong đồ thị. Thuật toán này có độ phức tạp thời gian là O((V + E)logV), trong đó V là số đỉnh và E là số cạnh của đồ thị. Dijkstra thường được áp dụng trong các bài toán định tuyến trong mạng lưới, hệ thống định vị và nhiều ứng dụng khác đòi hỏi tìm đường đi ngắn nhất trong đồ thị có trọng số.

Bài Tập Tìm đường ngắn từ đỉnh S đến đỉnh Z thuật toán Dijkstra 13 S 4 Z 2 Bảng Kết Quả k Đỉnh S Đỉnh Đỉnh Đỉnh Đỉnh Đỉnh Z Đỉnh (∞ , S) Đỉnh (∞ , S) Đỉnh Z (∞ , S) k số thứ tự, Mỗi đỉnh tiêu đề cột, thứ tự không quan trọng Bảng Kết Quả k Đỉnh S (0, S)* Đỉnh (∞ , S) Đỉnh (∞ , S) Ở bước khởi tạo, ứng với k = 0, Đỉnh xuất phát có độ dài đường từ đỉnh S đến S 0, nên ta viết (0, S) Đỉnh có độ dài đường ngắn từ đỉnh đến ∞ , nên ta viết (∞ , S) Đánh dấu * vào đỉnh có đường từ đỉnh S đến ngắn Bảng Kết Quả k Đỉnh S (0, S)* - Đỉnh (∞ , S) (2, S)* Đỉnh (∞ , S) (9, S) Đỉnh (∞ , S) (7, S) Tại k = 1, tỉnh lại độ dài đường ngắn từ S đến đỉnh kề với đỉnh S L(1) = L(s) + w(s, 1)= + = ⇒ (2, S) Đỉnh (∞ , S) (13, S) Đỉnh Z (∞ , S) (∞ , S) L(2) = L(s) + w(s, 2) = + = ⇒ (7, S) L(3) = L(s) + w(s, 3)= + = => (9, S) L(4) = L(s) + w(s, 4) = + 13 = 13 => (13, S) Đánh dấu * vào ô (hàng 1, đỉnh 1) đỉnh có đường từ đỉnh S đến ngắn Bảng Kết Quả k Đỉnh S (0, S)* - Đỉnh (∞ , S) (2, S)* - Đỉnh (∞ , S) (7, S) (6, 1)* Đỉnh (∞ , S) (9, S) (7, S) Đỉnh (∞ , S) (13, S) (13, S) Đỉnh Z (∞ , S) (∞ , S) (∞ , S) Tại k = 2, tính lại độ dài đường ngắn từ S đến đỉnh kề với đỉnh L(2) = L(1) + w(1, 2) = + = ⇒ (6, 1) Đánh dấu * vào ô (hàng 2, đỉnh 2) đỉnh có đường từ đỉnh S đến ngắn Bảng Kết Quả k Đỉnh S (0, S)* - Đỉnh (∞ , S) (2, S)* - Đỉnh (∞ , S) (7, S) (6, 1)* - Đỉnh (∞ , S) (9, S) (9, S) (8, 2)* Đỉnh (∞ , S) (13, S) (13, S) (12, 2) Đỉnh Z (∞ , S) (∞ , S) (∞ , S) (∞ , S) Tại k = 3, tính lại độ dài đường ngắn từ S đến đỉnh kề với đỉnh L(3) = L(2) + w(2, 3) = + = ⇒ (8, 2) L(4) = L(2) + w(2, 4) = + = 12 ⇒ (12, 2) Đánh dấu * vào (hàng 3, đỉnh 3) đỉnh có đường từ đỉnh S đến ngắn Bảng Kết Quả k Đỉnh S (0, S)* - Đỉnh (∞ , S) (2, S)* - Đỉnh (∞ , S) (7, S) (6, 1)* - Đỉnh (∞ , S) (9, S) (9, S) (8, 2)* - Đỉnh (∞ , S) (13, S) (13, S) (12, 2) (11, 3)* Đỉnh Z (∞ , S) (∞ , S) (∞ , S) (∞ , S) (17, 3) Tại k = 4, tính lại độ dài đường ngắn từ S đến đỉnh kề với đỉnh L(4) = L(3) + w(3, 4) = + = 11⇒ (11, 3) L(Z) = L(3) + w(3, Z) = + = 17 ⇒ (17, 3) Đánh dấu * vào ô (hàng đỉnh 4) đỉnh có đường từ đỉnh S đến ngắn Bảng Kết Quả k Đỉnh S (0, S) * - Đỉnh (∞ , S) (2, S) * - Đỉnh (∞ , S) (7, S) (6, 1) * - Đỉnh (∞ , S) (9, S) (9, S) (8, 2) * - Đỉnh (∞ , S) (13, S) (13, S) (12, 2) (11, 3) * - Đỉnh Z (∞ , S) (∞ , S) (∞ , S) (∞ , S) (17, 3) (15, 4) * Đỉnh (∞ , S) (9, S) (9, S) (8, 2) * - Đỉnh (∞ , S) (13, S) (13, S) (12, 2) (11, 3) * - Đỉnh Z (∞ , S) (∞ , S) (∞ , S) (∞ , S) (17, 3) (15, 4) * Tại k = 5, Tỉnh lại độ dài đường ngắn từ S đến Z L(Z) = L(4) + w(4, Z) = 11 + = 15⇒ (15, 4) Đánh dấu * vào (hàng 5, đỉnh Z) Kết thúc tính tốn Bảng Kết Quả k Đỉnh S (0, S) * - Đỉnh (∞ , S) (2, S) * - Đỉnh (∞ , S) (7, S) (6, 1) * - Kết luận: Độ dài đường ngắn từ đỉnh S đến đỉnh Z 15 Đường ngắn từ S đến Z S -> -> -> -> -> Z

Ngày đăng: 03/12/2023, 09:03

w