当前位置: 首页 > Web前端 > HTML5

算法动态规划(经典背包问题)代码优化详解

时间:2023-04-05 23:46:08 HTML5

首先说一下算法在前端的作用和应用:不用多说,提高效率和性能应用:我也买了算法导论目前的书,看完感觉头晕,各种数学知识需要回去重新理解,哎,终于知道以前学的东西总是有用的。..,我必须边哭边看完我买的那本。不说了,就说现在已经应用的两个地方的1trie树结构。对于后端平面数据转换树结构,适合前端应用。最后,递归被改变了。已经成为动态法则2.动态规划在前端瀑布流中的应用。第一点,是看了这篇博客,下定决心要往算法坑走。就不多说了,直接附上地址http://www.cnblogs。com/ypinch...第二点的动态规划参考了下面的博客,写的很清楚。这篇介绍我主要列出已经实现的js空间复杂度优化的代码。不足的地方请指出https://segmentfault.com/a/11...首先我按照回归的方式把js写成item数组作为外层数组,背包容量作为内层数组数据图(按图推导顺序)1用于生成随机大小的项权重值数组functiongetNum(){returnparseInt(Math.random()*100+1);}functiongetArr(size){vararr=[];对于(vari=0;i=0?nowV:0;fV=fV+(i>0&&returnList[i-1][lastW-1]?returnList[i-1][lastW-1]:0);varnV=i>0&&returnList[i-1][j]?returnList[i-1][j]:0;returnList[i][j]=Math.max(fV,nV);}}varendTime=newDate().getTime();returnreturnList[weight.length-1][all-1]+"耗时:"+(endTime-startTime)+"ms";}console.log(aaa(weight,value,V));}这个方法需要构建一个巨大的二维缓存数组(每次用来保存最优解),这一步可以优化为只构建最优解下一步使用functionbbb(wight,value,all){varstartTime=newDate().getTime();varreturnList=[];varreturnList_prev=[];变种标志=真;对于(vari=0;i=0?nowV:0;fV=fV+(i>0&&returnList_prev[lastW-1]?returnList_prev[lastW-1]:0);varnV=i>0&&returnList_prev[j]?returnList_prev[j]:0;returnList[j]=Math.max(fV,nV);}else{varfV=lastW>=0?nowV:0;fV=fV+(i>0&&returnList[lastW-1]?returnList[lastW-1]:0);varnV=i>0&&returnList[j]?returnList[j]:0;returnList_prev[j]=Math.max(fV,nV);}}标志=!flag;}varendTime=newDate().getTime();returnreturnList[all-1]+"耗时:"+(endTime-startTime)+"ms";}console.log(bbb(weight,value,V));}两次对比的结果是:可以看到bbb方式明显比aaa快一倍。在这里我只想分享一下我看完书后应用的东西。如果大家有更好的方法也可以指正——