【问题标题】:Complexity of a particular divide and conquer algorithm特定分治算法的复杂性
【发布时间】:2013-10-12 22:47:02
【问题描述】:

算法将大小为 n 的问题分解(划分)为 b 个大小为 n/b 的子问题,其中 b 是整数。分解成本为n,C(1)=1。证明,使用重复替换,对于所有 2≥b 的值,算法的复杂度是 O(n lg n)。

这是我用于我的初始方程 C(n) = C(n/b) + n 并且经过 k 步替换后,我得到 C(n) = C(n/b^k) + n [summation(from i=0 to k-1) of (1/b)^i]

k = log(base b) n

我不确定我是否做对了这一切,因为当我完成这些操作时,我没有得到 n lgn,任何人都可以帮我弄清楚该怎么做?

【问题讨论】:

    标签: algorithm math complexity-theory big-o divide-and-conquer


    【解决方案1】:

    我认为你的重复是错误的。由于有 b 个大小为 n/b 的单独子问题,因此在 C(n / b) 项之前应该有一个 b 的系数。重复次数应该是

    C(1) = 1

    C(n) = b C(n/b) +O(n)。

    使用主定理,这解决了 O(n log n)。另一种看待这一点的方式是,在将递归 k 次扩大后,我们得到

    C(n) = bk C(n / bk) + kn

    这在 k = logb n 时终止。代入 k 的值并进行化简,得到 O(n log n) 的值。

    希望这会有所帮助!

    【讨论】:

    • 不会重复出现 b^k C(n / b^k) + b^k *(n + n/b + ... + n/b^k)
    • 或者更确切地说,我的意思是 C(n) = b^k * C(n / b^k) + k*n
    猜你喜欢
    • 2019-10-05
    • 2023-03-03
    • 2015-04-24
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多