我在我的应用程序中使用了略微修改的Dijkstra算法,但它非常缓慢,我知道一定有更好的方法。我的输入数据是公交车站点,并指定了它们之间的旅行时间(约400个节点和800条路径,最大结果深度= 4(最多4次公交换乘或没有)。
输入数据(公交路线):
作为一种更复杂的图形,例如主城市(节点)与不同城市有170个连接的情况下,Dijkstra算法会变慢(需要超过5秒),因为它首先逐个计算所有邻居,而不是“尝试”通过其他方式到达目标地点...。
你能推荐我其他适合的算法吗?
我看了一下:
- http://xlinux.nist.gov/dads//HTML/bellmanford.html(速度更快吗?) - http://jboost.sourceforge.net/examples.html(这里没有直接的例子...)
如果有以下可选项,将会很棒: - 选择最小数量的公交换乘或最短时间 - 查看替代路线(如果旅行时间相似)
感谢您的建议。
输入数据(公交路线):
bus_id | location-from | location-to | travel-time | calendar_switch_for_today
XX | A | B | 12 | 1
XX | B | C | 25 | 1
YY | C | D | 5 | 1
ZZ | A | D | 15 | 0
dijkstraResolve(A,D, '2012-10-10') -> (XX,A,B,12),(XX,B,C,25),(YY,C,D,5)
=> one bus change, 3 bus stops to final destination
* A->D cant be used as calendar switch is OFF
作为一种更复杂的图形,例如主城市(节点)与不同城市有170个连接的情况下,Dijkstra算法会变慢(需要超过5秒),因为它首先逐个计算所有邻居,而不是“尝试”通过其他方式到达目标地点...。
你能推荐我其他适合的算法吗?
我看了一下:
- http://xlinux.nist.gov/dads//HTML/bellmanford.html(速度更快吗?) - http://jboost.sourceforge.net/examples.html(这里没有直接的例子...)
如果有以下可选项,将会很棒: - 选择最小数量的公交换乘或最短时间 - 查看替代路线(如果旅行时间相似)
感谢您的建议。