我可以清楚地看到N ^ 2受到c2 ^ N的限制,但我如何通过使用big-O的正式定义来证明它。我可以简单地通过M.I.证明。
这是我的尝试.. 根据定义,对于任何n> n0,存在常数C f(n)< = Cg(n) 哪里 f(n)= n ^ 2 和 g(n)= 2 ^ n
我应该将日志带到两边并解决C吗?
还有一个关于斐波纳契序列的问题,我想解决递归关系。
int fib(int n){
if(n<=1) return n;
else return fib(n-1) + fib(n-2);
等式是......
T(n) = T(n-1)+T(n-2)+C // where c is for the adding operation
所以T(n) = T(n-2) + 2T(n-3) + T(n-4) + 3c
还有一个
T(n) = T(n-3) + 3T(n-4) + 3T(n-5) + T(n-6) + 6c
然后我开始迷失形成一般方程式i 这种模式有点像帕斯卡三角形?
t(n) = t(n-i) + aT(n-i-1) + bT(n-i-2) + ... + kT(n-i-i) + C
答案 0 :(得分:7)
正如你所指出的,看看 f(x)εO(g(x))你需要找到......
使得 f(x)<所有 x&gt;的c·g(x) X <子> 0 子>
在这种情况下,您可以选择 c = 1 和 x 0 = 2 。您需要证明的是
x 2 &lt;所有 x> 2 x 2
此时您可以记录双方(因为如果记录( x )&gt; log( y ),那么 x&gt; y 。)假设您使用的是base-2 log,那么您将获得以下内容
log(x 2 )&lt;日志(2 X )
根据对数的标准定律,你得到
2·log(x)&lt; X·日志(2)
由于 log(2)= 1 ,因此可以写为
2·log(x)&lt; X
如果我们设置 x = 2,我们会得到
2·log(2) = 2
并且由于 x 比 log(x)增长得快,我们知道 2·log(x)&lt; x 适用于所有 x&gt; 2
答案 1 :(得分:0)
改进接受的答案:
你必须证明x ^ 2&lt;所有x> 2的x ^ 2
双方登录,我们必须证明: 2·log(x)&lt; x表示所有x&gt; 2
因此,我们必须显示所有x> 2的函数h(x)= x-2·log(x)> 0
H(2)= 0
区分h(x)相对于x,我们得到h'(x)= 1 - 1 /(x·ln(2))
对于所有x> 2,h'(x)总是大于0,因此h(x)保持增加,并且因为h(2)= 0, 因此证明h(x)>所有x> 0的0 2, 或x ^ 2&lt;所有x> 2的x ^ 2
答案 2 :(得分:0)
在大多数情况下,接受的答案(来自 aioobe)是正确的,但需要进行重要的更正。
是的,对于 x=2,2×log(x) = x 或 2×log(2) = 2 是正确的,但随后他错误地暗示了2×log(x) < x 对所有 x>2 为真,但不为真。
让我们取 x=3,所以等式变成:2×log(3) < 3(一个无效的等式)。
如果你计算这个,你会得到:2×log(3) ≈ 3,16993,它大于 3。
如果绘制 f(x) = x2 和 g(x) = 2x,您可以清楚地看到这一点 或者如果您绘制 f(x)= 2×log(x) 和 g(x) = x(如果 c=1)。
在 x=2 和 x=4 之间,您可以看到 g(x) 将低于 f(x)。只有当 x ≥ 4 时,f(x) 才会保持 ≤ c×g(x)。
所以为了得到正确的答案,你按照 aioobe 的答案中描述的步骤,但是你绘制函数以获得最后交集,其中 f(x) = c×g(x )。那个交点处的 x 是你的 x0(连同选择的 c),以下是正确的:f(x) ≤ c×g(x ) 对于所有 x ≥ x0。
所以对于 c=1 应该是:对于所有 x≥4,或 x0=4