如果两个节点的权重相等,则在优先级队列中首先弹出哪个节点

时间:2016-02-10 05:17:25

标签: python search stack nodes priority-queue

我正在使用这个GraphSearch伪代码算法从起始位置找到目标的最短路径:

function GRAPH-SEARCH(problem,fringe,strategy) return a solution, or failure
   closed <-- an empty set
   fringe <-- INSERT(MAKE-NODE(INITIAL-STATE[problem]),fringe)
   loop do
      if fringe is empty then return failure
      node <-- REMOVE-FRONT(fringe,strategy)
      if STATE[node] is not in closed then
         add STATE[node] to closed
         for child-node in EXPAND(STATE[node],problem) do
            fringe <-- INSERT(child-node,fringe)
         end
   end

我正在实施从起始位置搜索目标的A*强调。 A*搜索使用公式:

f(n)= g(n)+ h(n)

其中g(n)是到达当前child-node的成本,h(n)是到达目标的启发式值(我们假设启发式确定是可以接受的)和f(n)是我们分配给nodefringe的组合值。

A*搜索中,PriorityQueue用于确定接下来测试目标状态的child-nodepop()和/或扩展到更多子项,这种情况是具有最低值的child-node

这是我的问题:

我的当前PriorityQueue如下:

     S -> B = 1 + 3 = 4  // The cost to B + the heuristic value to goal
     S -> A = 1 + 3 = 4  // The cost to A + the heuristic value to goal
          S = 0 + 0 = 0  // Has been popped & expanded

S是起始位置,AB是子节点。 有两条路径分配了下一个最低值4,那么PriorityQueue pop()下一条路径是哪条路径?

1 个答案:

答案 0 :(得分:0)

我已经了解到PriorityQueue的性质,如果下一个项目的优先级值相等,那么结构只会被视为Queue

在这种情况下,这意味着由于S -> A = 1 + 3 = 4是第一个,因此它将是第一个。