特定分治算法的复杂性

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

以上是关于特定分治算法的复杂性的主要内容,如果未能解决你的问题,请参考以下文章

python_分治算法贪心算法动态规划算法

低效分治算法的复杂性

创建两个不均匀子问题的分治算法的时间复杂度。

算法:分治法和时间复杂度 O(nlogn) 有啥关系?

算法有关点分治的一些理解与看法

算法系列之常用算法之一----分治算法