算法¶
计算机科学研究的正是算法,计算机只是工具,解决问题的过程以及解决方案,可能存在也可能不存在,存在即为可计算。
算法并不一定涉及复杂的数学,而是更多的依赖基本逻辑,这些逻辑在我们的日常中随处可见。
搜索算法 searching_algorithm¶
关于搜索和查找的区别 - 搜索:不知道想要的内容,在广泛的范围内寻找信息,比如搜索引擎 - 查找:知道想要的信息,在既定的范围内通过寻找和筛选信息,比如文档内使用关键词查找
- 暴力搜索
- 线性搜索
- 广度优先搜索:从初始节点开始逐层搜索,由近及远地访问各个节点
- 深度优先搜索:从初始节点开始,沿着一条路径走到头,再回溯并尝试其他路径,直到遍历完整个数据结构
- 自适应搜索(查找算法)
- 二分查找 binary_search
- 哈希查找
- 树查找
思想¶
- 分治
- 贪心,一条路走到黑,就一次机会,只能哪边看着顺眼走哪边
- 回溯,一条路走到黑,无数次重来的机会,还怕我走不出来 (Snapshot View)
- 动态规划,Dynamic Programming,简称 DP,拥有上帝视角,手握无数平行宇宙的历史存档 (Versioned Archive View),同时发展出无数个未来,存在递推关系,可以使用动态规划求解