计算机中许多问题的解空间可以用一棵树来表示,最优解就在树中的一个分支上,因此,我们在解这类问题时可以采用树搜索策略,最经典的问题包括0/1背包问题、旅行商问题、哈密顿回路问题,还有8数码问题(就是我们小时候常玩的方格拼图游戏)。

在建立这颗树(解空间)时,我们用到的方法根据搜索的次序不同可以分为广度优先搜索、深度优先搜索和最佳优先搜索。打个比方来说明一下它们之间的不同。我准备找王二麻子办点事,怎么找到他呢?如果是广度优先搜索,我会先找我所有的朋友,如果这些朋友当中没有王二麻子这个人,再找我所有朋友的朋友,如果还没有,再找我所有朋友的朋友的朋友……直至找到为止;如果是深度优先搜索,也是先找我所有的朋友,如果这些朋友当中没有王二麻子这个人,再找我的一个朋友的所有朋友,如果还没有,再找我这个朋友的一个朋友的所有朋友……直至找到为止;如果是最佳优先搜索,还是先找我所有的朋友,如果这些朋友当中没有王二麻子这个人,从我的朋友当中选出人脉最广的那个人,找他的所有朋友,如果还没找到,从当前找到的人中选出人脉最广的那个人(排除已选出的人),接着找他的所有朋友……直至找到为止。

在最佳优先搜索中有“选出人脉最广的人”这一步,抽象成一般就是建立一个评价函数,如果将评价函数运用到深度优先搜索中的“我的一个朋友”的选择上,就得到了深度优先搜索的变形——爬山法。算法不同也体现在数据结构上,广度优先搜索、深度优先搜索、最佳优先搜索对应的数据结构分别为:队列、栈、堆,其中的妙趣读者自己去体会吧。

我们在计算机中遇到的问题往往是很庞大的,建立一个完整的解空间(树)是很困难的,也是没有必要的,我们利用分支限界策略能大大减小树的分支,使问题在计算机中更容易解决。

书中在分支限界策略这节有这么一段:“我们使用树搜索技术解决了许多问题,这些问题都不是优化问题,使读者感兴趣的是注意到上面的方法都没有用于解决任何优化问题,在本节中,将介绍分支限界策略,这也许是解决一大类组合问题的最有效策略之一”。如果此处“优化问题”是指“求最优解”,那我觉得这段描述有不妥之处。树搜索策略能将所有的解表示出来,那从中找出最优解应该不是难事,而书中这段却说树搜索策略”不能解决任何优化问题“。我对树搜索策略和分支限界策略的理解是:分支限界策略是树搜索策略的补充,前者使后者能更有效的找到最优解。言归正传,分支限界策略是在广度(深度、最佳)优先搜索的基础上加上一个界限,这个“界限以至于能终止许多分支”,大大提高算法的效率,所以分支限界策略的重点是在界限的设置上,比如用分支限界策略解决人员分配问题、旅行商问题时采用了简化代价矩阵等。

已经学习了三大算法:贪心法、分治策略、树搜索策略,但头脑中还是没有形成清晰的脉路:什么问题用什么策略?在接下来的学习当中,需要多加分析、总结,这样才能在头脑中形成问题类型与解决策略的对应关系。

