我想解釋正確緩存的斐波那契算法的複雜性。下面是代碼(https://jsfiddle.net/msthhbgy/2/):如何解釋緩存的斐波那契算法的複雜性
function allFib(n) {
var memo = [];
for (var i = 0; i < n; i++) {
console.log(i + ":" + fib(i, memo))
}
}
function fib(n, memo) {
if (n < 0) return 0;
else if (n === 1) return 1;
else if (memo[n]) return memo[n];
memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
return memo[n];
}
allFib(5);
將溶液從「開裂編碼訪談」取出並適於的JavaScript。 所以這裏的功能「不是很好」樹叫
我在想這樣的:「最左邊的分支(大膽的)就是評估正在發生的事情」,這絕對是是編號首次傳遞給allFib函數。所以複雜度是O(n)。右邊的所有內容都將從緩存中取出,並且不需要額外的函數調用「是否正確?還有如何將其與樹」理論「連接起來。在這種情況下,樹的深度和高度是4不是5(接近N但不是它)。我想答案是不直觀,但更可靠。
當存在緩存時,f(k)會被評估多少次(對於任何k)? –
@Oliver Charlesworth,這是k倍 –
'備忘錄[n]'沒有使用! –