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中,数字索引在内部被转化为字符串类型(这也是为什么写对象属性的时候可以不叫引号),因为对象中的属性必须是字符串 ...
随机推荐
- Gulp, 比Grunt更好用的前端构建工具
Gulp, 比Grunt更好用的前端构建工具 本文主要从两个方面介绍Gulp:一,Gulp相对于Grunt的优势: 二,Gulp的安装和使用流程 Gulp相对于Grunt的优势 gulp.js 的作者 ...
- Flume-NG之KafkaChannel
apache下一个版本(1.6)将会带来一个新的组件KafKaChannel,顾名思义就是使用kafka做channel,当然在CDH5.3版本已经存在这个channel. 大伙知道,常用的chann ...
- cocos2d-x创建精灵动画方式汇总
1.创建精灵框架缓存,并向其中添加相应的动画文件(plist),最后,通过动画集缓存生产动画 CCSpriteFrameCache *cache = CCSpriteFrameCache::share ...
- String的内存分配
1.String类是final类不能被继承 2.String str="abc"的内部工作 (1)先在栈中定 一个名为str的String类的引用变量 String str: (2 ...
- 专注docker安全:Security Scanning
导读 Docker毫无疑问是近期运维同学们的热点话题,Docker安全也由此倍受重视,Docker Security Scanning 是一款Docker镜像扫描的安全工具,目前已经在Docker C ...
- Unity3d iOS基本优化和高级优化
原地址:http://www.cocoachina.com/bbs/read.php?tid=70395&page=1 分享看见的2篇好文.简单翻译了一下并且放出原文 http://www.c ...
- Nmap备忘单:从探索到漏洞利用(Part 2)
这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫 ...
- Python strip、lstrip和rstrip的用法
Python中strip用于去除字符串的首尾字符,同理,lstrip用于去除左边的字符,rstrip用于去除右边的字符. 这三个参数都可以传入一个参数,指定要去除的首尾字符. 需要注意的是,传入的是一 ...
- mysql in 子查询 效率慢 优化(转)
mysql in 子查询 效率慢 优化(转) 现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久! ...
- 推荐一篇java抽象类和接口区别的文章
写的不错,http://dev.yesky.com/436/7581936.shtml