日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

浅谈自记忆函数

發(fā)布時(shí)間:2023/12/2 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈自记忆函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

淺談自記憶函數(shù)

最近閱讀《JavaScript忍者秘籍》看到了一種有趣的函數(shù):自記憶函數(shù)。

簡(jiǎn)介

何為自記憶函數(shù)?書(shū)中提到:

記憶化(memoization)是一種構(gòu)建函數(shù)的處理過(guò)程,能夠記住上次計(jì)算結(jié)果

通過(guò)這句話可以得出,自記憶函數(shù)其實(shí)就是能夠記住上次計(jì)算結(jié)果的函數(shù)。在實(shí)現(xiàn)中,我們可以這樣進(jìn)行處理:當(dāng)函數(shù)計(jì)算得到結(jié)果時(shí),就將該結(jié)果按照參數(shù)存儲(chǔ)起來(lái)。采取這種方式時(shí),如果另外一個(gè)調(diào)用也使用相同的參數(shù),我們則可以直接返回上次存儲(chǔ)的結(jié)果而不是再計(jì)算一遍。

顯而易見(jiàn),像這樣避免既重復(fù)又復(fù)雜的計(jì)算可以顯著提高性能。對(duì)于動(dòng)畫(huà)中的計(jì)算、搜索不經(jīng)常變化的數(shù)據(jù)或任何耗時(shí)的數(shù)學(xué)計(jì)算來(lái)說(shuō),記憶化這種方式是十分有用的。

一個(gè)自記憶函數(shù)的例子

下面這個(gè)例子展現(xiàn)自記憶函數(shù)的工作方式:

// 自記憶素?cái)?shù)檢測(cè)函數(shù) function isPrime (value) {// 創(chuàng)建緩存if (!isPrime.answers) {isPrime.answers = {};}// 檢查緩存的值if (isPrime.answers[value] !== undefined) {return isPrime.answers[value];}// 0和1不是素?cái)?shù)var prime = value !== 0 && value !== 1;// 檢查是否為素?cái)?shù)for (var i = 2; i < value; i ) {if (value % i === 0) {prime = false;break;}}// 存儲(chǔ)計(jì)算值return isPrime.answers[value] = prime }

isPrime函數(shù)是一個(gè)自記憶素?cái)?shù)檢測(cè)函數(shù),每當(dāng)它被調(diào)用時(shí):

首先,檢查它的

answers屬性來(lái)確認(rèn)是否已經(jīng)有自記憶的緩存,如果沒(méi)有,創(chuàng)建一個(gè)。

接下來(lái),檢查參數(shù)之前是否已經(jīng)被緩存過(guò),如果在緩存中找到該值,直接返回緩存的結(jié)果。

如果參數(shù)是一個(gè)全新的值,進(jìn)行正常的素?cái)?shù)檢測(cè)。

最后,存儲(chǔ)并返回計(jì)算值。

總結(jié)

自記憶函數(shù)有兩個(gè)優(yōu)點(diǎn):

  • 由于函數(shù)調(diào)用時(shí)會(huì)尋找之前調(diào)用所得到的值,所以用戶(hù)最終會(huì)樂(lè)于看到所獲得的性能收益。
  • 它不需要執(zhí)行任何特殊請(qǐng)求,也不需要做任何額外初始化,就能順利進(jìn)行工作。

但是,自記憶函數(shù)并不是完美的,它一樣有著缺陷:

  • 任何類(lèi)型的緩存都必然會(huì)為性能犧牲內(nèi)存。
  • 很多人認(rèn)為緩存邏輯不應(yīng)該和業(yè)務(wù)邏輯混合,函數(shù)或方法只需要把一件事情做好。
  • 對(duì)自記憶函數(shù)很難做負(fù)載測(cè)試或估算算法復(fù)雜度,因?yàn)榻Y(jié)果依賴(lài)于函數(shù)之前的輸入。

更多專(zhuān)業(yè)前端知識(shí),請(qǐng)上 【猿2048】www.mk2048.com 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的浅谈自记忆函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。