Uniform Cost Search (UCS)

BFS用于找到每个边的权值是一样的图的最短路径,如果图中每个边的权值不一样了,就用到了UCS。

参考了https://blog.csdn.net/jdh99/article/details/80872364

算法思路:

1.数据结构

frontier: 优先队列,用来存储到达当前顶点花费的代价,这里的代价是目前最小的代价,后面如果有到达该点的更短路径,则更新这个代价。探索点的时候,每次都从这个优先队列里面挑出那个代价最小的点,然后扩展该点。

explored:用一个数组来存储就行,存放的是已经探索过的点。

father:数组,用来存储当前点的父节点是谁,以便用于找到这个路径,如果不需要求路径,只需要最短路径的长度,就用不到这个father数组

2. 算法流程

(1)将起始点加入到frontier中,将与frontier相连的点进行探索,每个点的代价(后面用cost替代)是从起点到该点的距离,然后将所有的点加入到frontier里面

(2) 从frontier里面挑出cost最小的点A,判断该点是不是终点,如果是终点算法结束。如果不是终点,探索与该点相连的所有点,每个点的cost是A点的cost加上A点到B点的路径的权重。如果B点是已经出现在frontier里面了,比较一下原来的cost与新生成的cost哪个更小,然后将最小的cost赋值给B点,并更新它的父节点。

(3) 如果frontier为空还没有找到终点,则没有到达终点的最短路径

3. example

  • 将A点加入到frontier里面
  • 从frontier里面将A点拿出来放到explored里面,判断一下A点是不是终点(这里的终点是C点),这里不是,然后探索与A相连的点。A点到D点的cost是A点的cos(起始点的cost为0)加上A点到D点的权重,一共是2,也就是说D点的cost为2,同理B点的cost为3,将D点与B点加入到frontier里面。
  • 从frontier里面找出cost最小的点,这里是D点,将D点放到explore里面,然后探索D点,方法与上一步一样。将C点加入到frontier里面,这里C点的cost是8,虽然我们已经找到了终点,但是这条路径可能不是最优的,所以需要继续探索其他路径。直到我们在frontier里面找到了终点,且终点是frontier里面cost最小的点,那么此时终点的cost才是最小的cost,我们找到最短路径,然后结束算法。 
  • 从frontier里面找cost最小的点,这里是B点,将B点放到explored里面,然后将E点加入到frontier里面
  • 从frontier里面找cost最小的点E,将E放入到explored里面,此时C点为cost花费最小的点,此时有个问题,因为C点已经在frontier里面了,所有这里就用到了上面提到的更新节点的cost,比较一下新生的cost与原来的cost那个更小,原来是8,现在是7,现在更小,所以更新C点的cost为7
  • 从frontier里面找cost最小的点,这里是C点,且C点是我们要找的终点,到此算法结束,我们找到最短路径,值为7
  • 17
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 统一代价搜索(Uniform-Cost Search)是一种基于代价的搜索算法,它在搜索过程中考虑每个节点的代价,并选择代价最小的节点进行扩展。该算法通常用于解决最短路径问题。在搜索过程中,统一代价搜索会维护一个代价最小的优先队列,每次从队列中取出代价最小的节点进行扩展。如果扩展出的节点已经被访问过,则更新该节点的代价信息。该算法的时间复杂度为O(b^(1+c/ε)),其中b是分支因子,c是最短路径的代价,ε是代价的最小单位。 ### 回答2: Uniform-cost search(统一费用搜索)是一种基于代价的搜索算法,用于解决问题的最佳路径问题。它的目标是找到一条从起点到目标节点的最佳路径,所谓最佳路径是指路径上的边的代价之和最小。 Uniform-cost search的搜索过程类似于广度优先搜索,不同的是它在扩展节点时会考虑节点到起点的代价。具体的搜索过程如下: 1. 初始化将起点加入到开放列表中,并将其代价设置为0。 2. 从开放列表中选择代价最小的节点,将其作为当前节点。 3. 如果当前节点是目标节点,则搜索结束,返回找到的最佳路径。 4. 否则,将当前节点标记为已经扩展过,并将其邻居节点加入到开放列表中(如果它们没有被扩展过)。 5. 如果邻居节点已经在开放列表中,则比较从当前节点到达邻居节点的新路径是否代价更小,如果是则更新邻居节点的父节点和代价。 6. 重复步骤2-5,直到开放列表为空或者找到目标节点。 Uniform-cost search的优点是能够找到最佳路径,即使路径的代价是动态变化的。然而,它的缺点是在搜索空间较大时,可能需要扩展大量的节点,导致效率较低。 总结起来,Uniform-cost search是一种代价敏感的搜索算法,通过考虑节点的代价选择最佳路径。它在寻找最优解的问题上非常有用,但在搜索空间较大时可能会出现效率问题。 ### 回答3: 统一成本搜索(Uniform-cost search)是一种用于解决图搜索问题的算法。与其他搜索算法相比,统一成本搜索算法不仅仅考虑了节点间的距离,还考虑了通过每个节点到达目标节点的费用。 统一成本搜索算法采用了广度优先搜索的思想,但是在选择下一个节点时,不仅仅考虑了距离,还会考虑路径的费用。具体来说,该算法会维护一个优先级队列,队列中的每个元素都包含了一个节点及到达该节点的路径的费用。在搜索过程中,会优先选择费用最小的路径继续探索。 统一成本搜索算法的步骤如下: 1. 初始化一个优先级队列,并将起始节点加入队列。 2. 从队列中取出费用最小的节点,将其标记为已访问。 3. 检查该节点是否为目标节点,若是则搜索结束,找到了最佳路径。 4. 若不是目标节点,则将该节点的所有相邻节点加入队列,并记录通过当前节点到达相邻节点的路径费用。 5. 重复步骤2-4,直到队列为空或找到目标节点。 统一成本搜索算法的优点是能够找到费用最低的路径,能够解决带权重的图搜索问题。然而,这也是它的缺点,因为对于较大的图,算法的时间和空间复杂度都会很高。此外,如果存在环路或负权重的路径,算法可能陷入循环或得不到正确的结果。因此,在使用统一成本搜索算法时,需要根据具体问题的特点进行权衡和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值