博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法动态规划的代码优化详解(经典的背包问题)
阅读量:7135 次
发布时间:2019-06-28

本文共 2240 字,大约阅读时间需要 7 分钟。

首先说下算法对于前端的作用和应用

作用:不用说了提高效率和性能

应用:目前也是买了算法导论这本书,看得头晕,各种数学知识需要返回去重新认识,哎,终于知道了以前学的东西总有用的。。。,自己买的哭着也要读完,不扯了,直接说下现在已经应用的两个地方

1 trie树结构,对于后端扁平化数据转树形结构适用于前端的应用,终于把递归改成动规了

2 动态规划在前端瀑布流中的应用

第一点我也是看了这篇博客才下定决心迈向算法大坑的,具体不多说直接附上地址

第二点的动态规划参考以下博客,其中说的非常清晰,我主要是列举下对于此篇介绍中已实现的js,做 空间复杂度优化的代码,不足之处请指出

首先我是按照数据的倒退图里面以物品数组作为外层数组,背包容量作为内层数组的形式写的js(按照图的推导顺序)


1 用来生成随机大小的物品重量和价值数组

function getNum() {        return parseInt(Math.random()*100+1);    }    function getArr(size) {        var arr = [];        for (var i = 0;i

2实现

function aaa(wight,value,all) {            var startTime = new Date().getTime();            var returnList = [];            for (var i = 0;i
=0?nowV:0; fV = fV+(i>0&&returnList[i-1][lastW-1]?returnList[i-1][lastW-1]:0); var nV = i>0&&returnList[i-1][j]?returnList[i-1][j]:0; returnList[i][j] = Math.max(fV,nV); } } var endTime = new Date().getTime(); return returnList[wight.length-1][all-1]+"耗时:"+(endTime-startTime)+"ms"; } console.log(aaa(weight,value,V));}

这种方式需要构建庞大的二维缓存数组(用来把每次的最优解存下),这一步完全可以优化成只构建上一步的最优解供给下一次使用

function bbb(wight,value,all) {            var startTime = new Date().getTime();            var returnList = [];            var returnList_prev = [];            var flag = true;            for (var i = 0;i
=0?nowV:0; fV = fV+(i>0&&returnList_prev[lastW-1]?returnList_prev[lastW-1]:0); var nV = i>0&&returnList_prev[j]?returnList_prev[j]:0; returnList[j] = Math.max(fV,nV); } else { var fV = lastW>=0?nowV:0; fV = fV+(i>0&&returnList[lastW-1]?returnList[lastW-1]:0); var nV = i>0&&returnList[j]?returnList[j]:0; returnList_prev[j] = Math.max(fV,nV); } } flag = !flag; } var endTime = new Date().getTime(); return returnList[all-1]+"耗时:"+(endTime-startTime)+"ms"; } console.log(bbb(weight,value,V));}

对比了两次的结果时间分别是:

图片描述

可以看到bbb方法明显比aaa快了一倍之多

这里只是想把自己看书后应用的东西分享下,大家有更好的方法也可以指正-。-

转载地址:http://egvrl.baihongyu.com/

你可能感兴趣的文章
12. 断点续传的原理
查看>>
C#基础:多态:基类可以定义并实现虚(virtual)方法,派生类可以重写(override)这些方法...
查看>>
CSS 制作三角形原理剖析
查看>>
first blog
查看>>
Visifire图表
查看>>
python常用模块之paramiko与ssh
查看>>
Alpha发布——视频博客
查看>>
加载框(loading)
查看>>
Oracle 增加 修改 删除 列
查看>>
AES算法在Python中的使用
查看>>
Angular 中使用惰性加载
查看>>
SpringMVC源码解析 - HandlerAdater - ModelAndViewContainer上下文容器
查看>>
Swift教程之属性
查看>>
动手动脑3
查看>>
HDU 3397 Sequence operation(线段树区间染色加区间合并)
查看>>
【随笔】写下现在所想的,开始写博客
查看>>
linux命令之vi文本编辑器
查看>>
WPF-WrapPanel
查看>>
大家好
查看>>
iOS 疑难杂症 — — UITableView 添加 tableFooterView 旋转屏幕后收不到点击事件!!!...
查看>>