日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

如何用JavaScript學(xué)習(xí)算法復(fù)雜度

瀏覽:25日期:2023-06-05 10:34:20
概述

在本文中,我們將探討 “二次方” 和 “n log(n)” 等術(shù)語在算法中的含義。

在后面的例子中,我將引用這兩個數(shù)組,一個包含 5 個元素,另一個包含 50 個元素。我還會用到JavaScript中方便的performance API來衡量執(zhí)行時間的差異。

const smArr = [5, 3, 2, 35, 2];const bigArr = [5, 3, 2, 35, 2, 5, 3, 2, 35, 2, 5, 3, 2, 35, 2, 5, 3, 2, 35, 2, 5, 3, 2, 35, 2, 5, 3, 2, 35, 2, 5, 3, 2, 35, 2, 5, 3, 2, 35, 2, 5, 3, 2, 35, 2, 5, 3, 2, 35, 2];什么是 Big O 符號?

Big O 表示法是用來表示隨著數(shù)據(jù)集的增加,計算任務(wù)難度總體增長的一種方式。盡管還有其他表示法,但通常 big O 表示法是最常用的,因為它著眼于最壞的情況,更容易量化和考慮。最壞的情況意味著完成任務(wù)需要最多的操作次數(shù);如果你在一秒鐘內(nèi)就能恢復(fù)打亂魔方,那么你只擰了一圈的話,不能說自己是做得最好的。

當(dāng)你進一步了解算法時,就會發(fā)現(xiàn)這非常有用,因為在理解這種關(guān)系的同時去編寫代碼,就能知道時間都花在了什么地方。

當(dāng)你了解更多有關(guān) Big O 表示法的信息時,可能會看到下圖中不同的變化。我們希望將復(fù)雜度保持在盡可能低的水平,最好避免超過 O(n)。

如何用JavaScript學(xué)習(xí)算法復(fù)雜度

O(1)

這是理想的情況,無論有多少個項目,不管是一個還是一百萬個,完成的時間量都將保持不變。執(zhí)行單個操作的大多數(shù)操作都是 O(1)。把數(shù)據(jù)寫到數(shù)組、在特定索引處獲取項目、添加子元素等都將會花費相同的時間量,這與數(shù)組的長度無關(guān)。

const a1 = performance.now();smArr.push(27);const a2 = performance.now();console.log(`Time: ${a2 - a1}`); // Less than 1 Millisecondconst b1 = performance.now();bigArr.push(27);const b2 = performance.now();console.log(`Time: ${b2 - b1}`); // Less than 1 MillisecondO(n)

在默認情況下,所有的循環(huán)都是線性增長的,因為數(shù)據(jù)的大小和完成的時間之間存在一對一的關(guān)系。所以如果你有 1,000 個數(shù)組項,將會花費的 1,000 倍時間。

const a1 = performance.now();smArr.forEach(item => console.log(item));const a2 = performance.now();console.log(`Time: ${a2 - a1}`); // 3 Millisecondsconst b1 = performance.now();bigArr.forEach(item => console.log(item));const b2 = performance.now();console.log(`Time: ${b2 - b1}`); // 13 MillisecondsO(n^2)

指數(shù)增長是一個陷阱,我們都掉進去過。你是否需要為數(shù)組中的每個項目找到匹配對?將循環(huán)放入循環(huán)中是一種很好的方式,可以把 1000 個項目的數(shù)組變成一百萬個操作搜索,這將會使你的瀏覽器失去響應(yīng)。與使用雙重嵌套循環(huán)進行一百萬次操作相比,最好在兩個單獨的循環(huán)中進行 2,000 次操作。

const a1 = performance.now();smArr.forEach(() => { arr2.forEach(item => console.log(item));});const a2 = performance.now();console.log(`Time: ${a2 - a1}`); // 8 Millisecondsconst b1 = performance.now();bigArr.forEach(() => { arr2.forEach(item => console.log(item));});const b2 = performance.now();console.log(`Time: ${b2 - b1}`); // 307 MillisecondsO(log n)

我認為關(guān)于對數(shù)增長最好的比喻,是想象在字典中查找像 “notation” 之類的單詞。你不會在一個詞條一個詞條的去進行搜索,而是先找到 “N” 這一部分,然后是 “OPQ” 這一頁,然后按字母順序搜索列表直到找到匹配項。

