数据结构与算法笔记day22:贪心算法|分治算法|回溯算法

    1贪心算法

        这节课学习了贪心算法。实际上,贪心算法适用的场景比较有限。这种算法思想更多的是在指导设计基础算法。比如最小生成树算法单源最短路径算法,这些算法都用到了贪心算法。我们不需要刻意去记忆贪心算法的原理,多练习才是最有效的学习方法。

        贪心算法的最难的一块是如何将要解决的问题抽象成贪心算法模型,只要这一步搞定之后,贪心算法的编码一般都很简单。贪心算法解决问题的正确性虽然很多时候看起来是显而易见的,但是要严谨地证明算法能够得到最优解,并不是件容易的事。所以很多时候,我们只要多举几个例子,看一下贪心算法的解决方案是否真的能够得到最优解就可以了。

    2分治算法

        这节课学习了一种非常广泛的算法思想,分治算法

        分治算法用四个字概括就是“分而治之”,将原问题划分成n个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。这个思想非常简单、好理解。

        我们还学习了两种分治算法典型的应用场景:一个是用来指导编码,降低问题求解的时间复杂度;另一个是解决海量数据处理问题,比如MapReduce本质上就是利用了分治思想。

        我们也时常感叹Google的创新能力如此之强,总是在引领技术的发展。实际上,创新并非离我们很远,创新的源泉来自对事物本质的认识。无数优秀架构设计的思想来源都是基础的数据结构和算法,这本身就是算法的一个魅力所在。

    3回溯算法

        回溯算法的思想非常简单,大部分情况下,都是用来解决广义的搜索问题,也就是,从一组可能的解中,选择出一个满足要求的解。回溯算法非常适合用递归来实现,在实现的过程中,剪枝操作是提高回溯效率的一种技巧。利用剪枝,我们并不需要穷举搜索所有的情况,从而提高搜索效率。

        尽管回溯算法的原理非常简单,但是却可以解决很多问题,比如我们开头提到的深度优先搜索、八皇后、0-1背包问题、图的着色、旅行商问题、数独、全排列、正则表达式匹配等等。如果这几个问题都能实现的话,基本就掌握了回溯算法。

你可能感兴趣的:(数据结构与算法笔记day22:贪心算法|分治算法|回溯算法)