【技术文档】《算法设计与分析导论》R.C.T.Lee等·第5章 树搜索策略的更多相关文章

  1. 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第7章 动态规划

    由于种种原因(看这一章间隔的时间太长,弄不清动态规划.分治.递归是什么关系),导致这章内容看了三遍才基本看懂动态规划是什么.动态规划适合解决可分阶段的组合优化问题,但它又不同于贪心算法,动态规划所解决 ...

  2. 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第4章 分治策略

    分治策略有一种“大事化小,小事化了”的境界,它的思想是将原问题分解成两个子问题,两个子问题的性质和原问题相同,因此这两个子问题可以再用分治策略求解,最终将两个子问题的解合并成原问题的解.有时,我们会有 ...

  3. Kafka 技术文档

    Kafka 技术文档   目录 1 Kafka创建背景 2 Kafka简介 3 Kafka好处 3.1 解耦 3.2 冗余 3.3 扩展性 3.4 灵活性 & 峰值处理能力 3.5 可恢复性 ...

  4. RabbitMq 技术文档

    RabbitMq 技术文档 目录 1 AMQP简介 2 AMQP的实现 3 RabbitMQ简介 3.1 概念说明 3.2 消息队列的使用过程 3.3 RabbitMQ的特性 4 RabbitMQ使用 ...

  5. 软件工程第4次作业------石墨文档Android客户端案例分析

    作业要求的博客链接:https://edu.cnblogs.com/campus/nenu/2016CS/homework/2505 分析产品:石墨文档Android客户端 第一部分 调研和评测 1. ...

  6. 如何写好技术文档——来自Google十多年的文档经验

    本文大部分内容翻译总结自<Software Engineering at Google> 第10章节 Documentation. 另外,该书电子版近日已经可以免费下载了 https:// ...

  7. Atitit usrQBK1600 技术文档的规范标准化解决方案

    Atitit usrQBK1600 技术文档的规范标准化解决方案 1.1. Keyword关键词..展关键词,横向拓展比较,纵向抽象细化拓展知识点1 1.2. 标题必须有高大上词汇,参考文章排行榜,1 ...

  8. [转]unity3d 脚本参考-技术文档

    unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...

  9. 程序员如何编写好开发技术文档 如何编写优质的API文档工作

    编写技术文档,是令众多开发者望而生畏的任务之一.它本身是一件费时费力才能做好的工作.可是大多数时候,人们却总是想抄抄捷径,这样做的结果往往非常令人遗憾的,因为优质的技术文档是决定你的项目是否引人关注的 ...

随机推荐

  1. BZOJ 2733 HNOI 2012 永无乡 平衡树启示式合并

    题目大意:有一些岛屿,一開始由一些无向边连接. 后来也有不断的无向边增加,每个岛屿有个一独一无二的重要度,问随意时刻的与一个岛屿联通的全部岛中重要度第k大的岛的编号是什么. 思路:首先连通性一定要用并 ...

  2. HTTP协议报文格式

    HTTP协议报文格式 接下来我们看看HTTP协议(Hypertext Transfer Protocol――超文本传输协议)浏览器端(客户端)向WEB服务器端访问页面的过程和HTTP协议报文的格式. ...

  3. JQuery hover(over,out) 使用笔记

    转载自:http://www.douban.com/note/202404884/ JQuery hover(over,out) 使用笔记 JavaScript 下.onmouseover() 和 o ...

  4. SQL Server -查看数据库扩展属性

    1.fn_listextendedproperty 函数可以基于对象类型显示单个数据库对象或数据库中所有对象的扩展属性.例如,可以返回表或表中所有列的扩展属性. A.下面的示例显示了数据库本身设置的所 ...

  5. IE 与 FireFox 的 event 详解 (转)

    原文链接 FF的FIREBUG,不仅能测试JS还能检查CSS错误,是一般常用的. 但它主要检查FF方面的错误,对IE就无能为力了. 要测试IE,就用ieTester,它可以测试IE几乎所有版本(1.0 ...

  6. DOT + graphviz 轻松画图

    一.简介DOT & graphviz1. DOT    DOT是一种文本图形描述语言.DOT语言文件通常具有.gv或是.dot的文件扩展名.当然,在编写好.dot或者.gv的文件之后,需要有专 ...

  7. robot自动化测试(一)---安装

    1.安装python 百度搜索安装程序即可:我安装的python 2.7.6 64位 2.安装wxpython 版本:wxPython2.8 下载地址:http://sourceforge.net/p ...

  8. 再谈php乱码问题

    在开博不久,写了一篇关于解决php乱码问题文章,php 解决乱码的通用方法,绝大部分乱码,这篇博文都可以解决,但是也有例外. 如果有人传参数给你,你根本不知道,传给你的参数到底是什么编码,这个时候该怎 ...

  9. 愉快的开始 - 零基础入门学习Python000

    愉快的开始 让编程改变世界 Change the world by program 为什么是Python 既然有各种各样的编程语言可以选择,小甲鱼为什么极力鼓励大家来学习Python呢? 跨平台哦亲 ...

  10. Lost Cows(BIT poj2182)

    Lost Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10609   Accepted: 6797 Descri ...