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

    1贪心算法

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

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

    2分治算法

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

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

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

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

    3回溯算法

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 分治算法 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题...
    Java资讯库阅读 9,792评论 0 14
  • 分治算法 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题...
    木叶秋声阅读 5,316评论 0 3
  • 目录 算法基础 算法复杂性 递归与分治 回溯法与分支限界法 贪心算法 动态规划法 NP问题 概率算法 现代优化算法...
    惊不意外阅读 4,786评论 0 3
  • 五大常用算法之一:分治算法 基本概念: 把一个复杂的问题分成两个或更多的相同的或相似的子问题。再把子问题分成更小的...
    親愛的破小孩阅读 4,947评论 0 1
  • 贪心算法 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上...
    fredal阅读 9,279评论 3 52