Trên các tập dữ liệu cực lớn như vậy, để có được kết quả nhanh như vậy, tôi thấy tốt nhất là sử dụng cấu trúc dữ liệu tìm kết hợp với nén đường dẫn. Tuy nhiên, nếu bạn đang tìm cách chỉ sử dụng thuật toán của Djikstra và tối ưu hóa điều đó, thì đó là thông tin mà mỗi nút trong biểu đồ có. Bạn rất có thể không cần thực hiện tất cả 1.500 truy vấn.
Ví dụ, hãy xem xét ví dụ sau. Hãy nói rằng tôi đang cố gắng tìm mức độ phân tách giữa bất kỳ 2 diễn viên nào (số Bacon) và tôi muốn tìm đường dẫn có trọng số thấp nhất (đường dẫn sử dụng các bộ phim mới nhất có thể). Bây giờ, hãy nói rằng tôi có một chức năng được gọi là shortestPath(actor A, actor B);
. Hãy xem xét các kịch bản sau đây.
Nếu Diễn viên A đã diễn xuất từ năm 1970 và Diễn viên B đã diễn xuất từ năm 2000, sau đó được cung cấp thông tin đó, sẽ hợp lý hơn nhiều khi tìm thấy một con đường bắt đầu từ bộ phim đầu tiên của Diễn viên B và sau đó đi qua Diễn viên A. Như trái ngược với việc lặp đi lặp lại qua mỗi bộ phim Diễn viên A đã đóng.
Do đó, điểm chính là việc tối ưu hóa thuật toán của Djikstra thực sự phụ thuộc vào tập dữ liệu của bạn là gì. Bạn sẽ cần cung cấp thêm thông tin về những gì bộ dữ liệu của bạn đòi hỏi cho chúng tôi để giúp bạn tối ưu hóa thuật toán của mình.
EDIT: Giả sử bạn đang cố gắng tìm con đường ngắn nhất giữa 2 thành phố trong cùng một quốc gia và nếu quốc gia này dài hơn rộng hơn, chẳng hạn như Argentina, thì bạn có thể thực hiện các truy vấn của mình dựa trên kinh độ và vĩ độ của các quốc gia ranh giới. Sau đó, bạn có thể bắt đầu di chuyển ngang (sử dụng kinh độ) trái ngược với chiều ngang. Tất nhiên, cần phải có xử lý ngoại lệ, nhưng bạn có được ý tưởng chung.