通過這種“分而治之”的方法,找到某些內(nèi)容的時間仍然會因字典的大小而改變,但遠不及 O(n) 。因為它會在不查看大部分數(shù)據(jù)的情況下逐步搜索更具體的部分,所以搜索一千個項目可能需要少于 10 個操作,而一百萬個項目可能需要少于 20 個操作,這使你的效率最大化。

在這個例子中,我們可以做一個簡單的快速排序。

const sort = arr => { if (arr.length < 2) return arr; let pivot = arr[0]; let left = []; let right = []; for (let i = 1, total = arr.length; i < total; i++) { if (arr[i] < pivot) left.push(arr[i]); else right.push(arr[i]); }; return [ ...sort(left), pivot, ...sort(right) ];};sort(smArr); // 0 Millisecondssort(bigArr); // 1 MillisecondO(n!)

最糟糕的一種可能性是析因增長。最經(jīng)典的例子就是旅行的推銷員問題。如果你要在很多距離不同的城市之間旅行,如何找到在所有城市之間返回起點的最短路線?暴力方法將是檢查每個城市之間所有可能的路線距離,這是一個階乘并且很快就會失控。

由于這個問題很快會變得非常復(fù)雜,因此我們將通過簡短的遞歸函數(shù)演示這種復(fù)雜性。這個函數(shù)會將一個數(shù)字去乘以函數(shù)自己,然后將數(shù)字減去1。階乘中的每個數(shù)字都會這樣計算,直到為 0,并且每個遞歸層都會把其乘積添加到原始數(shù)字中。

階乘只是從 1 開始直至該數(shù)字的乘積。那么6!是1x2x3x4x5x6 = 720。

const factorial = n => { let num = n; if (n === 0) return 1 for (let i = 0; i < n; i++) { num = n * factorial(n - 1); }; return num;};factorial(1); // 2 Millisecondsfactorial(5); // 3 Millisecondsfactorial(10); // 85 Millisecondsfactorial(12); // 11,942 Milliseconds

我原本打算顯示factorial(15),但是 12 以上的值都太多,并且使頁面崩潰了,這也證明了為什么需要避免這種情況。

結(jié)束語

我們需要編寫高性能的代碼似乎是一個不爭得事實,但是我敢肯定,幾乎每個開發(fā)人員都創(chuàng)建過至少兩重甚至三重嵌套循環(huán),因為“它確實有效”。Big O 表示法在表達和考慮復(fù)雜性方面是非常必要的,這是我們從未有過的方式。

