zoukankan      html  css  js  c++  java
  • 分治法理论

    分治算法将一个大的问题分成多个小问题,每个小问题都是大问题的组成部分,然后用点额外的处理就能得到最终答案。例如,归并排序就是将原问题分成两个次级的问题,每个次级排序问题数据是上一级问题的一半,最后使用额外O(n)的工作量进行合并。时间复杂度表达式如下:

    T(n) = 2T(n/2) + O(n)

    下面的理论可用于计算分治算法的时间花费。对于一个给定程序(或算法),首先找到问题的重现关系(时间复杂度表达式的递归关系)。如果递归关系是下面这种形式,我们可以直接给出问题的答案(对应的分治算法时间复杂度),而不需要再去计算。

    如果递归关系是这样的形式:T(n) = aT(n/b) + θ(n k log p n),(其中 a >= 1, b>1, k>=0, p 是实数)那么:

    1. if a > bk, then T(n) = θ(nlogba)
    2. if a=bk
      1. if p > -1, then T(n) = θ(nlogba logp+1n)
      2. if p = -1, then T(n) = θ(nlogba log(log n))
      3. if p < -1, then T(n) = θ(nlogba)
    3. if a < bk
      1. if p >=0, then T(n) = θ(nk logpn)
      2. if p <  0, then T(n) = O(nk)
    Copyright © 2015 programnote
  • 相关阅读:
    python闭包和装饰器
    Redis订阅与发布
    Redis压缩列表
    Linux操作系统--定时任务
    python模块--zipfile文件压缩
    Xshell工具使用--连接VMware虚拟机
    Django数据库--事务及事务回滚
    HTTP长连接--Keep-Alive
    MySQL触发器
    Kasaraju算法--强连通图遍历及其python实现
  • 原文地址:https://www.cnblogs.com/programnote/p/4689988.html
Copyright © 2011-2022 走看看