虽说是日志2,但其实是No.1,because日志1因一些环境原因(宾馆的网实在是太烂了,福州的OJ打开都废了我几十年, 生 气)和一些人为原因(题目实在是过不了,好气哦);
好了,切入正题,今天讲了搜索的第二部分,即bfs和搜索优化。我也分两块来写日志;
frist.BFS
所谓bfs,就是在dfs的第一层框架上,阻止了单一策略的深入,这很好的提高了搜索的速度,bfs让所有的情况同时进行,这保证
了第一个解的最优性,使得可以大大加快了最优解的速度,这一过程由队列来维护,从而达到了目的。(假的,一定是假的,不然
我肿么看了那么长时间还没参透)
这么多操作,来画个图,简述一下。
(图怎么样?作者自制,谁敢说难看,杀无赦)依据bfs的思想,查找顺序应如图的红色字所示,然后一一将其存入队列之中
,已在队列
加一个例题:(如上图)图中S到T的最短路长度是多少?
思想:这可以dfs也可以bfs,由数据来决定dfs的书写难度较低,bfs速度较快;由bfs来构思,
即将与S联通的点进行广搜,达到T即返回这样便可以做到了;
代码实现:没有,滚滚滚,连个模板还要我给!
小结一下:bfs高效率,高能耗(空间,代码量);
second.搜索优化
这是一个比较玄学的操作,因题而异,各有不同,基本思想就是将100%错误的答案排除,类似于摘果子时,确定一根枝干上一定
没有果子时可将这一枝干提前剪掉,以减少无用功。所以,这种操作又称为剪枝。
图就不再给了,大家就想象一下砍树枝吧。(说直白点我懒的画了);
来个题,体验一下:一堆木棍,都有个自的长度,找出其最短的原长度;
思路:搜索是一回事,我要的是剪枝。这个长度一定大于所有木棍中的最短长度,这就可以进行剪枝了;当然还不止这一点
在选择木棍组合时,一定会选上当前的最长的那一根,因为每根都必须被选中,必有一种组合含它,由此又可以减少一部分时间。
没代码,别看这一行了。
小总结:搜索优化:善变但有规律需发现,练习并熟用;
END.