点数加速最快的路径

时间:2016-07-02 00:59:19

标签: algorithm math graph-theory shortest-path

这只是我自己想出来的东西,但它似乎是一个有趣的问题而且让我感到难过。

你在二维空间中有一组点,其中一个点被指定为"开始"和一个"结束"。每个点都有坐标(以原点为单位),但也有一个"加速数" (以米-V为单位的Δ-V)。到达某个点(包括开始点)后,您可以在任何方向上加速到该点的加速度数。边缘成本取决于您当前的速度,但您还必须朝着正确的方向前进。

是否有一种有效的算法来寻找到达终点的最快路径?我没有想出比#34更好的东西;尝试每条路径并检查结果"。 Djikstra和其他简单的算法都不起作用,因为如果它们以不同的初始速度到达,你就不能轻易地说中间点的一条路径比另一条路径更好或更差。 / p>

如果这太简单了,如果你添加了必须在终点停止的要求怎么办? (即,当你到达终点时,你的加速度值必须小于它。)

编辑:要明确,方向很重要。在遍历图形时保持速度矢量,加速意味着向其添加矢量,其大小限制在该点的加速度数。这意味着有些情况下,建立一个巨大的速度是有害的,因为你将走得太快,以及#34;转向"走向其他有价值的点/您的目的地。

2 个答案:

答案 0 :(得分:3)

我认为你只需要使用每个点的加速度就可以在一般情况下完成NP问题。考虑一个如下所示的输入:

enter image description here

如果"距离很远"在终点和其余点之间足够大以支配最终解决方案的成本,找到最佳解决方案将归结为找到一种方法从图的开始获取尽可能多的速度提升。如果你只允许每个点传递一次,这相当于汉密尔顿路径问题,即NP完全。

那就是说,你的问题有一些额外的规则(距离是欧几里德,图表总是完整的),这可能最终使问题更容易。

答案 1 :(得分:3)

您可以尝试通过递归跟踪从末端到另一个节点的路径来向后解决此问题,然后指定沿着该行的最大速度,以便能够从该节点转向任何其他节点。剔除规则将是从当前到下一个节点的路径以较低的速度存在且从末端花费的时间较少,这将意味着默认情况下另一个路径更优化,因为它可以到达更多节点并且花费更少的时间。一旦路径到达起始节点,就应该根据开始时可达到的最大速度重新计算并存储。然后你花费更少的时间来收集路径。

您必须在此处搜索任何可用路径,因为图表上的可用路径取决于具有间接机制的过去状态,使用较少的速度可以提供更多选择。