zoukankan      html  css  js  c++  java
  • 【算法】分治法细则

    分治法的基本步骤:
    1.分解问题(Divide):把原问题分解为若干个与原问题性质相类似的子问题;
    2.求解字问题(Conquer):不断分解子问题并求解;
    3.合并子问题的解(Combine).


    分治法的运用条件:
    1.原问题可以分解为若干与原问题的解;
    2.子问题可以分解并可以求解;
    3.子问题的解可以合并为原问题的解;
    4.分解后的子问题应互相独立,即不包含重叠子问题(如菲不那切竖列)。

    求解递归函数的方法:

    1.代换法
    1)猜测解的行为;
    2)数学归纳法证明。

    2.递归树法
    在递归树中,每一个结点都代表递归函数调用集合中一个子问题的代价。将树中每一层内的代价相加得到一个每层代价的集合,再将每层的代价相加得到递归是所有层次的总代价。

    3.主方法

      主要是记忆三种情况,根据各种情况直接写出递归函数。

      T(n) = aT(n/b)+h(n)
    a >=1 ; b >1 ; h(n) : 不参与递归的复杂度函数
    判断n^log b (a)与h(n)的大小关系
    = Θ(h(n)) :该方法的复杂度为 Θ(h(n)*lg(n))
    > Θ(h(n)) :该方法的复杂度为 Θ(n^(log a/log b))
    < Θ(h(n)) :该方法复杂度为 Θ(h(n))
    这样可以帮助你快速的分析出你得算法的复杂度是否符合要求。

  • 相关阅读:
    PyQt 滚动条自动到最底部
    Python 装饰器示例,计算函数或方法执行时间
    pyuic5将.ui文件转为.py文件
    Python pyinstaller 参数
    Win+R 常用命令
    CODEVS 2171 棋盘覆盖
    P3924 康娜的线段树
    P1850 换教室
    U33405 纽约
    POJ
  • 原文地址:https://www.cnblogs.com/helloWaston/p/4598188.html
Copyright © 2011-2022 走看看