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