Hiểu được vấn đề đường sá ngắn nhất

Vấn đề ngắn nhất (APPP) tìm khoảng cách ngắn nhất giữa mỗi cặp đỉnh trên biểu đồ. Đó là một thách thức cơ bản trong lý thuyết đồ thị với ảnh hưởng trực tiếp đến thiết kế mạng, dòng chảy tối ưu hóa giao thông, phân tích mạng xã hội, và hậu cần. Khác với vấn đề đường ngắn nhất nguồn đơn nhất, giải quyết các vấn đề đường dẫn mã nguồn nhất, giải quyết yêu cầu khoảng cách tính toán từ mỗi đỉnh tới tất cả các nơi khác, mà cân bằng bậc hai với số nút.

Phương pháp thông thường là giải quyết vấn đề này nhưng phải đối mặt với giao dịch. Floyd-Warsell, một thuật toán lập trình năng động, làm việc trên đồ thị dày đặc nhưng chạy trong thuật toán [FLT: 0] O [V ] ]. ) Thời gian lập trình và không thể xử lý được các chu trình âm. Thuật toán Dijkstra, khi chạy từ mỗi đỉnh, đạt được [V:] [V + V log] [L:] [L:], thời gian nhị phân, nhưng nó không thể xử lý được với trọng lượng âm. Đối với cả hai chu trình này, khi các phương pháp hiệu chỉnh không có các phương pháp tối ưu.

So sánh các thuật ngữ thông thường

Để hiểu thuật toán của Johnson, nó giúp tương phản với những người giải đáp AP thường dùng nhất:

  • Floyd-Warshall – đơn giản để thực hiện, sử dụng ma trận 2D, cập nhật bằng ba vòng lặp. Làm việc trên các cạnh tiêu cực nhưng không phải chu kỳ tiêu cực. Đang thực tiễn cho đồ thị với hàng ngàn đỉnh theo thời gian khối.
  • Đã tái định nghĩa Dijkstra – Chạy Dijkstra từ mỗi đỉnh. Nhanh trên đồ thị ) O (V E log , nhưng chỉ được hạn chế với các khối không màu.
  • O [FLT:] O ) ) ) , mà chạy chậm hơn cả hai phương pháp thay thế.
  • Thuật toán của Johnson – Nạp lại biểu đồ để mọi cạnh trở thành không âm tính, rồi áp dụng Dijkstra lặp đi lặp lại. Nó sản xuất O [V [FLT:]] [FLT:]] [FLT:] bản ghi [FL:4] V [FL:4) V [FL:] với một chồng nhị phân, nó sẽ được chọn cho biểu đồ có trọng lượng âm.

Thuật toán của Johnson được thực hiện như thế nào?

Thuật toán của Johnson biến đổi một cách thông minh một hàm [FLT: 1] bắt nguồn từ một lần chạy duy nhất của BellmanFord. Một lần cân lại, thuật toán của Dijkstra có thể được sử dụng một . Thuật toán này bao gồm bốn bước.

Bước 1: Thêm một nút siêu nguồn

Một đỉnh mới [FLT:] [FLT: 1] được thêm vào đồ thị, kết nối với mỗi đỉnh có độ nặng 0. nút thêm này không thay đổi khoảng cách đường ngắn nhất vì bất cứ đường nào dùng ) có thể phụ thêm vào mà không tốn chi phí.

Bước 2: Tính hàm tiềm năng với Bellman-Ford

Chạy thuật toán BellmanFord có các cạnh không trọng cho mọi đỉnh [FLT: 0] ). Vì [FLT:] [FLT:] có các cạnh không cho mọi đỉnh [FLT:], thuật toán khoảng cách ngắn [FLT:] [FLT:] [FLT:]].], thuật toán này phục vụ như một khoảng cách [FL:5] [FL:5] [FL:5] [FL:] [FL:],], hoặc một vòng lặp âm, không có thuật toán nào hợp lệ nào trong vòng lặp âm và chạy theo chu kỳ].

Bước 3: Cân nhắc lại đồ thị

Sử dụng tiềm năng h , mỗi cạnh [FLT:] với trọng lượng ban đầu w, v] ] được cân:]::

[u, v] = w(u, v) + h(u) – h(v)

Sự chuyển hóa này đảm bảo rằng mỗi trọng lượng cạnh cân không phải là âm tính. Bằng chứng dựa trên sự bất bình đẳng tam giác: vì H [FL:] h [FLT] + w(u] v, v] (từ xuất của BellmanFord], nó đi theo sau [FL: 2] [FL:] [FLT] [FLT] [FLT].]. Hơn nữa, các đường dẫn được bảo tồn: đường ngắn nhất giữa hai đỉnh đầu của đồ thị nguyên thủy trong đồ thị.

