Thuật toán Johnson

Thuật toán Johnson
Phân loạiBài toán về đường đi ngắn nhất cho tất cả các cặp (đối với đồ thị có trọng số)
Cấu trúc dữ liệuĐồ thị
Hiệu suất trường hợp tệ nhất

Thuật toán Johnson được Donald B. Johnson tìm ra năm 1977[1]. Thuật toán Johnson là một thuật toán giải quyết bài toán đường đi ngắn nhất giữa mọi cặp đỉnh trong đồ thị có hướng, có trọng số và không có chu trình âm. Nó hoạt động bằng cách sử dụng thuật toán Bellman – Ford để tính toán một phép biến đổi của đồ thị đầu vào loại bỏ tất cả các trọng số âm, cho phép thuật toán Dijkstra được sử dụng trên đồ thị đã biến đổi[2][3].

Bài toán

[sửa | sửa mã nguồn]

Nếu đã tìm hiểu về Thuật toán DijkstraThuật toán Floyd-Warshall thì chúng ta biết rằng với đồ thị không có trọng số âm thì thuật toàn Dijkstra sẽ có tốc độ xử lý nhanh nhất

còn Floyd-Warshal thì tìm đường đi ngắn nhất giữa mọi cặp đỉnh trong thời gian . Mở rộng hơn nếu chúng ta áp dụng thuật toán Dijkstra (với Fibonacci Heap) lần, ta sẽ thu được thuật toán nhanh hơn hẳn

Vấn đề đặt ra là có tồn tại hay không thuật toán tìm đường đi ngắn nhất giữa mọi cặp đỉnh trong đồ thị có hướng, có trọng số âmkhông có chu trình âm?

Thuật toán Johnson được tạo ra để giải quyết vấn đề này.

Giới thiệu thuật toán

[sửa | sửa mã nguồn]

Ý tưởng của thuật toán là từ đồ thị đã cho, tìm cách chuyển nó thành đồ thị có trọng số không âm rồi dùng thuật toán Dijkstra áp dụng cho từng đỉnh

Mô tả thuật toán

[sửa | sửa mã nguồn]

Thuật toán Johnson có 4 bước cơ bản:

  1. Thêm vào một đỉnh và với mỗi , thêm cung có trọng số
  2. Áp dụng thuật toán Bellman-Ford tìm khoảng cách ngắn nhất từ tới mọi và sử dụng khoảng cách đó làm thế năng của đỉnh , i.e,
  3. Gán cho mỗi cung một trọng số mới.. Gọi đồ thị với trọng số mới là ( là đồ thì có trọng số không âm)
  4. Áp dụng Dijkstra lần cho đồ thị để tìm đường đi ngắn nhất giữa mọi cặp đỉnh trong. Gọi lần lượt là khoảng cách từ tơi trong . độ lệch của đường đi ngắn nhất từ tới chính là Từ đó suy ra: .

Mô tả theo cách nông dân thì:

  1. Thêm một đỉnh vào đồ thị , có cạnh đến bất kỳ đỉnh nào của cũng được và có trọng số là 0.(ở hình bên dưới là đỉnh q)
  2. Dùng thuật toán Bellman-Ford, tìm đường đi từ đến các đỉnh còn lại. (kết quả được đồ thị thứ 2 ở hình bên dưới)
  3. Thay đổi trọng số của đồ thị đã cho bằng đồ thị mới có trọng số không âm bằng cách, Mỗi cạnh từ u đến v có trọng số thay bằng giá trị mới .(kết quả được đồ thị thứ 3 ở hình bên dưới)
  4. Dùng thuật toán Dijsktra với đồ thị

Chú thích

[sửa | sửa mã nguồn]
  1. ^ Johnson, Donald B. (1977), “Efficient algorithms for shortest paths in sparse networks”, Journal of the ACM, 24 (1): 1–13, doi:10.1145/321992.321993.
  2. ^ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2001), Introduction to Algorithms, MIT Press and McGraw-Hill, ISBN 978-0-262-03293-3. Section 25.3, "Johnson's algorithm for sparse graphs", pp. 636–640.
  3. ^ Black, Paul E. (2004), “Johnson's Algorithm”, Dictionary of Algorithms and Data Structures, National Institute of Standards and Technology.
Chúng tôi bán
Bài viết liên quan
Tabula Smaragdina – Giả Kim Thuật Sư Vĩ Đại của Ainz Ooal Gown
Tabula Smaragdina – Giả Kim Thuật Sư Vĩ Đại của Ainz Ooal Gown
Tabula là một thành viên của guild Ainz Ooal Gown và là “cha” của 3 NPC độc đáo nhất nhì Nazarick là 3 chị em Nigredo, Albedo, Rubedo
Tại vì sao lyrics nhạc MCK suy nhưng vẫn hay đến như vậy?
Tại vì sao lyrics nhạc MCK suy nhưng vẫn hay đến như vậy?
Nger vốn gắn liền với những bản tình ca, nổi nhất với lũ GenZ đời đầu chúng tôi khi đó là “Tình đắng như ly cafe” ft cùng Nân
Ao no Kanata no Four Rhythm Vietsub
Ao no Kanata no Four Rhythm Vietsub
Bộ phim kể về bộ môn thể thao mang tên Flying Circus, với việc mang Giày phản trọng lực là có thể bay
Các shop quốc tế ngon bổ rẻ trên Shopee
Các shop quốc tế ngon bổ rẻ trên Shopee
Các shop quốc tế ngon bổ rẻ trên shopee và mẹo săn hàng đẹp 🍒