您的位置:首页 > 理论基础 > 数据结构算法

js:数据结构笔记14--高级算法

2014-10-25 12:04 429 查看
动态规划:

递归是从顶部开始将问题分解,通过解决所有分解出小问题来解决整体问题;

动态规划从底部开始解决问题,将所有小问题解决,然后合并掉一个整体解决方案;

  

function dynFib(n) {
var val = [];
for(var i = 1; i <= n; ++i) {
val[i] = 1;
}
if(n === 1) {
return 1;
} else {
for(var i = 2; i <= n; ++i) {
val[i] = i * val[i-1];
}
return val
;
}
}

function iterFib(n) {
var last = 1,
result = 1;
for(var i = 2; i <= n; ++i) {
result = last * i;
last = result;
}
return result;
}


背包问题:

递归解决:

function max(a,b) {
return (a > b) ?  a : b;
}
function knapsack(capacity,size,value,n) {
if(n == 0 || capacity ==0) {
return 0;
}
if(size[n -1] > capacity) {
return knapsack(capacity,size,value,n-1);
} else {
return max(value[n - 1] +
knapsack(capacity - size[n - 1],size,value,n-1),
knapsack(capacity,size,value,n-1));
}
}

var value = [4,5,10,11,13],
size = [3,4,7,8,9],
capacity = 16,
n = 5;
console.log(knapsack(capacity,size,value,n));


 动态规划:

function max(a,b) {
return (a > b) ?  a : b;
}
function dknapsack(capacity,size,value,n) {
var k = [];
for(var i = 0; i <= capacity + 1; ++i) {
k[i] = [];
}
for(var i = 0; i <= n; ++i) {
for(var w = 0; w <= capacity; ++w) {
if(i == 0 || w == 0) {
k[i][w] = 0;
} else if(size[i - 1] <= w) {
k[i][w] = max(value[i - 1] + k[i - 1][w - size[i - 1]], k[i - 1][w]);
} else {
k[i][w] = k[i - 1][w];
}
}
}
return k
[capacity];
}

var value = [4,5,10,11,13],
size = [3,4,7,8,9],
capacity = 16,
n = 5;
console.log(dknapsack(capacity,size,value,n));


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: