鹿我所录的博客

记录我在学习C#中的点点滴滴,记录下以备后来人借鉴。

 

搜索

因为这是十分基础的东西,所以反而有些忽略

写这篇博客,方便复习


搜索,最基础的算法

基础到无法再基础的算法

为了引出搜索,我们不得不说说什么叫做“遍历”

遍历,正如其名,是将所有的可能性全都看一遍

比如把书架上所有的书都看一遍

这就是遍历。

然而,这种单纯的遍历会导致一些问题无法解决

例如,找一条通往书架的路

这种的一般的循环遍历就无法解决了

原因在于,我们无法找到一种顺序令程序能够有效地找到路径

于是我们就引出了搜索

它被人们称为:优雅的暴力

与遍历相似,它将所有的可能都遍历一遍,一个不落

为了保证不漏,甚至在一些比较粗略的代码里,搜索会重复看一本书很多遍

但与遍历不同的是,它不再单纯允许“从头到尾”这一种简单的顺序

寻找路径这类的“复杂顺序”的问题也可以轻松解决

这与它的工作模式有关

搜索将问题分为数层(以找通向书架的路为例,这所谓层也许就是“每一步”吧)

每一层有不同的决策(还是书架,这里的决策,也就是“往哪个方向前进”)

每一层的每一个决策通往下一层的下一个决策

一直通往终点状态(找到了书架或是撞墙)

不同的搜索采取不同的策略

有的会选一个方向前进然后选方向再前进然后再前进然后……(DFS,深度优先搜索)

有的会将搜索范围不断扩大直到将终点纳入搜索范围(BFS,广度优先搜索)

还有许多种不同的搜索方式

这就是搜索了

posted on 2020-10-02 20:02  鹿我所录  阅读(160)  评论(0编辑  收藏  举报

导航