MapReduce là một thuật toán phân phối lớn cho điều này, mặc dù nó có thể là một chút cao-powered quá. Nếu bạn quan tâm đến điều đó, hãy xem this lecture hoặc có thể là blog post để lấy cảm hứng. (Trong thực tế, khi tôi được dạy MapReduce, đây là một trong những ví dụ đầu tiên.)
Đối với 250k cạnh và 70k, có vẻ như đồ thị tương đối thưa thớt, Dijkstra's algorithm chạy trong O(E + V log V)
cho mỗi nút, để chạy đầy đủ thời gian (tất cả các nguồn) của O(VE + V^2 log V)
. Điều này sẽ đủ nhanh, nhưng những điều cần lưu ý thường áp dụng cho Dijkstra's. (Các cạnh tiêu cực.)
Bạn cũng có thể xem Johnson's algorithm nếu vấn đề của bạn có liên quan đến trọng số âm, nhưng không phải là chu kỳ âm. Cụ thể, nó cũng có thể được phân phối, vì nó có biểu đồ được chỉnh sửa lại và chạy thuật toán Dijkstra từ mỗi nút.
Bạn là chính xác, đây không phải là một vấn đề bài tập về nhà, chỉ cần một dự án cho vui. Tôi đã không được coi là xấp xỉ, nhưng trong trường hợp này tôi cần phải có được con đường thực tế giữa hai nút, và không chỉ là khoảng cách. Tôi không thấy làm thế nào một xấp xỉ có thể thực sự giúp đỡ trong trường hợp này, nhưng tôi sẽ quan tâm đến nghe như thế nào nếu họ có thể. Chỉnh sửa: Đây là phản hồi cho nhận xét đã bị xóa. Oh well. – awegawef
Xin lỗi tôi đã xóa nó!Tôi chỉ hỏi nếu bạn đã cân nhắc việc giải quyết bằng cách sử dụng xấp xỉ nhưng sau đó tôi quyết định không hỏi dù bạn đã chấp nhận câu trả lời chưa. :) –
Và một xấp xỉ trong bối cảnh này sẽ là một con đường không được đảm bảo là ngắn nhất, nhưng được đảm bảo không dài hơn x% dài hơn con đường ngắn nhất. –