算法复习之搜索(bfs)

广度优先搜索及状态编码方法
博客介绍了广度优先搜索,其特点是先生成的节点先扩展、逐层往下扩展,需较大储存空间。还提到用合适编码表示状态以减少储存代价,如状压,介绍了给定排列求序号和给定序号求排列的方法,以及时间与空间的权衡,并以八数码问题为例。
广度优先搜索
  • 先生成的节点先扩展

  • 逐层往下扩展(可记录steps)

  • 需要储存空间大

  • 勿忘记忆

  • 如何表示状态?

  • 用合适编码表示状态,减少储存代价——状压

  • 编码有时候是正常的数的进制表示相应的状态,有时候则需要进行:排列到序号,序号到排列的转换

  • 常用的给定排列求序号:

    • 思想:算出有多少个排列比给定排列小
    • 具体来讲,就是分别算,1-a放在这一位有多少排列,即(a-1)*(k-i)!
    • 可以专门写一个计算阶乘的函数
  • 常用的给定序号求排列:

    • 假定是x,计算此时的序号,比较大小,再次尝试
  • 时间与空间的权衡

    • 对于状态数较小的问题,可以用最直接的方式编码以空间换时间
    • 对于状态数太大的问题,需要利用好的编码方法以时间换空间

示例:八数码问题(一个状态实际上是0~8的一个排列)
前提:奇排列不能转化成偶排列或相反

代码后补吧~太长了

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值