Bước 4: Chạy thuật toán của Dijkstra từ mỗi phương trình

Với đồ thị có cạnh không phải là độ phân giải, thuật toán Dijkstra được chạy một lần từ mỗi đỉnh, và tính toán khoảng cách ngắn nhất đến tất cả các đỉnh khác.

) [FLT:] [lT:] [u] [h] – h(u) + h [FLT:]]

Bước cuối cùng này đảm bảo các khoảng cách đã báo cáo là chính xác cho đồ thị gốc.

Phân tích tính phức tạp và hiệu quả

Thuật toán của Johnson đạt được sự phức tạp tổng quát về thời gian khi thực hiện với hàng đợi kép. Bước nhảy BellmanFord chạy [FLT:] [FLT:] [FT:] [FT:] [FT:] [FL] [FL] [FL] [FL], đồ thị [FL] [FL] [FL] [FL], [FL] [FL], [L] [L] [L], [L] [L], [V] [L], [V] [L], [L], [L] [L], [L] [L], [L], [L] [L], [L] [L], [L] [L],] [L], [L] đồ thị bóng [L]]] [L]] [L] [L] [L]] [L]] [L]] [L]] [L]] [L] [L]]] [L] [L]]] [L] [L

Dùng một đống Fibonacci có thể làm giảm phần của Dijkstra [FLT: 0] O (V + V [FLT: 1] [FLT:] [FLT:] [FLT:] , mặc dù thực tế là đống nhị phân đơn giản và thường nhanh. Dấu chân [FLT:] [FL:][FL6][FL:] [FL6] [FL:],] [FL:7], nhưng có thể cải thiện kết quả này bằng cách của ma trận, nhưng có thể cải thiện kết quả.

Ứng dụng thực tế

Thuật toán của Johnson được dùng trong các vùng mà các cạnh đồ thị có thể mang những chi phí tiêu cực và tất cả những khoảng cách ngắn nhất.

  • Định tuyến Mạng: nhà cung cấp dịch vụ Internet và mạng viễn thông mạng mạng dùng giao thức phân phối phải tính toán cách đi theo đường dẫn rẻ nhất giữa bất kỳ hai rmers, ngay cả khi liên kết chi phí ngẫu nhiên hoặc trở thành tiêu cực (v., do sự tắc nghẽn hay giảm giá chính sách).
  • Kế hoạch giao thông Urban: Công ty hậu cần (v. d., Google Map, OpenStreetMap động cơ) tính toán các đường dẫn ngắn nhất giữa nhiều cặp định mệnh đầu tiên cho việc tối ưu hóa hạm đội. Trọng lượng tiêu cực có thể phụ trợ hoặc giảm giá thời gian.
  • Trong mạng lưới sản xuất đa giai đoạn, chi phí từ nút này đến nút khác có thể là âm (v.g., rebates). Thuật toán của Johnson tìm thấy những tuyến đường sinh lợi nhiều nhất trong toàn bộ chuỗi cung ứng.
  • Phân tích mạng xã hội: xác định trung tâm gần gũi hoặc trung tâm trung tâm đòi hỏi tất cả khoảng cách không trung.
  • Mô hình nhập điện từ: Mô hình và phân tích dòng chảy Leontief thường bao gồm hệ số âm; thuật toán của Johnson tính hiệu ứng truyền bá các thay đổi qua một nền kinh tế liên kết.

Để đọc thêm về nền tảng toán học, xin xem mục nhập chi tiết ) ) và giấy gốc của Donald B. Johnson (1977). Để hiểu rõ hơn về kỹ thuật nạp lượng [FLT: T] [FM: 2]] web web này [FtHbb], [FLT: 3], gồm thuật toán của Johnson như là một chức năng tiêu chuẩn.

Kết luận

Thuật toán của Johnson nổi bật là một giải pháp thanh lịch và thực tế cho tất cả các vấn đề đường mòn ngắn nhất khi có các cạnh tiêu cực. Bằng cách kết hợp tính mạnh mẽ của BellmanFord (để phát hiện các chu kỳ âm và tiềm năng điện toán) với tốc độ của các biểu đồ dijkstra (không phải là đồ thị tích cực), nó đạt được hiệu suất tuyệt vời trên mạng lưới đơn vị.

Khi đối mặt với vấn đề AP thật sự của thế giới AP nơi mà đồ thị có độ dốc và có thể chứa cạnh tiêu cực, thuật toán của Johnson nên được xem xét đầu tiên. Nó đảm bảo lý thuyết và thực hiện rộng rãi trong thư viện (v. d., [FLT: 0]NetworkX , ), , [FLT] Thư viện đồ thị [FL:2) làm cho nó trở nên thực tế để áp dụng.