跳至主要內容
优先遍历算法

深度优先遍历

深度优先遍历(Depth First Search,简称 DFS)就是找准一条路不停深入的搜索方法, 当发现这条路走不通的时候就会回退到上一个探索的节点,如果上一个节点存在没有探索的分支,便继续探索若没有则继续回退。 深度优先遍历就有点像二叉树中的前序遍历、中序遍历和后序遍历。

它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。

深度优先遍历的关键就在于如何找到已经探索过节点的上一个节点,也就是如何回溯。


石怜安大约 3 分钟算法很菜的算法
动态规划算法

算法认识

动态规划(Dynamic Programming)简称 DP,对于子问题重叠的情况特别有效,因为它将子问题的解保存在表格中,当需要某个子问题的解时,直接取值即可,从而避免重复计算。

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。

动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。


石怜安大约 19 分钟算法很菜的算法
二分查找理论

二分查找理论

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用 顺序存储结构 ,而且表中元素按关键字有序排列。

首先,假设表中元素是按升序排列,将表中间位置记录的 关键字 与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置 记录 将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的 记录 ,使查找成功,或直到子表不存在为止,此时查找不成功。

二分查找是我们降低算法复杂度的主要手段之一,只要我们可以题目中存在:


石怜安大约 7 分钟算法很菜的算法