在前向搜索算法中,如果两个项目相等会发生什么?
In a forward search algorithm, what happens if both items are equal?
在正向搜索算法中,如果两项相等怎么办?
前向搜索算法源于 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 个具有相同最低成本的条目时,我不确定该怎么办。我是否将两者都移至已确认列表?
还是选择在暂定名单中停留时间最长的条目?
如果有两个条目具有相同的最低成本,您可以选择其中一个 - 没关系。例如,如果您的暂定列表如下所示:
10 4 9 7 7 3 2 11 5 2
并且您通过使用排序列表找到最低成本,它看起来像这样:
2 2 3 4 5 7 7 9 10 11
但是你选第一个还是第二个都没有关系
如果您选择 "wrong" 一个,结果证明所选的那个导致更长的路径,算法将在继续进行时自行纠正。
编辑:
这个答案实际上与 another related question which may well be a dupe. In the spirit of this meta-post 中的答案非常相似,我不会删除答案,但我想我会添加更多细节,所以它不再只是相同的信息。
显然,这里的问题是通过 select 将一个节点置于另一个节点之上,您 "miss out" 在一条仍然存在的路径上。但是,由于您引用的前向搜索算法是从 Dijkstra 派生的,因此它遵循相同的规则。您可能对 Dijkstra 的担忧之一是,如果我立即选择最低成本会发生什么,但实际上有一条不同的路径,如果不是立即更短的话,最终会更短吗?
例如,你可能有一个成本为1的节点和一个成本为2的节点。你选择成本为1的节点,但实际上,在长运行中,选择成本更低的节点成本 2。
这里确实是同一个问题,只是两个节点的成本相同。但是,如果它们的权重都是正数,就可以证明 Dijkstra 算法总能找到最短路径。有证据表明 here.
因此,select 任何一个最小权重的节点都可以。算法最终到达那里。
在正向搜索算法中,如果两项相等怎么办?
前向搜索算法源于 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 个具有相同最低成本的条目时,我不确定该怎么办。我是否将两者都移至已确认列表? 还是选择在暂定名单中停留时间最长的条目?
如果有两个条目具有相同的最低成本,您可以选择其中一个 - 没关系。例如,如果您的暂定列表如下所示:
10 4 9 7 7 3 2 11 5 2
并且您通过使用排序列表找到最低成本,它看起来像这样:
2 2 3 4 5 7 7 9 10 11
但是你选第一个还是第二个都没有关系
如果您选择 "wrong" 一个,结果证明所选的那个导致更长的路径,算法将在继续进行时自行纠正。
编辑:
这个答案实际上与 another related question which may well be a dupe. In the spirit of this meta-post 中的答案非常相似,我不会删除答案,但我想我会添加更多细节,所以它不再只是相同的信息。
显然,这里的问题是通过 select 将一个节点置于另一个节点之上,您 "miss out" 在一条仍然存在的路径上。但是,由于您引用的前向搜索算法是从 Dijkstra 派生的,因此它遵循相同的规则。您可能对 Dijkstra 的担忧之一是,如果我立即选择最低成本会发生什么,但实际上有一条不同的路径,如果不是立即更短的话,最终会更短吗?
例如,你可能有一个成本为1的节点和一个成本为2的节点。你选择成本为1的节点,但实际上,在长运行中,选择成本更低的节点成本 2。
这里确实是同一个问题,只是两个节点的成本相同。但是,如果它们的权重都是正数,就可以证明 Dijkstra 算法总能找到最短路径。有证据表明 here.
因此,select 任何一个最小权重的节点都可以。算法最终到达那里。