>Problem: n^4 + 100n^2 + 50.
>Solution given: n^4 + 100n^2 + 50 <= 2n^4 for all n>=1
> n^4 + 100n^2 + 50 = O(n^4) with c=2 and n0 = 100
但是当n为1时,上述函数将为“4 + 100 + 50 <= 2”,这是不正确的。如何为此问题推导出正确的上限,或者让我知道给定的解决方案是否错误。
问题来自数据结构和算法在java中变得容易。
答案 0 :(得分:1)
说明解决方案的正确方法是
n^4 + 100n^2 + 50 <= c*n^4 for all n>=n0 with c=2 and n0 = 100
=> n^4 + 100n^2 + 50 = O(n^4)
答案 1 :(得分:0)
我们需要找到最小的增长率,g(n)
这样
c g(n) >= f(n) for n>=k.
对于c和k的某个常数值,上述等式将成立。我们不考虑n的较低值。这意味着,g(n)
的低值n
并不重要。对于较大的n
值,g(n)
将是f(n)
的最大增长率。 p>
此处f(n)= n^4 + 100 n^2 + 50
当n
非常大时,g(n) = n^4
查找c
和k
,以便c n^4 >= n^4 + 100 n ^2 + 50
如果我们弃置,则降低字词100 n^2
和50
。我们可以说c
应为2
。
2 n^4 >= n^4 .
要查找k
的值,请尝试替换n^2 = t
,n^4 = t^2
和c=2
,
2t^2 >= t^2 + 100t + 50
t^2 >= 100t +50
如果我从t
,1
,2
,3
,4
,5
开始设置6
的值,7
,8
,9
,10
和t^2 =100
在10
,我仍然有
100,00 <= 100, 00 +50
在t=11
和t^2 = 121
,我在
14,641 >= 12150.
所以我的k
将是11
。
对于其他等式,f(n) = 3n +8
g(n)
将为n
。查看c
和k
,以便下面的内容为true
。
c.g(n) >= f(n)
4n>=3n+
8,丢弃常量8
以查找c
,并将常量8
插回等式中以查找k
。
在k=8
,我们有32>=32
。