本來是覺得這個題目蠻簡單的沒打算寫一篇博客後來發現還挺麻煩的,就寫下來順便讓自己開心一下
題目背景:由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
(網上找不到答案,也不知道對不對...)
(其實直接對一開始分析的遞歸式進行展開就能得出這個結論了= =,但我這種人腦袋不太靈光,總會繞點遠路)
個人思考過程,如有錯,歡迎糾正