zoukankan      html  css  js  c++  java
  • 浅谈分治算法

    浅谈分治算法

    本篇随笔讲解信息学奥林匹克竞赛中的分治算法。分治算法更多的是一种思想,不仅是一种算法本身,以后的很多高级算法和数据结构(比如分块),都是分治思想的一种应用。好好体会分治思想,对算法竞赛的思维开发非常有帮助。


    分治的概念

    分治:字面上的意思就是“分而治之”,简单来说,就是把一个难搞的大问题拆分成很多相对来讲容易搞的小问题,然后把小问题的答案合并起来,导出大问题的答案。是为分治。


    分治的适用范围

    1、首先,大问题拆成小问题一定要变得更容易解决,否则的话,大问题被拆分之后变得更难了或者并没有什么变化,还拆它干什么。

    2、拆成的问题一定是相同种类的,可以进行类比解决。即递归思想。要不然你还想把每个小问题单设计一个算法?

    3、分解之后的问题统计出的答案要对大问题的答案有所贡献。意思是说,解决小问题之后要可以合并。

    4、小问题之间要相互独立。


    分治的步骤

    我们可以用树形结构来类比分治算法的实现过程。

    假设要求解的大问题是这棵树的根节点。那么整棵树就是分治的过程,叶子节点就是我们要解决的最好的问题。

    刚才已经说过,分治的定义更多的偏向于一种思想。下面用一个例子来让大家深入地体会分治思想。

    • 全排列问题

    没错,这是一道搜索题。

    但是里面的确体现了分治思想(滑稽肯定)

    大问题是求出所有的排列方式。

    拆分成小问题就是以1开头、以2开头......以n开头。

    然后继续拆分,第二位是1,是2,是3......

    知道分到只有一个数字的时候,不再分解。

    这其实也可以类比成一棵树。每一层表示每一位可能摆放的数字。这既是做这道题的深搜“搜索树”的类比方法。也是这道题的分治思想的类比方法。

    代码就不贴了。

  • 相关阅读:
    css最简单的在背景图片上显示模糊背景色的方法
    css添加网格背景
    获取bing必应图片
    JavaScript超过一定高度导航添加类名
    6行css就可以解决的瀑布流布局的方法
    css实现背景图横向滚动
    JavaScript根据一个元素的显示隐藏控制另一个元素的显示和隐藏
    JavaScript判断地址栏链接与导航栏链接是否一致并给导航添加class
    JavaScript实现选中文字自动复制
    Day 74 算法基础(二)
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11586687.html
Copyright © 2011-2022 走看看