热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

搜索技术【广度优先搜索】简介分支限界法

搜索技术【广度优先搜索】-简介&分支限界法【简介】在图的应用中已讲过图的广度优先搜索,树上的广度优先搜索实际上就是层次遍历。首先遍历第1层,然后第



搜索技术【广度优先搜索】 - 简介 & 分支限界法

【简介】

在图的应用中已讲过图的广度优先搜索,树上的广度优先搜索实际上就是层次遍历。

首先遍历第1层,然后第2层……同一层按照从左向右的顺序访问,直到最后一层。一棵树如下图所示,

在这里插入图片描述

首先遍历第1层A;然后遍历第2层,从左向右遍历B、C;再遍历第3层,从左向右遍历D、E、F;再遍历第4层G。

【分支限界法】

分支限界法通常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。

首先将根节点加入活节点表中,接着从活节点表中取出根节点,使其成为当前扩展节点,一次性生成其所有孩子节点,判断对孩子节点是舍弃还是保留,舍弃那些得不到可行解或最优解的节点,将其余节点保留在活节点表中。再从活节点表中取出一个活节点作为当前扩展节点。重复上述过程,直到找到所需的解或活节点表为空时为止。每一个活节点最多只有一次机会成为扩展节点。活节点表的实现通常有两种形式:一种是普通的队列,即先进先出队列;另一种是优先级队列,按照某种优先级决定哪个节点为当前扩展节点。

根据活节点表的不同,分支限界法分为以下两种:队列式分支限界法和优先队列式分支限界法。

[解题秘籍]

① 定义解空间。

解空间的大小对搜索效率有很大的影响,首先要定义合适的解空间,确定解空间包括解的组织形式和显约束。解的组织形式规范为一个n 元组{x 1 ,x 2 ,…,xn },具体问题表达的含义不同。显约束是对解分量的取值范围的限定。

② 确定解空间的组织结构。

对解空间的组织结构通常用解空间树形象地表达,根据解空间树的不同,解空间分为子集树、排列树、m叉树等。

③ 搜索解空间。

分支限界法指按照广度优先搜索策略,一次性生成所有孩子节点,根据约束函数和限界函数判定对孩子节点是舍弃还是保留,如果保留,则将其依次放入活节点表中,活节点表是普通队列或优先队列。然后从活节点表中取出一个节点,继续扩展,直到找到所需的解或活节点表为空时为止。如果对该问题只求可行解,则只需设定约束函数即可;如果求最优解,则需要设定约束函数和限界函数。在优先队列分支限界法中还有一个关键问题,即优先级的设定:选择什么值作为优先级?如何定义优先级?因为优先级的设计直接决定算法的效率。






推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • TCP实现之:套接字
    TCP实现之:套接字套接字的数据结构按照域的不同可以分为三种:用户态套接字、socket和sock,其中socket结构体是内核中的与用 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文讨论了读书的目的以及学习算法的重要性,并介绍了两个算法:除法速算和约瑟夫环的数学算法。同时,通过具体的例子和推理,解释了为什么x=x+k序列中的第一个人的位置为k,以及序列2和序列3的关系。通过学习算法,可以提高思维能力和解决问题的能力。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 模块化区块链生态系统的优势概述及其应用案例
    本文介绍了相较于单体区块链,模块化区块链生态系统的优势,并以Celestia、Dymension和Fuel等模块化区块链项目为例,探讨了它们解决可扩展性和部署问题的方案。模块化区块链架构提高了区块链的可扩展性和吞吐量,并提供了跨链互操作性和主权可扩展性。开发人员可以根据需要选择执行环境,并获得奖学金支持。该文对模块化区块链的应用案例进行了介绍,展示了其在区块链领域的潜力和前景。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • 谁说QLC闪存不堪大用!Intel 670p SSD深度揭秘
    ssd品牌众多,intel可以说是非常优秀的那一个,早些年的x25系列至今都是让人津津乐道的经典,不过近些年,intel固态存储的主要精力转向了企业、数据中心市场,消费级领域产品并 ... [详细]
  • 【图解HTTP】第一章 了解web及网络基础
    [图解HTTP]了解Web及网络基础Web页面是如何呈现的?根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源(resour ... [详细]
  • 运行机制_PHP 底层的运行机制与原理转
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了PHP底层的运行机制与原理--转相关的知识,希望对你有一定的参考价值。发现一片总结的还不错的文 ... [详细]
  • NLP自然语言处理中的单词,句子,经过各种处理编码,电脑识别到的还是一串数字,即一个有前后关系的时间序列。放到交通工程、土木 ... [详细]
author-avatar
wtc21232
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有