摘要:函數(shù)可以將先前操作的結(jié)果記錄在某個對象里,從而避免無謂的重復運算。這種優(yōu)化被稱為記憶。在看看斐波那契數(shù)列的栗子使用了函數(shù)記憶,調(diào)用次數(shù)從次減少到了次。
函數(shù)可以將先前操作的結(jié)果記錄在某個對象里,從而避免無謂的重復運算。這種優(yōu)化被稱為記憶。
最近讀javascript語言精粹這本書函數(shù)章節(jié)的時候,里面有個記憶函數(shù)的優(yōu)化,書中給的栗子是斐波那契數(shù)列執(zhí)行的時候減少調(diào)用次數(shù)的優(yōu)化,那么這種優(yōu)化能在哪些場景使用呢?
在看書中的栗子之前,我們先看一個栗子:
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("使用函數(shù)記憶執(zhí)行時間"); for(var i = 0; i < 10000;i++){ memorizedAdd(1,2); } console.timeEnd("使用函數(shù)記憶執(zhí)行時間"); console.time("原生調(diào)用執(zhí)行時間"); for(var i = 0; i < 10000;i++){ add(1,2); } console.timeEnd("原生調(diào)用執(zhí)行時間"); //使用函數(shù)記憶執(zhí)行時間: 15.49462890625ms //原生調(diào)用執(zhí)行時間: 0.962890625ms
上面的memoize方法來自underscore源碼,這說明函數(shù)記憶并不是萬能的。
在看看斐波那契數(shù)列的栗子:
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
使用了函數(shù)記憶,調(diào)用次數(shù)從453次減少到了12次。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/90440.html
摘要:而從數(shù)學上看的話,更是短時記憶了,因為梯度流經(jīng)的時候,經(jīng)歷的是的連環(huán)相乘的路徑在輸入輸出門關(guān)閉前,顯然如前邊的數(shù)學證明中所述,這樣會發(fā)生梯度爆炸和 引人入勝的開篇:想要搞清楚LSTM中的每個公式的每個細節(jié)為什么是這樣子設計嗎?想知道simple RNN是如何一步步的走向了LSTM嗎?覺得LSTM的工作機制看不透?恭喜你打開了正確的文章!?前方核彈級高能預警!本文信息量非常大,文章長且思維連貫...
摘要:專題系列第十七篇,講解函數(shù)記憶與菲波那切數(shù)列的實現(xiàn)定義函數(shù)記憶是指將上次的計算結(jié)果緩存起來,當下次調(diào)用時,如果遇到相同的參數(shù),就直接返回緩存中的數(shù)據(jù)。 JavaScript 專題系列第十七篇,講解函數(shù)記憶與菲波那切數(shù)列的實現(xiàn) 定義 函數(shù)記憶是指將上次的計算結(jié)果緩存起來,當下次調(diào)用時,如果遇到相同的參數(shù),就直接返回緩存中的數(shù)據(jù)。 舉個例子: function add(a, b) { ...
函數(shù)式編程之記憶是一種時間換空間的方法,用犧牲空間的復雜度來換取時間的復雜度 字符串連接 function f() { var s = arguments.length + Array.prototype.join.call(arguments); console.log(s); }; 這里使用的是Array.prototype.join方法進行字符串連接返回的是連接的結(jié)果 接下來,寫一個...
摘要:意味著完全保持,意味著完全丟棄??ū全F寫這篇博文的時間我本可以抓一百只,請看下面的漫畫。神經(jīng)網(wǎng)絡神經(jīng)網(wǎng)絡會以的概率判定輸入圖片中的卡比獸正在淋浴,以的概率判定卡比獸正在喝水,以的概率判定卡比獸正在遭遇襲擊。最終結(jié)果是卡比獸正在遭遇襲擊 我第一次學習 LSTM 的時候,它就吸引了我的眼球。事實證明 LSTM 是對神經(jīng)網(wǎng)絡的一個相當簡單的擴展,而且在最近幾年里深度學習所實現(xiàn)的驚人成就背后都有它們...
閱讀 3016·2023-04-25 17:22
閱讀 1578·2019-08-30 15:54
閱讀 1305·2019-08-30 15:53
閱讀 1831·2019-08-30 15:43
閱讀 3116·2019-08-29 12:29
閱讀 1267·2019-08-26 11:37
閱讀 3310·2019-08-23 18:02
閱讀 1644·2019-08-23 14:15