特定分治算法的复杂性
Posted
技术标签:
【中文标题】特定分治算法的复杂性【英文标题】: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,任何人都可以帮我弄清楚该怎么做?
【问题讨论】:
【参考方案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以上是关于特定分治算法的复杂性的主要内容,如果未能解决你的问题,请参考以下文章