d=log_b(a) 情况的主定理解

Posted

技术标签:

【中文标题】d=log_b(a) 情况的主定理解【英文标题】:Master theorem solution for the case d=log_b(a) 【发布时间】:2021-09-20 22:14:35 【问题描述】:

来自Dasgupta's Algorithms:如果分治算法的运行时间用递归T(n)=aT(n/b)+O(n^d)来描述,那么它的解是:

    T(n)=O(n^d) 如果d>log_b(a) T(n)=O(n^log_b(a)) 如果d<log_b(a) T(n)=O(n^d*log_2(n)) 如果d=log_b(a)

每个子问题的大小在下一次递归调用中减小ba 是分支因子,O((n/b^k)^d) 是每个子问题在k 级别上划分和组合子问题的时间。

案例 1 和 2 很简单——它们取自在对递归树的每一级所做的工作求和时形成的几何级数,即 a^k*O((n\b^k)^d)=O(n^d)*(a/b^d)^k

在案例 3 中,log_2(n) 来自哪里?当d=log_b(a)时,比值a/b^d等于1,因此系列之和是n^d*log_b(a),而不是n^d*log_2(n)

【问题讨论】:

【参考方案1】:

作为一个更简单的例子,首先注意 O(log n)、O(log137 n) 和 O(log16 n) 的含义相同。其原因是,通过对数基公式的变化,对于任何固定常数 m,我们有

log_m n = log n / log m = (1 / log m) · log n = O(log n)。

主定理假设 a、b 和 d 是常数。从对数基公式的变化,我们得到了

从这个意义上说,O(nd logb n) = O(nd log n),因为 b 是一个常数在这里。

作为注释,看到写成 O(nd log2 n) 的东西是不寻常的,因为这里的日志库无关紧要,只是有贡献到(已经隐藏的)常数因子。

【讨论】:

以上是关于d=log_b(a) 情况的主定理解的主要内容,如果未能解决你的问题,请参考以下文章

中国剩余定理过程

什么时候可以实际应用主定理?

如何找到递推关系,并计算归并排序码的主定理?

ax=1(%b) 求最小逆元

数论不定方程&&中国剩余定理

中国剩余定理