查找从节点A到节点B的最低费用,并保留路径信息

时间:2019-03-27 00:26:06

标签: algorithm

我有一个问题是要找到从最小数量节点(1)到最大数量节点(7)的最小成本。

成本是节点之间的边缘。我给他们贴了标签。

这个问题让我想到了Dijkstra,它导致了O((v+e) log v)

的时间复杂性

还有其他更好的方法可以有效地解决此问题吗?

另一个要求是保留路径信息,是否有保留路径的想法?

enter image description here

1 个答案:

答案 0 :(得分:1)

正如其他人所指出的那样,复杂性正如您所说的那样,不能再提高了。正如@ n​​ico-schertler所评论的那样,从两侧并行搜索(或轮流搜索),并且一旦碰到东西就停止搜索比从一侧进行搜索要快,但是它具有相同的复杂性。在这种情况下(双向边缘的固定成本)是有可能的,但在通常情况下(例如,成本取决于已采用的路径),在Dijkstra仍然适用的情况下就不需要。

关于路径的保留:当然,只有当您将路径作为答案时,整个事情才有意义。结果有两种主要方法。

一种方法是将已经到达某个节点的路径与列表中的节点一起存储(传统实现中为白色/灰色)。每次添加新节点时,都将其先前节点的路径扩展一级。如果找到目标节点,则可以直接返回路径(以及费用总和)。当然,这种方式意味着要占用大量内存。

另一种方法是不将原始节点与每个新找到的节点一起存储,因此每个节点都指向从头开始访问的节点。可以将其视为在每个节点上放置路标的方式。这样,如果找到目标节点,则必须从每个节点退回到最初访问的那个节点,并在此过程中以相反的顺序构建路径。然后,您可以返回此路径。