Есть ли другой способ рассчитать кратчайший путь для близкого полного графика, кроме Dijkstra? У меня около 8000 узлов и около 18 миллионов ребер. Я прошел через нить "a to b on map" и решил использовать Дейкстра. Я написал свой скрипт в Perl, используя библиотеку Boost :: Graph. Но результат не тот, который я ожидал. Для вычисления одного кратчайшего пути понадобилось около 10 + минут, используя вызов $ graph-> dijkstra_shortest_path ($ start_node, $ end_node);Оптимизация Дейкстры для плотного графа?
Я понимаю, что есть много краев, и это может быть причиной медленного времени работы. Я мертв в воде? Есть ли другой способ ускорить это?
1. Плотная матрица смежности. Они попарно точны, но не совсем образуют полный график. 2. Да, они имеют положительный вес. 3. Идеально все. Но в этот момент я буду рад принять случайные образцы или столько, сколько я могу получить. Из 3 вы упомянули, что Dijkstra соответствует моей проблеме, что лучше всего. Но производительность не поддерживает заявленное время работы. Я все еще теряюсь за то, что может быть узким местом. – 2009-09-12 04:16:43
Если ваши веса могут быть сжаты до 8 или 16 бит с целым представлением, возможно, вы могли бы сэкономить некоторое пространство и, следовательно, время? – Greg
Кроме того, если граф неориентирован, то вы можете уменьшить объем памяти наполовину, используя только верхний треугольник матрицы. Я сосредоточен на памяти здесь, потому что у вас могут быть проблемы с пропускной способностью данных. – Greg