摘要:函数可以将先前操作的结果记录在某个对象里,从而避免无谓的重复运算。这种优化被称为记忆。在看看斐波那契数列的栗子使用了函数记忆,调用次数从次减少到了次。
函数可以将先前操作的结果记录在某个对象里,从而避免无谓的重复运算。这种优化被称为记忆。
最近读javascript语言精粹这本书函数章节的时候,里面有个记忆函数的优化,书中给的栗子是斐波那契数列执行的时候减少调用次数的优化,那么这种优化能在哪些场景使用呢?
在看书中的栗子之前,我们先看一个栗子:
var memorize = function(f,hasher){ var memoize = function(name){ var cache = memoize.cache; var key = "" + (hasher ? hasher.apply(this,arguments):name) if(!cache[key]){ cache[key] = f.apply(this,arguments); } return cache[key]; } memoize.cache = {}; return memoize; } function add(a,b){ return a+b; } var memorizedAdd = memorize(add,function(){ var args = Array.prototype.slice.call(arguments); return JSON.stringify(args); }); console.time("使用函数记忆执行时间"); for(var i = 0; i < 10000;i++){ memorizedAdd(1,2); } console.timeEnd("使用函数记忆执行时间"); console.time("原生调用执行时间"); for(var i = 0; i < 10000;i++){ add(1,2); } console.timeEnd("原生调用执行时间"); //使用函数记忆执行时间: 15.49462890625ms //原生调用执行时间: 0.962890625ms
上面的memoize方法来自underscore源码,这说明函数记忆并不是万能的。
在看看斐波那契数列的栗子:
var count = 0; var fibonacci = function(n){ count++; return n< 2 ? n : fibonacci(n-1) + fibonacci(n-2); } for(var i = 0; i <= 10;i++){ fibonacci(i); } console.log(count);//453 fibonacci = memorize(fibonacci); for(var i = 0; i <= 10;i++){ fibonacci(i); } console.log(count);//12
使用了函数记忆,调用次数从453次减少到了12次。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/90440.html
摘要:而从数学上看的话,更是短时记忆了,因为梯度流经的时候,经历的是的连环相乘的路径在输入输出门关闭前,显然如前边的数学证明中所述,这样会发生梯度爆炸和 引人入胜的开篇:想要搞清楚LSTM中的每个公式的每个细节为什么是这样子设计吗?想知道simple RNN是如何一步步的走向了LSTM吗?觉得LSTM的工作机制看不透?恭喜你打开了正确的文章! 前方核弹级高能预警!本文信息量非常大,文章长且思维连贯...
摘要:专题系列第十七篇,讲解函数记忆与菲波那切数列的实现定义函数记忆是指将上次的计算结果缓存起来,当下次调用时,如果遇到相同的参数,就直接返回缓存中的数据。 JavaScript 专题系列第十七篇,讲解函数记忆与菲波那切数列的实现 定义 函数记忆是指将上次的计算结果缓存起来,当下次调用时,如果遇到相同的参数,就直接返回缓存中的数据。 举个例子: function add(a, b) { ...
函数式编程之记忆是一种时间换空间的方法,用牺牲空间的复杂度来换取时间的复杂度 字符串连接 function f() { var s = arguments.length + Array.prototype.join.call(arguments); console.log(s); }; 这里使用的是Array.prototype.join方法进行字符串连接返回的是连接的结果 接下来,写一个...
摘要:意味着完全保持,意味着完全丢弃。卡比兽写这篇博文的时间我本可以抓一百只,请看下面的漫画。神经网络神经网络会以的概率判定输入图片中的卡比兽正在淋浴,以的概率判定卡比兽正在喝水,以的概率判定卡比兽正在遭遇袭击。最终结果是卡比兽正在遭遇袭击 我第一次学习 LSTM 的时候,它就吸引了我的眼球。事实证明 LSTM 是对神经网络的一个相当简单的扩展,而且在最近几年里深度学习所实现的惊人成就背后都有它们...
阅读 2944·2023-04-25 17:22
阅读 1493·2019-08-30 15:54
阅读 1241·2019-08-30 15:53
阅读 1752·2019-08-30 15:43
阅读 2929·2019-08-29 12:29
阅读 1175·2019-08-26 11:37
阅读 3211·2019-08-23 18:02
阅读 1575·2019-08-23 14:15