搜索策略实现-DFS,BFS,爬山法,分支界限法

本文详细介绍了四种搜索策略:深度优先搜索(DFS)、广度优先搜索(BFS)、爬山法以及分支界限法。针对每种方法,阐述了其数据结构、步骤以及在解决最小哈密顿环问题中的应用。DFS和BFS利用队列和栈来遍历节点,而爬山法通过选择加权距离大的孩子节点来寻找最优解。分支界限法则结合了爬山法,利用已有的最优解剪枝,以提高效率。
摘要由CSDN通过智能技术生成

DFS

  1. 数据结构

    class Node(object):
        def __init__(self):
            self.way= None
            self.node= None
    
  2. 步骤

    1. 构建一个栈S,栈中初始状态只含有初始节点0的节点类(Node(0,[])).
    2. 每次从栈顶弹出一个节点 i。
      1. 当节点i的编号为0,回到出发节点,而且i.way符合要求(每个节点只经过一次,最后回到初始点0),输出路径。如果i.way不符合要求,舍弃不操作。
      2. 当节点i的编号不为0,如果i.way符合要求(每个节点经过一次),则将i的孩子节点以及路径压入栈中。如果i.way不符合要求,舍弃不操作。
    3. 重复2的操作,当栈为空时候,说明没有可行解,程序终止。

BFS

  1. 数据结构

    class Node(object):
        def init(self):
            self.way= None
            self.node= None
    
  2. 步骤:

    1. 构建一个队列Q,队列中初始状态只含有初始节点0的节点类(Node(0,[])).
    2. 每次取队头的第一个节点 i。
      1. 当节点i的编号为0,回到出发节点,而且i.way符合要求(每个节点只经过一次,最后回到初始点 0),输出路径。如果i.way不符合要求,舍弃不操作。
      2. 当节点i的编号不为0,如果i.way符合要求(每个节点经过一次),则将i的孩子节点以及路径压入队列Q中。如果i.way不符合要求,舍弃不操作。
    3. 重复2的操作,当队列为空时候,说明没有可行解,程序终止。

爬山法

  1. 数据结构

       class Node(object):
        def init(self):
            self.way= None
               self.cost = 0
            self.node= None
    
  2. 步骤

    1. 构建一个栈S,栈中初始状态只含有初始节点0的节点类(Node(0,[])).
    2. 每次从栈顶弹出一个节点 i。
      1. 当节点i的编号为0,回到出发节点,而且i.way符合要求(每个节点只经过一次,最后回到初始点0),输出路径。如果i.way不符合要求,舍弃不操作。
      2. 当节点i的编号不为0,如果i.way符合要求(每个节点经过一次),将i的孩子节点按照路径加权距离大到小排序,然后依次将i的孩子节点压入栈中。如果i.way不符合要求,舍弃不操作。
    3. 重复2的操作,当栈为空时候,说明没有可行解,程序终止。

最小哈密顿环

分支界限法

  1. 分支界限法可以用于求解优化问题。 特点:利用已经得到的可行解,剪除不能得到优化解的分支。
  2. 两个要素:
    1. 产生可行解的策略:使用采用爬山法得到第一个可行解,整个过程采用最佳优先策略。
    2. 剪除分支的策略: 判断以x为根节点可行解代价是否大于已知可行解的最小代
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值