以上就是如何用JavaScript學(xué)習(xí)算法復(fù)雜度的詳細內(nèi)容,更多關(guān)于JS算法復(fù)雜度的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人精品中文字幕| 狠狠爱成人网| 欧美日韩中文字幕一区二区三区| 黄色在线一区| 国产精品毛片视频| 在线亚洲激情| 精品91福利视频| 99精品视频精品精品视频| 奇米亚洲欧美| 亚洲激情另类| 欧美日韩精品免费观看视完整 | 99国产精品视频免费观看一公开 | 一二三区精品| 国产私拍福利精品视频二区| 日韩国产综合| 亚洲欧美网站在线观看| 亚洲国产欧美日本视频| 日韩天堂av| 精品伊人久久久| 日本va欧美va瓶| 不卡中文字幕| 伊人久久国产| 欧美视频二区| 日韩专区一卡二卡| 亚洲91精品| 精品视频一区二区三区四区五区| 日韩专区一卡二卡| 久久中文字幕av| 久久电影tv| 四虎精品一区二区免费| 国产91精品对白在线播放| 精品国产亚洲一区二区三区在线 | 久久久久国产精品一区三寸| 国产精品伦一区二区| 免费人成黄页网站在线一区二区| 福利欧美精品在线| 欧美1区2区3| 日韩精品乱码av一区二区| 高清av不卡| 日韩精品欧美成人高清一区二区| 久久精品国产www456c0m| 国产精品久久久久久久久久久久久久久| 久久国产66| 在线亚洲人成| 日韩久久一区二区三区| 国产亚洲高清在线观看| 国产乱子精品一区二区在线观看| 日韩激情啪啪| 日本不卡一区二区三区| 欧美日本二区| 国产精品一区二区三区美女| 亚洲资源网站| 国产精品中文| 国产精品日韩精品中文字幕| 欧美精品三级在线| 日本一不卡视频| 国产调教一区二区三区| 亚洲精品极品| 国产无遮挡裸体免费久久| 久久高清国产| 国产精品亚洲综合在线观看| 国产精品手机在线播放| 久久精品国产99国产| 日韩一区欧美| 亚洲精品网址| 美女视频黄久久| 欧美三区四区| 不卡一区2区| 国产精品亚洲欧美日韩一区在线 | 亚洲国内精品| 亚洲手机在线| 1024精品久久久久久久久| 蜜臀久久99精品久久久久宅男 | 国产在线视频欧美一区| 电影91久久久| а√天堂8资源中文在线| 蜜臀av免费一区二区三区| 日韩高清一区二区| 成人精品亚洲| 国产精品片aa在线观看| 国产日韩电影| 国产伦精品一区二区三区视频| 日韩久久精品网| 久久国产88| 极品av在线| 99热精品在线| 捆绑调教美女网站视频一区| 在线一区免费观看| 久久精品国产999大香线蕉| 亚洲国产成人精品女人| 日本视频一区二区| 精品国产亚洲一区二区在线观看| 日韩专区欧美专区| 久久毛片亚洲| 日韩av中文字幕一区二区三区| 欧美日韩视频| 日韩av自拍| 亚洲精品系列| 中文字幕在线官网| 国产精品s色| 日韩中文av| 日韩中文字幕不卡| 欧美肉体xxxx裸体137大胆| 免费在线观看一区| 欧美偷窥清纯综合图区| 亚洲国产福利| 国产伦乱精品| 中文字幕一区二区三区四区久久| 日韩不卡视频在线观看| 久久精品一区| 欧美精品1区| 日本免费新一区视频| 美女91精品| 国产亚洲在线| 天堂日韩电影| 国产精品麻豆久久| 国产h片在线观看| 精品一区视频| 国产精品magnet| 一二三区精品| 欧美日韩激情| 亚洲综合日本| 美女国产一区| 亚洲有吗中文字幕| 国产精品亚洲四区在线观看| 国产精品一区亚洲| 91亚洲无吗| 欧美aⅴ一区二区三区视频| 91成人在线网站| 久久精品凹凸全集| 亚洲精品乱码| 人人精品久久| 亚洲婷婷丁香| 日本成人在线不卡视频| 日韩久久一区| 久久国产精品亚洲77777| 91高清一区| 亚洲欧美不卡| 久久精品97| 麻豆成人91精品二区三区| 成人一二三区| 久久久精品日韩| 免费人成在线不卡| 欧美国产另类| 久久精品影视| 视频一区在线播放| 三级久久三级久久久| 国产一区二区三区久久| 久久精品影视| 久久99免费视频| 日韩在线观看不卡| 快she精品国产999| 国产精品永久| 亚洲一级特黄| 激情久久99| 亚洲夜间福利| 久久国产麻豆精品| 激情久久五月| 欧美日韩亚洲一区在线观看| 日韩另类视频| 日韩国产精品久久久| 日本免费一区二区三区四区| 亚洲精品伦理| 正在播放日韩精品| 日韩av中文字幕一区| 国产亚洲精品美女久久 | 卡一精品卡二卡三网站乱码| 在线综合视频| 精品视频国产| 亚洲精品四区| 欧美日韩在线网站| 国产精品v一区二区三区| 亚洲第一区色| 牛牛精品成人免费视频| 中文字幕视频精品一区二区三区| 视频小说一区二区| 亚洲制服一区| 亚洲一级高清| av免费不卡国产观看| 蜜桃视频一区二区| 91精品久久久久久久久久不卡| 国产精品日韩精品中文字幕| 亚洲精品在线a| 视频一区欧美精品| 另类亚洲自拍| 1000部精品久久久久久久久| 国产精品久久亚洲不卡| 欧美日韩亚洲一区三区| 国产视频一区二区在线播放| 婷婷精品久久久久久久久久不卡| 不卡av一区二区| a日韩av网址| av免费不卡国产观看| 麻豆精品久久| 精品亚洲二区| 日韩一区精品| 国产精品久久国产愉拍| 精品亚洲二区| 国产精品成人a在线观看| 国产精品一国产精品k频道56|