我正在解决图搜索优化问题。我需要通过有向加权图找到k个最佳非循环最短路径。
我知道有很多精确的和近似的k最佳算法,但是最近的大多数研究似乎都针对非常大,非常稀疏的关系图(例如道路路线和方向),而我的图都不是。
区分我的问题的方面:
该图包含大约160个顶点。
该图几乎完全连接(双向,所以〜160 ^ 2〜= 25k边)
k会很小(可能小于10)
最大路径长度可能会有限制,并且也非常小(例如3-5条边)
我在上面说了“非循环”,但只是重申一下,解决方案不得包含循环。这不是1最佳最短路径的问题,但对于k最佳路径却成为问题-例如,考虑一条道路路线-从A到B的第二最短路径可能与1最佳路径相同,在某个地方的街区附近快速旅行。从数学上讲,这可能是最佳选择,但不是非常有用的解决方案。;-)
对于每个计算,我们可能需要即时重新加权边缘。边缘成本由几个因素的加权总和组成,最终要求(无论何时获得)都可以使用户指定自己对这些加权因子的优先级,从而改变边缘权重。这是一个相对较小的图(我们应该能够以几百KB表示它),因此将图克隆到内存中,应用重新加权,然后对克隆的图执行搜索可能是合理的。但是,如果有一种更有效的搜索方法,可以即时计算权重,那么我很感兴趣。
我正在研究Santos(K最短路径算法),Eppstein 1997(查找k最短路径)等中描述的算法。日元的算法很受关注,这主要是因为现有的Java 实现。我不害怕阅读研究论文,但是我认为值得抛开我的问题的细节,并要求提供指针以节省一些阅读时间。
而且,如果您有指向Java实现的指针,那就更好了。