Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 大O问题-算法分析III_Algorithm_Big O_Code Analysis_Recurrence - Fatal编程技术网

Algorithm 大O问题-算法分析III

Algorithm 大O问题-算法分析III,algorithm,big-o,code-analysis,recurrence,Algorithm,Big O,Code Analysis,Recurrence,我有以下问题: 使用大“O”符号简化答案,求解递归关系: f(0) = 2 f(n) = 6f(n-1)-5, n>0 我知道这是一个一阶非齐次递推关系,并尝试过这个问题,但我似乎无法得到基本情况(f(0)=2)的正确输出 问题必须在证明中使用几何级数之和 这里是我的答案-注意sum(x=y,z)是大写西格玛符号的替代品,其中x是初始化为y的总和的下界,z是总和的上界: 1. *change forumla:* 2. f(n) = 6^n.g(n) 3. => 6^n.

我有以下问题:

使用大“O”符号简化答案,求解递归关系:

f(0) = 2
f(n) = 6f(n-1)-5, n>0
我知道这是一个一阶非齐次递推关系,并尝试过这个问题,但我似乎无法得到基本情况(f(0)=2)的正确输出

问题必须在证明中使用几何级数之和

这里是我的答案-注意sum(x=y,z)是大写西格玛符号的替代品,其中x是初始化为y的总和的下界,z是总和的上界:

1.  *change forumla:*
2.     f(n) = 6^n.g(n)
3.  => 6^n.g(n) = 6.6^(n-1) .g(n-1) -5   
4.  => g(n) = g(n-1)-5/6^n
5.  => g(n) = sum(i=1, n)-5/6^i
6.  => f(n) = 6^n.sum(i=1, n)-5/6^i
7.  => *Evaluate the sum using geometric series forumla*
8.  => sum(i = 1, n)-5/6^i = [sum(i = 1, n)a^i] -------> (a = -5/6)
9.  => *sub a = -5/6 into geometric forumla [a(1-a^n)/(1-a)]*
10. => [(-5/6(1 - (-5/6)^n))/(1-(-5/6))]
11. => g(n) = [(-5/6(1 + (5/6)^n))/(1+5/6)]
12. => f(n) = 6^n . g(n) = 6^n[(-5/6(1 + (5/6)^n))/(1+5/6)]
13. => *sub in n = 0 to see if f(0) = 2*
首先,我确信第11行上的方程可以进一步简化,其次,n=0中的子运算结果应该是2。当我到达第13行时,我无法得到这个答案

编辑:我需要知道的是,为什么在将n=0代入第12行的方程式时,我得不到f(0)=2。我想知道的是,如何简化第12行中f(n)的方程


有人…?

不用想太多,我会说f(n+1)比f(n)大6倍,减去一个常数。因此f(n)肯定是O(6^n)。虽然你可能会发现一个更严格的界限,这是我在实践中所能做到的

为了好玩,我将尝试以下方法:

f(1) = 6f(0) - 5
     = 6^1.f(0)
f(2) = 6f(1) - 5
     = 6(6f(0) - 5) - 5
     = 6^2.f(0) - 6^1.5 - 5
f(3) = 6f(2) - 5
     = 6^3.f(0) - 6^2.5 - 6^1.5 - 5
我冒昧猜测一下

f(n) = 6^n.f(0) - 5.(6^0 + 6^1 + ... + 6^(n-1))
我很确定我可以用几行归纳法来证明这一点(练习留给学生做)

现在,

所以

f(n) = 6^n.f(0) - 5.(1 - 6^n) / (1 - 6)
     = 6^n.f(0) + (1 - 6^n)
     = 6^n.(2 - 1) + 1
     = 6^n + 1
证实了我先前的直觉

让我们做一些快速检查计算:

f(0) = 2 = 6^0 + 1
f(1) = 6.2 - 5 = 7 = 6^1 + 1
f(2) = 6.7 - 5 = 37 = 6^2 + 1
f(3) = 6.37 - 5 = 237 = 6^3 + 1

这足够我做作业了:-)

对不起,这不是我要的。好吧,我想任何好事都会受到惩罚。很抱歉,你什么都没学到。@Rafe,好吧,我只是试着回答我自己,大约到一半的时候,我意识到我正在做你所做的事情+1给你。:)@雷夫,对不起,我读了我的评论,听起来很刺耳。您这样做的方式是我感觉最直观的,但不幸的是,我受限于上面使用的方法。@user559142,没问题。这就是我认为你错的地方。@user559142:这是家庭作业吗?好吧,也许除了我之外,其他人都知道。。。但是这和big-o有什么关系呢?当你问“solve”时,你的意思是你需要一个与f等价的非递归函数吗?嗨,答案必须在big-o下简化。是的,我所说的解是指识别一个非递归的闭式解。
f(0) = 2 = 6^0 + 1
f(1) = 6.2 - 5 = 7 = 6^1 + 1
f(2) = 6.7 - 5 = 37 = 6^2 + 1
f(3) = 6.37 - 5 = 237 = 6^3 + 1