在 memoizition 中使用数组和对象作为缓存有什么不同?
What is different between using array and object as cache in memoizition?
斐波那契数列传统上用于解释树递归。
function fibonacci(n) {
if(n==0 || n == 1)
return n;
return fibonacci(n-1) + fibonacci(n-2);}
我想实现记忆解决方案。这是我的代码:
var fibonacci = (function(){
var cache = [];
return function(n){
if(n==0 || n == 1){
return n;
}else{
cache[n-1] = cache[n-1]||fibonacci(n-1);
cache[n-2] = cache[n-2]||fibonacci(n-2);
return cache[n-1]+cache[n-2];
}
}
})();
但这是另一个被许多人投票选为最佳实践的答案:
var fibonacci = (function () {
var cache = {};
return function(n) {
// Base case
if(n==0 || n == 1)
return n;
// Recurse only if necessary
if(cache[n-2] === undefined)
cache[n-2] = fibonacci(n-2);
if(cache[n-1] === undefined)
cache[n-1] = fibonacci(n-1);
return cache[n-1] + cache[n-2];
};
})();
我想知道在 memoizition 中使用数组和对象作为缓存有什么不同?
数组和对象之间始终存在的相同差异。
数组据说针对整数属性进行了优化,而对象在各种 属性 名称上表现更好,尤其是稀疏名称。对于您的应用程序,斐波那契数列、数组确实更适合。
斐波那契数列传统上用于解释树递归。
function fibonacci(n) {
if(n==0 || n == 1)
return n;
return fibonacci(n-1) + fibonacci(n-2);}
我想实现记忆解决方案。这是我的代码:
var fibonacci = (function(){
var cache = [];
return function(n){
if(n==0 || n == 1){
return n;
}else{
cache[n-1] = cache[n-1]||fibonacci(n-1);
cache[n-2] = cache[n-2]||fibonacci(n-2);
return cache[n-1]+cache[n-2];
}
}
})();
但这是另一个被许多人投票选为最佳实践的答案:
var fibonacci = (function () {
var cache = {};
return function(n) {
// Base case
if(n==0 || n == 1)
return n;
// Recurse only if necessary
if(cache[n-2] === undefined)
cache[n-2] = fibonacci(n-2);
if(cache[n-1] === undefined)
cache[n-1] = fibonacci(n-1);
return cache[n-1] + cache[n-2];
};
})();
我想知道在 memoizition 中使用数组和对象作为缓存有什么不同?
数组和对象之间始终存在的相同差异。
数组据说针对整数属性进行了优化,而对象在各种 属性 名称上表现更好,尤其是稀疏名称。对于您的应用程序,斐波那契数列、数组确实更适合。