刷了三个月的题,感觉卡在了瓶颈处,遂报了个班。算法班的副标题是,一个月带你准备好算法面试。看着有点难受,我那三个月呢?去哪了?
一直到今天做一道题,可以用DFS(深度优先搜索),也可以用BFS(广度优先搜索),关于DFS与BFS的介绍,可以参考简书的一篇文章:https://www.jianshu.com/p/70952b51f0c8。我思索着什么情况下用DFS,什么时候用BFS时,豁然开朗。正如算法班老师说的那样,刷3000+题和刷300+题是不一样的,那么,自己感悟算法与他人教导也是不一样的。还是那句话,那些看似笨拙的努力,会一直陪伴着你,没有区别是因为还没到终点。
比如Leetcode的 Maze https://leetcode.com/problems/the-maze/ 与Maze II https://leetcode.com/problems/the-maze-ii/ 两道迷宫搜索题。亲测前者使用DFS更快,而后者使用BFS更快。为啥?其实从算法复杂度来看,两者是同等级的复杂度。然而,实际运算起来,却有差别。个人总结:对于数据规模比较小的,可以用DFS;而对于数据规模比较大,算法复杂的问题,用BFS会更快。
我突然想到一种人生态度。倘若把比较简单,数据量小的问题比作短期目标,那么采用DFS这种一路走到底的算法无疑是更有效的。倘若把比较复杂,数据量大也算不清楚的问题比作人生的长期目标,举个例子,比如找到一份适合自己并能够追随终生的职业,那么花上十余年时间一路走到底就不是最佳选择。毕竟人生能有几个十余年?不如采用BFS的方法,广度优先,先花较少时间在自己感兴趣的几个行业都试上一试,可以是几个月,也可以是几年时间去了解,然后进一步筛选方向,最终在某一层确定自己的最终方向。
2019年10月
网友评论