Có một thuật toán tối ưu để tìm ra con đường ngắn nhất dài nhất trong mạng không?


13

Tôi có một tập hợp lớn các mạng tuyến tính và tôi muốn tìm hai đầu của mỗi mạng cách xa nhau nhất dọc theo mạng (trên hình ảnh bên dưới, nó sẽ là D đến K). Giải pháp mạnh mẽ cho vấn đề này là tính toán đường đi ngắn nhất dọc theo mạng cho mỗi cặp nguồn gốc, nhưng tôi có hàng trăm mạng với hàng ngàn đầu, vì vậy tính toán mỗi đường dẫn có thể khá nặng.

Có cách nào tối ưu để tính toán điều này mà không cần sử dụng lực lượng vũ phu? Tôi có thể loại trừ một số điểm dựa trên một số quy tắc thông minh?

Làm thế nào để tìm hiệu quả con đường màu đỏ?

EDIT: Tôi đã thêm một minh họa về con đường dài nhất được đề cập bởi @Alex Tereshenkov để làm rõ câu hỏi của tôi. Đường dẫn màu đen là kết quả của thuật toán đường dẫn dài nhất (đường dẫn dài nhất mà không lặp lại bất kỳ đỉnh nào). Trong trường hợp của tôi, hãy tưởng tượng rằng bạn nhập mạng từ bất kỳ chữ cái nào và bạn cần lái xe đến một chữ cái khác nhanh nhất có thể. Hai chữ cái nào khó tham gia nhất? nhập mô tả hình ảnh ở đây


kỹ năng sơn điên!
Adam

Câu trả lời:


6

Tôi nghĩ rằng bạn có thể đang tìm kiếm Đường kính đồ thị của mạng của bạn. Có một vài câu hỏi trên stackexchange đề cập đến chủ đề này, ví dụ:

Hầu hết các thuật toán đề xuất tính toán "đường dẫn ngắn nhất cho tất cả các cặp" trước tiên và chọn đường dẫn dài nhất trong số đó, nhưng tôi đã tìm thấy một bài đăng trên blog của Koushik Narayanan gợi ý một cách tiếp cận khác có thể tối ưu hơn (tôi không kiểm tra) lặp đi lặp lại qua từng đỉnh và tìm cặp xa nhất của nó:

Chúng ta có thể tính toán đường đi từ một đỉnh V1 sao cho đó là đường đi ngắn nhất giữa V1 và một trong các đỉnh và dài hơn đường đi ngắn nhất giữa bất kỳ đỉnh nào khác. Xem bài đăng này cho một thuật toán. Sau đó, chúng ta có thể lặp qua mọi đỉnh và tìm đường đi dài nhất với mọi đỉnh là gốc. Khi chúng tôi có danh sách tất cả các đường dẫn ngắn nhất dài nhất, chúng tôi có thể tìm thấy đường dẫn có giá trị tối đa và trả về nó.


cảm ơn, đường kính đồ thị là chính xác những gì tôi đang tìm kiếm, và heuristic giả giả hoạt động trong trường hợp của tôi. Tôi vừa mới học từ mới ở đó!
radouxju

7

Theo trang Wikipedia Vấn đề đường dẫn dài nhất , vấn đề này

... Là NP-hard, có nghĩa là nó không thể được giải trong thời gian đa thức cho các đồ thị tùy ý trừ khi P = NP. Kết quả độ cứng mạnh hơn cũng được biết cho thấy rất khó để ước tính. Tuy nhiên, nó có một giải pháp thời gian tuyến tính cho các đồ thị chu kỳ có hướng, có các ứng dụng quan trọng trong việc tìm ra đường dẫn quan trọng trong các vấn đề lập lịch.

Nếu bạn làm việc với (hoặc có thể biểu thị biểu đồ của bạn dưới dạng DAG ), thì networkxgói Python sẽ cho phép bạn tính toán nó. Hãy tìm chức năng dag_longest_path.

Trừ khi tôi thiếu một cái gì đó, bạn sẽ cần phải tính toán độ dài giữa các nút biểu đồ và sắp xếp chúng, thật không may, chỉ hoạt động trong thời gian tuyến tính , đó là không có thuật toán hiệu quả cho việc này.


thnks cho câu trả lời, đã + 1 vì thông tin. Tuy nhiên, tôi đang tìm kiếm ĐƯỜNG dài nhất trong mạng (trong ví dụ của tôi, không có đường vòng về phía B hoặc H). Do đó, giải pháp của bạn không chính xác là những gì tôi đang tìm kiếm, ngay cả khi nó gợi ý rằng "sức mạnh vũ phu" có lẽ là giải pháp duy nhất.
radouxju

@radouxju, à tôi hiểu rồi. Chà, hãy xem liệu gen có nhận thấy điều này không, anh ta có nhiều kinh nghiệm với đồ thị, có thể anh ta có một số ý tưởng sáng sủa.
Alex Tereshenkov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.