【发布时间】: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)
每个子问题的大小在下一次递归调用中减小b,a 是分支因子,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)
【问题讨论】:
标签: algorithm recursion time-complexity recurrence divide-and-conquer