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

关于算法动态规划的优化

时间:2023-04-04 23:09:08 HTML5

先说说算法在前端的作用和应用:不用多说,提高效率和性能应用:目前也买了算法导论这本书,和读后头晕目眩。各种数学知识需要回去重新认识,哎,终于知道以前学的东西总是有用的。..,我必须边哭边看完我买的那本。不说了,就说说现在已经应用的两个地方的trie树结构。对于后端平面数据转换树结构,适合前端应用。最后,递归改为动态规划在前端瀑布流中的应用进行了调整。第一点,是看了这篇博客,下定决心要往算法坑走。话不多说,直接附上地址链接说明。第二点动态规划参考了下面的博客,写的很清楚,我主要列出了本介绍中已经实现的js空间复杂度优化的代码。不足之处请指出链接说明。作为外层数组,背包容量在js中写成内层数组(按图中推导顺序)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(weight,value,all){varstartTime=newDate().getTime();varreturnList=[];varreturnList_prev=[];变种标志=真;for(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快一倍。在这里我只想分享一下我看完书后应用的东西。如果你有更好的方法,也可以改正——