js:数据结构笔记14--高级算法
动态规划:
递归是从顶部开始将问题分解,通过解决所有分解出小问题来解决整体问题;
动态规划从底部开始解决问题,将所有小问题解决,然后合并掉一个整体解决方案;
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[n];
}
} 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[n][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));
js:数据结构笔记14--高级算法的更多相关文章
- js:数据结构笔记12--排序算法(2)
高级排序算法:(处理大数据:百万以上) 希尔排序:是插入排序的优化版: 首先设置间隔数组,然后按照每个间隔,分别进行排序: 如第一个间隔为5,首先a[5]与a[0]进行插入排序;然后a[6]和a[0] ...
- js:数据结构笔记13--检索算法
顺序查找:也称线性查找,暴力查找的一种 基本格式: var nums = []; for(var i = 0; i < 10; ++i) { nums[i] = Math.floor(Math. ...
- js:数据结构笔记11--排序算法(1)
基本准备: function CArray(numElems) { this.dataStore = []; this.pos = 0; this.numElems = numElems; this. ...
- 廖雪峰js教程笔记14 file文件操作
在HTML表单中,可以上传文件的唯一控件就是<input type="file">. 注意:当一个表单包含<input type="file" ...
- js:数据结构笔记7--哈希表
哈希表(散列表):通过哈希函数将键值映射为一个字典; 哈希函数:依赖键值的数据类型来构建一个哈希函数: 一个基本的哈希表:(按字符串计算键值) function HashTable() { this. ...
- js:数据结构笔记5--链表
数组: 其他语言的数组缺陷:添加/删除数组麻烦: js数组的缺点:被实现为对象,效率低: 如果要实现随机访问,数组还是更好的选择: 链表: 结构图: 基本代码: function Node (elem ...
- js:数据结构笔记4--队列
队列是一种特殊的列表,数据结构为FIFO: 定义: function Queue() { this.dataStore = []; this.enqueue = enqueue; this.deque ...
- js:数据结构笔记3--栈
栈是一种特殊的列表,数据结构为LIFO: 定义: function Stack() { this.dataStore = []; this.top = 0; this.push = push; thi ...
- js:数据结构笔记1---数组
JS中数组: 只是一种特殊的对象,比其他语言中效率低: 属性是用来表示偏移量的索引:在JS中,数字索引在内部被转化为字符串类型(这也是为什么写对象属性的时候可以不叫引号),因为对象中的属性必须是字符串 ...
随机推荐
- android webview删除缓存
[1].[代码] 删除保存于手机上的缓存. 跳至 [1] [2] [3] 01 // clear the cache before time numDays 02 private int cl ...
- 第15章 使用Postfix与Dovecot收发电子邮件
章节概述: 本章节从电子邮局系统的组成角色开始讲起,了解MUA.MTA与MDA的作用,熟悉熟悉SMTP.POP3与IMAP4邮局协议. 学习postfix与dovecot服务程序的使用方法并逐条讲解配 ...
- HDFS深入浅析
导读 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统 ...
- IOS 页面之间的跳转
1.UINavigationController popToViewController 对应popViewControllerAnimated: 也可以使用: [self.navigationCon ...
- 他们在军训,我在搞 OI(一)
Day 1 理论上,我现在不应该坐在电脑前打字,因为早在今天上午 6:20 全体新高一同学就坐车前往军(无)训(尽)基(炼)地(狱)了,而今天上午 6:20 我还在被窝里呢…… 没错,我旷掉了军训,然 ...
- Android中多个调用Activity的问题
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" ...
- 初中数学题归纳w
刷完了一张代数 P1 计算 $\left( \frac{1}{1}-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+...+\frac{1}{2011}- \frac{1}{2 ...
- bash read命令用法
read -p "Enter your student ID: " USERNAMEread -s -p "Enter your password: " PAS ...
- Shortest Word Distance
Given a list of words and two words word1 and word2, return the shortest distance between these two ...
- phpmyadmin 主机名自动补全
2015年2月9日 14:29:25 新安装的phpmyadmin在登录界面中, 主机名的输入框没有自动补全功能, 导致每次都得手动输入ip地址 找到 phpmyadmin/libraries/aut ...