SICP ex1-10 order of Growth

本来是觉得这个题目蛮简单的没打算写一篇博客后来发现还挺麻烦的,就写下来顺便让自己开心一下

题目背景:由ex1-9的change 递归版本,对(change 11 5)函数展开,求取空间的O和时间的O

首先我们画一个树状图,由于展开较大,此处不给图

我们知道空间的函数f(n)=树的层数,时间f(n)=树的节点数

然后通过简单分析我们会发现树的层数就是把change两个para都减到0每减1,树的层数加1

因此得出树的空间函数f(n,a)=n+a(n为amount,a为kinds-of-coins),O(n,a)=n+a

时间稍微麻烦一点,我们通过简单分析得出递归式f(n,a)=f(n-1,a)+f(n,a-1)

这个式子过于抽象,我们简单的列一下

f(1,0)=1

f(2,0)=f(1,0)+f(2,-1)=1+0=1

f(3,0)=f(2,0)+f(3,-1)=1+0=1

f(4,0)=f(3,0)+f(4,-1)=1+0=1

到此我们想来对f(n,0)有了值恒为1的猜想

好了,通过简单的数学归纳法我们得证结果f(n,0)=1

我们不管这个结论继续f(n,1),f(n,2)...

我们通过简单的列举加猜测发现

f(n,0)=1

f(n,1)=n+1

f(n,2)=(n+2)(n+1)/2

再次通过简单的分析,我们发现f(n,0)的前n+1项和为f(n,1),f(n,1)的前n+1项和为f(n,2)

我们猜测f(n,a+1)=f(n,a)+f(n-1,a)+...+f(0,a)(a!=0)

我们简单展开f(n,a+1)=f(n,a)+f(n-1,a)+..+f(0,a)+f(-1,a+1)(a!=0)(这是为什么呢?粗粗看了下,好像是穷举了coins=1*n的各种情况)因为f(-1,a+1)=0,猜测是正确的

到此我们已经可以计算a=5时的时间O了

由于计算好麻烦的样子,由于每次都是n+1项的和,所以下一个式子应该会在最高项指数+1,所以猜测O(n,0)=1,O(n,1)=n,O(n,2)=n^2...O(n,5)=n^5

(网上找不到答案,也不知道对不对...)

(其实直接对一开始分析的递归式进行展开就能得出这个结论了= =,但我这种人脑袋不太灵光,总会绕点远路)


个人思考过程,如有错,欢迎纠正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章