Алгоритм кратчайшего пути в частичном графе

Я рекурсивно строю график в java, используя библиотеку graphstream. Однако этот график настолько огромен, что рекурсия очень глубокая, и это заканчивается переполнением стека. Поверьте мне, даже итерация не решит мою проблему. Я просто получу ошибку времени выполнения в будущем.

Моя цель - использовать алгоритм поиска, такой как Disjktra или A *, или что-то еще на графике в конце.

Поскольку у меня нет всего графа, я искал в литературе такие вещи, как алгоритм кратчайшего пути в частичных картах; использование эвристики я не мог найти много.

Я был бы признателен, если бы кто-нибудь мог дать мне несколько советов (документы, идеи; реализация была бы джекпотом!!!! :-D). Я просмотрел алгоритмы, такие как PHA* или некоторые другие..


person candidson    schedule 27.08.2013    source источник
comment
я не думаю, что алгоритм кратчайшего пути на частичном графе поможет, поскольку каждое новое ребро может сделать недействительными все результаты, скомпилированные до сих пор. я также не понимаю, почему итерация убьет вас тоже - просто убедитесь, что текущий корневой путь dfs выделен из кучи, а не из стека (например, с помощью new вместо автоматических переменных), и все будет хорошо, если вы не буквально иметь миллиарды узлов. может быть, ваша реальная проблема заключается в отсутствии обнаружения циклов в вашем коде, возможно, с отрицательными весами?   -  person collapsar    schedule 27.08.2013
comment
Я бы рассмотрел алгоритмы, которые обрабатывают файлы полного чтения и записи графа, не пытаясь загрузить все это в память; например, вы можете легко выполнить поиск кратчайшего пути в ширину, отсортировав узлы по расстоянию от начальной точки.   -  person Lorenzo Gatti    schedule 27.08.2013
comment
@collapsar: Спасибо за идею. Итерация убьет меня, так как у меня много узлов. Может доходить до миллиардов.. Да. И я дважды-тройно проверяю свой код: я уверен, что у меня там нет петли. Вот почему я подумал, что использование эвристики должно/может помочь мне найти решение...   -  person candidson    schedule 27.08.2013
comment
@LorenzoGatti: я рассмотрю ваши предложения. Спасибо.   -  person candidson    schedule 27.08.2013
comment
@pro: вы нашли решение для этого после? что это было?   -  person Jeff    schedule 03.03.2016
comment
@Jeff: Я знаю, что этот пост очень старый ... Но я решил его тогда, используя алгоритм 1990 года от Korf, R. E. (1990) Эвристический поиск в реальном времени. Можно найти здесь   -  person candidson    schedule 17.03.2017


Ответы (1)


Я знаю, что этот пост очень старый... Но я решил его тогда, используя алгоритм 1990 года, из Korf, R. E. (1990) "Эвристический поиск в реальном времени". Можно найти здесь: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.137.1955&rep=rep1&type=pdf

person candidson    schedule 24.07.2017