在前向搜索算法中,如果两个项目相同,您会怎么做?
前向搜索算法源于Dijkstra算法
前向搜索算法
1. Initialize the Confirmed list with an entry for myself; this entry has
a cost of 0.
2. For the node just added to the Confirmed list in the previous step,
call it node Next and select its LSP.
3. For each neighbor (Neighbor) of Next, calculate the cost (Cost) to
reach this Neighbor as the sum of the cost from myself to Next and
from Next to Neighbor.
(a) If Neighbor is currently on neither the Confirmed nor the
Tentative list, then add (Neighbor, Cost, NextHop) to the
Tentative list, where NextHop is the direction I go to reach Next.
(b) If Neighbor is currently on the Tentative list, and the Cost is less
than the currently listed cost for Neighbor, then replace the
current entry with (Neighbor, Cost, NextHop), where NextHop
is the direction I go to reach Next.
4. If the Tentative list is empty, stop. Otherwise, pick the entry from
the Tentative list with the lowest cost, move it to the Confirmed list,
and return to step 2.
在最后一步,我不确定当出现2个具有相同最低成本的条目时该怎么办。我是否同时移动到确认列表? 或者我选择暂定在暂定名单中的条目最长?
答案 0 :(得分:0)
如果有两个条目具有相同的最低成本,您可以选择其中之一 - 它并不重要。例如,如果您的暂定列表如下所示:
10 4 9 7 7 3 2 11 5 2
并且您通过使用排序列表找到了最低成本,它看起来像这样:
2 2 3 4 5 7 7 9 10 11
但是,无论你选择前2名还是第2名都没关系。
如果您选择"错误"一,并且结果证明所选择的那个导致更长的路径,算法将在它继续时自我纠正。
编辑:
这个答案实际上与another related question中的答案非常相似,很可能是一个骗局。本着this meta-post的精神,我不会删除答案,但我认为我会添加更多详细信息,因此它不仅仅是相同的信息。
显然,这里的关注点是,通过选择一个节点而不是另一个节点,你会错过"在仍然存在的路径上。但是,由于您引用的前向搜索算法源自Dijkstra,因此它遵循相同的规则。您可能对Dijkstra提出的一个担忧是,如果我立即选择最低成本会发生什么,但实际上是一条不同的路径,如果不是立即缩短的话?
例如,您可能有一个成本为1的节点和一个成本为2的节点。您选择成本为1的节点,但实际上,从长远来看,选择成本2的节点会更便宜。
这里的问题确实如此,除了两个节点都有相同的成本。但是,如果它们都具有正权重,则可以证明Dijkstra的算法总能找到最短路径。这是here的证明。
因此,选择最小重量的节点是很好的。算法最终到达那里。