Open xingbofeng opened 7 years ago
近期在工作之余大部分时间投入到设计模式、算法、操作系统原理的学习中,这里算是一些小小的体会吧。
第一点小小的体会是自己在看Linux的过程中发现自己对底层原理还是有那么一些兴趣的(为啥以前就没发现呢,所以还是继续茫茫前端的搬砖路吧,哈哈~😆)
Linux
与其说有五大经典算法思想其实还有一点更为原始的思想就是枚举法,或者说叫暴力(🤓)枚举法?
穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
对生活的一点小启示:贪心算法不适用于生活,作为一般人的你永远无法找到每个阶段的整体最优解。
贪心算法(又称贪婪算法)是指,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。
对生活的一点小启示:把若干问题分解成小问题进行解决,会获得更大的成就感。
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。
对生活的一点小启示:不要畏惧失败,记下失败的原因,回到起点重新开始,最终总会成功。
分枝定界法是一个用途十分广泛的算法,运用这种算法的技巧性很强,不同类型的问题解法也各不相同。分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索。 该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集(称为分支),并为每个子集内的解的值计算一个下界或上界(称为定界)。
把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础。
对生活的一点小启示:有些问题由多个问题组成,问题间又相互独立,不妨把它们分成小问题试试。说不定这样会更快呢?
近期在工作之余大部分时间投入到设计模式、算法、操作系统原理的学习中,这里算是一些小小的体会吧。
第一点小小的体会是自己在看
Linux
的过程中发现自己对底层原理还是有那么一些兴趣的(为啥以前就没发现呢,所以还是继续茫茫前端的搬砖路吧,哈哈~😆)枚举法
与其说有五大经典算法思想其实还有一点更为原始的思想就是枚举法,或者说叫暴力(🤓)枚举法?
穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。
贪心算法
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
对生活的一点小启示:贪心算法不适用于生活,作为一般人的你永远无法找到每个阶段的整体最优解。
动态规划
贪心算法(又称贪婪算法)是指,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。
对生活的一点小启示:把若干问题分解成小问题进行解决,会获得更大的成就感。
回溯算法
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。
对生活的一点小启示:不要畏惧失败,记下失败的原因,回到起点重新开始,最终总会成功。
分支限界算法
分枝定界法是一个用途十分广泛的算法,运用这种算法的技巧性很强,不同类型的问题解法也各不相同。分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索。 该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集(称为分支),并为每个子集内的解的值计算一个下界或上界(称为定界)。
分治法
把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础。
对生活的一点小启示:有些问题由多个问题组成,问题间又相互独立,不妨把它们分成小问题试试。说不定这样会更快呢?