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
  • 相关阅读:
    hadoop再次集群搭建(3)-如何选择相应的hadoop版本
    48. Rotate Image
    352. Data Stream as Disjoint Interval
    163. Missing Ranges
    228. Summary Ranges
    147. Insertion Sort List
    324. Wiggle Sort II
    215. Kth Largest Element in an Array
    快速排序
    280. Wiggle Sort
  • 原文地址:https://www.cnblogs.com/programnote/p/4689988.html
Copyright © 2011-2022 走看看