У надзвичайно великих наборах даних, таких як, щоб отримати такі швидкі результати, я вважаю, що найкраще використовувати структуру даних об'єднання-пошуку з стисненням шляху. Однак якщо ви хочете використовувати лише алгоритм Джикстра і оптимізувати це, то зводиться до того, яку інформацію має кожен вузол у графі. Вам, швидше за все, не потрібно робити всі 1500 запитів.
Наприклад, розглянемо наступний приклад. Скажімо, я намагаюся знайти ступінь розлуки між будь-якими двома акторами (число Бекона), і я хочу знайти найменш зважений шлях (шлях, використовуючи новітні фільми, можливі). Скажімо, у мене функція називається shortestPath(actor A, actor B);
. Розглянемо наступний сценарій.
Якщо Актор Актер виступає з 1970 року, а Актор Б виступає з 2000 року, то, враховуючи цю інформацію, було б набагато логічніше знайти шлях, починаючи з першого фільму про Актора В, а потім пройти шлях до Актора А. на противагу ітерації через кожен фільм, в якому виступав Актор А.
Таким чином, головний момент полягає в тому, що оптимізація алгоритму Джикстри дійсно залежить від того, яким є ваш набір даних. Вам потрібно буде надати більше інформації про те, що пов'язаний з вашим набором даних, щоб допомогти вам оптимізувати ваш алгоритм.
EDIT: Скажімо, ви намагаєтеся знайти найкоротший шлях між двома містами в одній країні, і якщо ця країна довша, ніж вона ширша, наприклад, Аргентина, то ви можете робити запити на основі довготи та широти країн межі. Потім ви можете почати переходити вертикально (використовуючи довготу) на відміну від горизонталі. Звичайно, потрібно було б обробляти винятки, але ви отримуєте загальне уявлення.