搜索
因为这是十分基础的东西,所以反而有些忽略
写这篇博客,方便复习
搜索,最基础的算法
基础到无法再基础的算法
为了引出搜索,我们不得不说说什么叫做“遍历”
遍历,正如其名,是将所有的可能性全都看一遍
比如把书架上所有的书都看一遍
这就是遍历。
然而,这种单纯的遍历会导致一些问题无法解决
例如,找一条通往书架的路
这种的一般的循环遍历就无法解决了
原因在于,我们无法找到一种顺序令程序能够有效地找到路径
于是我们就引出了搜索
它被人们称为:优雅的暴力
与遍历相似,它将所有的可能都遍历一遍,一个不落
为了保证不漏,甚至在一些比较粗略的代码里,搜索会重复看一本书很多遍
但与遍历不同的是,它不再单纯允许“从头到尾”这一种简单的顺序
寻找路径这类的“复杂顺序”的问题也可以轻松解决
这与它的工作模式有关
搜索将问题分为数层(以找通向书架的路为例,这所谓层也许就是“每一步”吧)
每一层有不同的决策(还是书架,这里的决策,也就是“往哪个方向前进”)
每一层的每一个决策通往下一层的下一个决策
一直通往终点状态(找到了书架或是撞墙)
不同的搜索采取不同的策略
有的会选一个方向前进然后选方向再前进然后再前进然后……(DFS,深度优先搜索)
有的会将搜索范围不断扩大直到将终点纳入搜索范围(BFS,广度优先搜索)
还有许多种不同的搜索方式
这就是搜索了