Существует специальная реализация KSPA, которую необходимо переписать. Текущая реализация использует модифицированный алгоритм Дейкстры, псевдокод которого примерно описан ниже. Я думаю, что он широко известен как KSPA, использующий стратегию удаления краев. (Я новичок в теории графов).
Step:-1. Calculate the shortest path between any given pair of nodes using the Dijkstra algorithm. k = 0 here.
Step:-2. Set k = 1
Step:-3. Extract all the edges from all the ‘k-1’ shortest path trees. Add the same to a linked list Edge_List.
Step:-4. Create a combination of ‘k’ edges from Edge_List to be deleted at once such that each edge belongs to a different SPT (Shortest Path Tree). This can be done by inspecting the ‘k’ value for each edge of the combination considered. The ‘k’ value has to be different for each of the edge of the chosen combination.
Step:-5. Delete the combination of edges chosen in the above step temporarily from the graph in memory.
Step:-6. Re-run Dijkstra for the same pair of nodes as in Step:-1.
Step:-7. Add the resulting path into a temporary list of paths. Paths_List.
Step:-8. Restore the deleted edges back into the graph.
Step:-9. Go to Step:-4 to get another combination of edges for deletion until all unique combinations are exhausted. This is nothing but choosing ‘r’ edges at a time among ‘n’ edges => nCr.
Step:-10. The ‘k+1’ th shortest path is = Minimum(Paths_List).
Step:-11. k = k + 1 Go to Step:-3, until k < N.
Step:-12. STOP
Как я понимаю алгоритм, чтобы получить k-й кратчайший путь, SPT 'k-1' должны быть найдены между каждой парой источник-назначение, а ребра 'k-1', каждый из одного SPT, должны быть удалены одновременно для каждой комбинации ,
Очевидно, что этот алгоритм имеет комбинаторную сложность и забивает сервер на больших графах. Люди предложили мне алгоритм Эппштейна (http://www.ics.uci.edu/~eppstein/pubs/Epp-SJC-98.pdf).. Но в этом документе упоминается «орграф», и я не увидел упоминания о том, что он работает только для орграфов. Я просто хотел спросить здесь, кто-нибудь использовал этот алгоритм на неориентированный граф?
Если нет, существуют ли хорошие алгоритмы (с точки зрения сложности времени) для реализации KSPA на неориентированном графе?
Заранее спасибо,