分而治之算法的时间复杂度会产生两个不均匀的子问题。

时间:2017-10-04 14:48:20

标签: time-complexity divide-and-conquer

我正在使用一种非常具体的分而治之算法,该算法总是将n个元素的问题分为两个子问题,其中n / 2 - 1和n / 2 + 1个元素。

我很确定时间复杂度仍然是O(n log n),但我想知道我怎么能正式证明它。

1 个答案:

答案 0 :(得分:0)

在每个递归级别上完成“有用的工作”是一些函数f(n)

enter image description here

让我们观察当我们反复将其替换回来时会发生什么。

  1. T(n)条款:
  2. enter image description here 发现模式?

    递归深度m

    • T
    • enter image description here递归调用
    • T的每个参数中的第一个字词是enter image description here
    • 第二个字词的范围从enter image description hereenter image description here,步长为enter image description here

    因此,每个级别的所有T - 术语的总和由下式给出:

    enter image description here

    1. f(n)条款:
    2. enter image description here

      看起来很熟悉?

      f(n)字词正好是一个递归级别隐藏在 T(n)条款之后。因此,根据前面的表达式,我们得出以下总和:

      enter image description here

      但是请注意,我们只从一个 f - term开始,因此这个总和有一个无效的边缘情况。但是,这很容易纠正 - m = 1的特殊情况结​​果只是f(n)

      结合上述内容,并总结每个递归级别的f,我们得到T(n)的(几乎)最终表达式:

      enter image description here

      我们接下来需要查找T - 术语的第一个求和何时终止。我们假设是n ≤ c

      直接终止的最后调用具有最大的参数,即调用:

      enter image description here

      因此最终表达式由:

      给出

      enter image description here

      回到原来的问题,什么是f(n)

      你还没有说明这是什么,所以我只能假设每次通话完成的工作量是ϴ(n)(与数组长度成正比)。因此:

        

      enter image description here

           

      你的假设是正确的。

      请注意,即使我们有像

      这样的更通用的东西

      enter image description here

      a某些常量不等于1,我们仍然得{4}},因为上述等式中的enter image description here项取消出:

      enter image description here