Масштабирование реализации алгоритма Дейкстры

0

У меня есть график с каждым Edge, имеющим некоторый weight.

Я реализовал алгоритм dijkstra для поиска кратчайшего пути от Vertex A до B.

Weights для графика считываются из БД Key/Value. [ redis.io ].

  • Каждый Weights DB составляет около 2 ГБ.
  • Для weights имеется 50 БД. [Или 50 разных файлов, каждый 2 ГБ, имеющих значения веса, которые я сохранил в Redis.io].
  • Для поиска кратчайшего пути используется function FindPath(Start, End, DB_name).

Dijkstras считывает значения веса из памяти [Redio.io является хранилищем значений ключа в памяти]. Но моя оперативная память - всего 6 ГБ. Невозможно одновременно хранить в памяти 2 ГБ * 50 БД.

Запрос Пути может быть случайным и параллельным.

Каков наилучший способ хранения БД Weights?

Увеличивает ли опция RAM только для увеличения скорости выполнения программы?

РЕДАКТИРОВАТЬ

Количество краев: 4,652,505

  • 0
    Сколько узлов и ребер у вас есть?
  • 0
    Обновил вопрос.
Показать ещё 3 комментария
Теги:
algorithm
graph-theory

1 ответ

2

Если речь идет о скорости, основной опцией является увеличение бара. Вы не можете достичь аналогичной производительности с помощью nosql DB (например, mongodb). Другой вариант - попытаться распараллелить алгоритм в многоядерной системе. Но это очень сложно, поскольку окончательное решение является глобальным.

[EDIT] Самый быстрый способ хранения весов - это смежный массив весов, проиндексированных по количеству краев. Один массив на БД. Если все массивы не могут поместиться в ваш плунжер, вы можете создать некоторые базовые механизмы кэширования, обменявшись DB из файла в массив (надеясь, что не все db будут доступны одновременно).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню