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

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


在创建这颗树(解空间)时,咱们用到的方法根据搜索的次序不一样能够分为广度优先搜索、深度优先搜索和最佳优先搜索。打个比方来讲明一下它们之间的不一样。我准备找王二麻子办点事,怎么找到他呢?若是是广度优先搜索,我会先找我全部的朋友,若是这些朋友当中没有王二麻子这我的,再找我全部朋友的朋友,若是尚未,再找我全部朋友的朋友的朋友……直至找到为止;若是是深度优先搜索,也是先找我全部的朋友,若是这些朋友当中没有王二麻子这我的,再找个人一个朋友的全部朋友,若是尚未,再找我这个朋友的一个朋友的全部朋友……直至找到为止;若是是最佳优先搜索,仍是先找我全部的朋友,若是这些朋友当中没有王二麻子这我的,从个人朋友当中选出人脉最广的那我的,找他的全部朋友,若是还没找到,从当前找到的人中选出人脉最广的那我的(排除已选出的人),接着找他的全部朋友……直至找到为止。数据结构

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


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

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


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

相关文章
相关标签/搜索