math - 简化递推关系 c(n) = c(n/2) + n^2

标签 math relation recurrence

我真的很困惑如何简化这个递推关系:c(n) = c(n/2) + n^2。

所以我首先得到:

c(n/2) = c(n/4) + n^2 所以 c(n) = c(n/4) + n^2 + n^2 c(n) = c(n/4) + 2n^2

c(n/4) = c(n/8) + n^2 所以 c(n) = c(n/8) + 3n^2

不过我确实注意到了一种模式:

2 乘以 "n^2"前面的任何系数的幂给出 n 结束的分母。

我不确定这是否有帮助。

我只是不明白如何简化这个递归关系,然后找到它的 theta 符号。

编辑:实际上我只是再次计算出来,我得到了 c(n) = c(n/n) + n^2*lgn。

我认为这是正确的,但我不确定。另外,我如何找到它的 theta 符号?它只是 theta(n^2lgn) 吗?

最佳答案

首先,在放置c(n/2) 在 lhs 上。

c(n/2) = c(n/4) + (n/2)^2

您的直觉是正确的,因为它是问题中非常重要的部分。在我们达到 1 之前,您可以将 n 除以 2 多少次?

我们以8为例

8/2 = 4
4/2 = 2
2/2 = 1

你看到它是 3,结果是 log(8)

为了证明 theta 符号,查看 master theorem 可能会有所帮助.这是证明递归关系复杂性的非常有用的工具。

利用主定理案例3,我们可以看到

a = 1
b = 2
logb(a) = 0
c = 2
n^2 = Omega(n^2)
k = 9/10
(n/2)^2 < k*n^2
c(n) = Theta(n^2)

为什么答案是 Theta(n^2) 的直觉是你有 n^2 + (n^2)/4 + (n^2)/16 + ... + (n^2)/2^(2n),这不会给我们 logn n^2,而是越来越多更小的n^2

关于math - 简化递推关系 c(n) = c(n/2) + n^2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22674053/

相关文章:

sql - Laravel 条件子查询与相关模型最后一个条目

php - Laravel 多对多只从关系中获取一个值

java - Hibernate搜索查询,受子类限制?

algorithm - : T(n) = 2T(n-1) + 3T(n-2)+ 1 的运行时间是多少

algorithm - 对于给定的 n,如何找到具有以下递推关系的序列中的第 n 项?

java - 调整图像的对比度

algorithm - 计算相似度分数的权重

python - Scipy Curve_Fit 返回值解释

c++ - 实现自定义非线性最小化,从符号数学到 C

algorithm - 如何找到以下递归关系的时间复杂度?