摘要:傳統(tǒng)個(gè)數(shù)組的嵌套查詢一般通過(guò)兩個(gè)循環(huán)體嵌套實(shí)現(xiàn),時(shí)間復(fù)雜度為而通過(guò)建立索引對(duì)象的形式的時(shí)間復(fù)雜度為這種犧牲內(nèi)存來(lái)達(dá)到復(fù)雜度降冪的的方法能提高多少性能呢下面是以數(shù)組長(zhǎng)度為數(shù)組為的亂序數(shù)組進(jìn)行測(cè)試的測(cè)試結(jié)果。
傳統(tǒng)2個(gè)數(shù)組的嵌套查詢一般通過(guò)兩個(gè)循環(huán)體嵌套實(shí)現(xiàn),時(shí)間復(fù)雜度為:n^2;
而通過(guò)建立索引對(duì)象的形式的時(shí)間復(fù)雜度為:n;這種犧牲內(nèi)存來(lái)達(dá)到復(fù)雜度降冪的的方法能提高多少性能呢?
下面是以數(shù)組1長(zhǎng)度為10000;數(shù)組2為50000的亂序數(shù)組進(jìn)行測(cè)試的測(cè)試結(jié)果。(測(cè)試結(jié)果的單位都是ms)
Firefox測(cè)試結(jié)果: 平均快48倍
// 第一次 傳統(tǒng)的嵌套循環(huán):1479 建立索引:30 // 第二次 傳統(tǒng)的嵌套循環(huán):1852 建立索引:36 // 第三次 傳統(tǒng)的嵌套循環(huán):1754 建立索引:38
Chrome測(cè)試結(jié)果: 平均快64倍
// 第一次 傳統(tǒng)的嵌套循環(huán):1800 建立索引:26 // 第二次 傳統(tǒng)的嵌套循環(huán):1297 建立索引:35 // 第三次 傳統(tǒng)的嵌套循環(huán):2522 建立索引:27
IE11測(cè)試結(jié)果:平均快11倍
// 第一次 傳統(tǒng)的嵌套循環(huán):110431 建立索引:616 // 第二次 傳統(tǒng)的嵌套循環(huán):7172 建立索引:689 // 第三次 傳統(tǒng)的嵌套循環(huán):7310 建立索引:686
完整的代碼(實(shí)際使用中請(qǐng)考慮數(shù)據(jù)類(lèi)型校驗(yàn)和是否為空判斷)
// 情景:從數(shù)組arr1的id拿到數(shù)組arr2中的所有記錄,統(tǒng)計(jì)急了num的總和寫(xiě)回到arr1中 // 模擬2個(gè)數(shù)組 var start = 1000000 // 定義模擬2個(gè)數(shù)組的方法;count: arr1的長(zhǎng)度值;n: 為arr2為arr1的長(zhǎng)度的多少倍 function getArr(count, n) { var o = { arr1: [], arr2: [] } for(var i = 0; i核心代碼:
// 使用降冪算法 // arr2進(jìn)行分組,建立以id值為key的對(duì)象 function getArrGroup(arr, id) { var o = {} var len = arr.length var index for(var i = 0; i < len; i++){ index = arr[i][id] // 建立索引,防止覆蓋 if(o[index]===undefined){ o[index] = [arr[i]] } else { o[index].push(arr[i]) } } return o } // 給arr1項(xiàng)的count賦值 function setArrCount(arr, o, id, fn) { var len = arr.length for(var i = 0; i < len; i++) { arr[i] = fn(arr, o, i)// fn定義處理邏輯 } console.log(arr) return arr }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/98085.html
摘要:概述的解釋器優(yōu)化器代碼可能在字節(jié)碼或者優(yōu)化后的機(jī)器碼狀態(tài)下執(zhí)行,而生成字節(jié)碼速度很快,而生成機(jī)器碼就要慢一些了。比如有一個(gè)函數(shù),從獲取值引擎生成的字節(jié)碼結(jié)構(gòu)是這樣的指令是獲取參數(shù)指向的對(duì)象,并存儲(chǔ)在,第二步則返回。 1 引言 本期精讀的文章是:JS 引擎基礎(chǔ)之 Shapes and Inline Caches 一起了解下 JS 引擎是如何運(yùn)作的吧! JS 的運(yùn)作機(jī)制可以分為 AST 分...
摘要:引擎可以是一個(gè)標(biāo)準(zhǔn)的解釋器,也可以是一個(gè)將編譯成某種形式的字節(jié)碼的即時(shí)編譯器。和其他引擎最主要的差別在于,不會(huì)生成任何字節(jié)碼或是中間代碼。不使用中間字節(jié)碼的表示方式,就沒(méi)有必要用解釋器了。 原文地址:https://blog.sessionstack.com... showImg(https://segmentfault.com/img/bVVwZ8?w=395&h=395); 數(shù)周之...
摘要:與異步編程按照維基百科上的解釋獨(dú)立于主控制流之外發(fā)生的事件就叫做異步。因?yàn)榈拇嬖冢辽僭诒粯?biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒(méi)。在握手過(guò)程中,端點(diǎn)交換認(rèn)證和密鑰以建立或恢復(fù)安全會(huì)話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個(gè)學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類(lèi)算法是面試的熱門(mén)選項(xiàng)。如果你是一個(gè)會(huì)寫(xiě)快排的程序猿,面試官在比較...
摘要:與異步編程按照維基百科上的解釋獨(dú)立于主控制流之外發(fā)生的事件就叫做異步。因?yàn)榈拇嬖冢辽僭诒粯?biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒(méi)。在握手過(guò)程中,端點(diǎn)交換認(rèn)證和密鑰以建立或恢復(fù)安全會(huì)話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個(gè)學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類(lèi)算法是面試的熱門(mén)選項(xiàng)。如果你是一個(gè)會(huì)寫(xiě)快排的程序猿,面試官在比較...
摘要:與異步編程按照維基百科上的解釋獨(dú)立于主控制流之外發(fā)生的事件就叫做異步。因?yàn)榈拇嬖冢辽僭诒粯?biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒(méi)。在握手過(guò)程中,端點(diǎn)交換認(rèn)證和密鑰以建立或恢復(fù)安全會(huì)話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個(gè)學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類(lèi)算法是面試的熱門(mén)選項(xiàng)。如果你是一個(gè)會(huì)寫(xiě)快排的程序猿,面試官在比較...
閱讀 3541·2021-11-22 11:59
閱讀 947·2021-09-27 13:36
閱讀 3608·2021-09-24 09:47
閱讀 2255·2021-09-01 11:39
閱讀 974·2021-08-31 09:37
閱讀 2308·2021-08-05 10:01
閱讀 1669·2019-08-30 15:55
閱讀 699·2019-08-30 15:54