亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

通過js示例講解時間復雜度與空間復雜度

2024-05-06 16:54:01
字體:
來源:轉載
供稿:網友

1. 博客背景

今天有同事在檢查代碼的時候,由于函數寫的性能不是很好,被打回去重構了,細思極恐,今天和大家分享一篇用js講解的時間復雜度和空間復雜度的博客

2. 復雜度的表示方式

之前有看過的,你可能會看到這么一串東西

T(n) = O(f(n)) S(n) = O(f(n)) 

這個叫做大O表示法,其中的T代表的是算法需要執行的總時間

S表示的算法需要的總空間

f(n)表示的是代碼執行的總次數

舉個例子

function go(n) {  var item = 0;   // 這里執行了一次 for (var i = 0; i < n; i++) {  //這里執行了N次  for (var j = 0; j < n; j++) {   //這里執行了n*n次   item = item + i + j;   //這里執行了n*n次  } } return item; //這里執行了一次}

所以說上邊這段代碼是 1+n+n*n*2+1=2+n+2n²

也就是說 T(n) = O(f(2+n+2n²))

然后之前說了時間復雜度看的是一個代碼執行的時間的趨勢, 所以說在N,也就是規模比較大的時候,那些常量是起不到決定性的作用的,所以這個時候我們忽略這些常量,這里的例子是一個單段的代碼,這里只看最大量級的循環就可以了

所以最后的這個代碼的時間復雜度是T(n) = O(n²)

大家可以想想一下數據中平方的曲線圖

3. 時間復雜度

3.1 時間復雜度的定義

首先什么是時間復雜度,時間復雜度這個定義如果在之前沒有接觸過的話,你可能會認為他代表的是一個代碼執行的時間,其實不然,算法的時間復雜度就是說一個算法的執行時間根據數據規模增長的一個趨勢,并不是說代碼執行的具體時間

3.2 幾種常見的時間復雜度

最簡單的O(n)

for (var i = 0; i < n; i++) { sum += i; }

通俗易懂,這段代碼的執行時間完全由N來控制,所以說T(n) = O(n)

當然還有個更簡單的O(1)

function total(n) {console.log(1)}

無論怎么樣,這段函數不受任何參數影響,代碼走一遍就完事,這種的代碼用T(n) = O(1) 表示

T(n) = O(n²)

上邊的例子已經說了一個了兩層循環的那種,在舉一個時間復雜度多塊代碼的情況時間復雜度的計算方式

function go(i) { var sum = 0; for (var j = 0; j < i; j++) {  sum += i; } return sum;}function main(n) { var res = 0; for (var i = 0; i < n; i++) {  res = res + go(i); // 這里是重點 }}

在上邊的代碼種第二段代碼里邊調用了第一段代碼,所以說在這個代碼里邊是

go:(1+n)

在main函數里邊的時候是(1+n*go)=(1+n+n*n)

所以最后的時間復雜度是T(n) = O(n²)

3.3 多塊代碼的時間復雜度

上邊距離說明的T(n) = O(n²) ,是一個函數在另一個函數里邊被調用,這種情況是被把兩個函數的時間復雜度相乘。

還有另外一種情況,就是說在一個函數里邊有多塊代碼,但是并沒有被相互調用,那么這種情況的時候,我們只需要取復雜度最大的代碼塊就可以了

比如說

    function go(n) {     for (var i = 0; i < n; i++) {      for (var j = 0; j < n; j++) {       console.log(1)      }     }     for (var i = 0; i < n; i++) {      console.log(2)     }    }

上邊這塊代碼中,第一塊代碼有兩層循環,通過上邊的例子我們已經得知復雜度是

下邊這塊代碼,是n

那么在這種情況的時候,當N接近無限大的時候N是對n²起不到決定性作用的,所以上邊這塊代碼的時間復雜度就是取最大值的n²

3.4 對數階和相加情況

var i = 1;while (i <= n) {    i = i * 10;}

在這段代碼中,可以看到while里邊,作為判斷條件的i被每次*10,那么所以說最后循環的次數并不是n次,而是說十分之一n次,所以說這個時候的時間復雜度是10i=n,
i=logn

所以得出結論就是時間復雜度是T(n)=O(logn)

然后還有一種情況就是通過改變的變量去增加循環次數的,同理是增加了時間復雜度

還有一些其他的情況比如時間復雜度相加

function go(m,n) { for (var i = 0; i < n; i++) {  console.log(1) } for (var i = 0; i < m; i++) {  console.log(2) }}

請看上邊這一段,這段代碼里邊一個函數里邊有兩個循環,但是形參有兩個,我們現在無法得知n和m到底誰大誰小,所以說這個時候代碼的時間復雜度是O(m+n)

4. 空間復雜度

4.1 空間復雜度的定義

上邊說了那么一大堆的時間復雜度,相比各位已經比較了解了,就名字來看,時間復雜度看的是代碼的執行時間的趨勢,那么同理的,空間復雜度就是指的占用內存的趨勢

4.2 常見的空間復雜度

空間復雜度沒有時間復雜度那么復雜,常見的就那么幾種

畢竟我感覺不會有人一直循環著各種花樣的聲明變量吧。。。

如果有,那么請打死。。。。

  • O(1)
let a = 1;let b = 1;let c = 1;let d = 1;

很簡單,O(1)

  • O(n)
let arr =Array(n)

看這句代碼,代碼中創建了一個n長度的數組,很明顯數組的長度根據n來決定,所以說
O(n)

這里需要說明一下,這里沒有用循環,是因為只要不是在循環里邊不停的聲明變量,只改變值的話是不會層架空間復雜度的

  • O(n²)
let arr=[]for (var i = 0; i < n; i++) {  arr[i]=i  for (var j = 0; j < n; j++) {    arr[i][j]=j  }}

怎么樣,猛的一看這個代碼是不是很刺激,我覺得如果有這種情況的話,一般都會被亂棍打死了。。。

復雜度的優化

再說優化之前我先盜一張圖給大家看一下各個復雜度的曲線圖,方便大家有一個直觀的認識

js,時間復雜度,空間復雜度

舉個比較簡單的優化的例子

console.time('a')function go(n) {   var item = 0;   for (var i = 1; i <= n; i++) {    item += i;   }   return item;}console.timeEnd('a')console.time('b')function go2(n) { var item = n*(n+1)/2 return item;}console.timeEnd('b')go(1000)go2(1000)

大家可以打印一下看一下

希望大家原諒我數學不好,記得之前看到過一個等差數列的例子,想不到其他的性能優化的例子

希望大家看完之后可以了解這些概念,有的時候這個東西真的很重要,找一個曲線比較高的例子

斐波那契,就是從第三項開始依次等于前兩項的和

斐波那契定義

function Fibonacci(n) {  if (n <= 1 ) {    return n;  } else {    return Fibonacci(n - 1) + Fibonacci(n - 2);  }}console.time('b')Fibonacci(????)console.timeEnd('b')

有興趣的可以試試打印一下,看看時間,不過大概50次的時候你得瀏覽器就應該沒有響應了,具體請往上看曲線圖。。。。

以上是我對時間復雜度和空間復雜度的一些認識,有不足或者不對的地方,希望指出來

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
伊人伊成久久人综合网小说| 精品中文字幕在线观看| 91精品国产91久久| 久久久久国产一区二区三区| 社区色欧美激情 | 国产精自产拍久久久久久| 国外成人在线视频| 欧美在线不卡区| 精品无人区太爽高潮在线播放| 国产一区视频在线| 伊是香蕉大人久久| 韩国福利视频一区| 精品国产91久久久久久| 久久天天躁狠狠躁夜夜躁2014| 亚洲成人在线网| 久久亚洲电影天堂| 一区二区三区视频免费在线观看| 欧美亚洲另类视频| 丁香五六月婷婷久久激情| 国产精品精品视频一区二区三区| www.亚洲天堂| 亚洲欧美一区二区三区在线| 国产精品第三页| 国产亚洲欧美另类中文| 国产91热爆ts人妖在线| 亚洲精品之草原avav久久| 最近2019年手机中文字幕| 国产一区二区三区视频免费| 国产精品一区二区三区成人| 成人中文字幕在线观看| 欧美性videos高清精品| 久久久久久国产精品三级玉女聊斋| 97在线观看免费| 精品福利免费观看| 国产亚洲人成网站在线观看| 精品久久香蕉国产线看观看gif| 亚洲欧美中文字幕| 97婷婷涩涩精品一区| 奇米4444一区二区三区| 高清欧美电影在线| 中文欧美在线视频| 欧美刺激性大交免费视频| 成人自拍性视频| 欧美午夜精品久久久久久久| 日韩一区二区三区国产| 欧美日韩成人免费| 日本精品视频网站| 亚洲精品国产品国语在线| 欧美精品在线网站| 欧美性受xxxx白人性爽| 欧美一区深夜视频| 国产精品看片资源| 91福利视频在线观看| 欧美日韩一二三四五区| 国产精品成久久久久三级| 日韩国产欧美精品一区二区三区| 日韩中文在线中文网三级| 精品国产一区二区三区久久久狼| 97成人精品区在线播放| 亚洲免费伊人电影在线观看av| 日韩欧美在线免费观看| 国产精品欧美日韩久久| 国产精品日日摸夜夜添夜夜av| 日韩av中文在线| 久久视频中文字幕| 九九热精品视频国产| 国产精品草莓在线免费观看| 中文字幕日韩在线视频| 亚洲精品日产aⅴ| 亚洲成**性毛茸茸| 国产婷婷97碰碰久久人人蜜臀| 精品国内自产拍在线观看| 九九热在线精品视频| 亚洲精品一区中文字幕乱码| 黑人巨大精品欧美一区免费视频| 九九热精品视频在线播放| 久久男人av资源网站| 国产一区二区三区四区福利| 欧美日韩国产区| 欧美日本啪啪无遮挡网站| 538国产精品一区二区在线| 亚洲人成网站999久久久综合| 神马国产精品影院av| 午夜精品久久久久久99热| 韩国日本不卡在线| 日韩一中文字幕| 欧美小视频在线观看| 亚洲精品电影网站| 久久天天躁狠狠躁夜夜躁2014| 国产精品久久国产精品99gif| 国内精品久久久久久久| 国产91色在线播放| 综合av色偷偷网| 中文字幕日韩精品在线| 欧美裸体视频网站| 国产中文字幕日韩| 国产在线视频不卡| 久久久久久久电影一区| 欧美乱妇高清无乱码| 欧美性生交大片免费| 欧美午夜www高清视频| 欧美色图在线视频| 国产精品美女网站| 国产成人高潮免费观看精品| 91性高湖久久久久久久久_久久99| 成人激情av在线| 亚洲国产成人精品久久久国产成人一区| 亚洲久久久久久久久久久| 国产成人在线一区| 久久精品国产96久久久香蕉| 亚洲深夜福利在线| 欧美视频一区二区三区…| 最近中文字幕2019免费| 国产乱肥老妇国产一区二| 欧美黑人狂野猛交老妇| 日韩黄色在线免费观看| 日韩有码在线播放| 日韩av免费一区| 精品国产91久久久久久老师| 国产精品第一区| 亚洲乱亚洲乱妇无码| 精品久久久久久久久久久久| 欧美中文字幕在线视频| 91精品成人久久| 亚洲欧美另类在线观看| 欧美一区第一页| 911国产网站尤物在线观看| 久久免费视频观看| 亚洲色图色老头| 亚洲一区二区日本| 日韩精品极品在线观看| xvideos国产精品| 日韩欧美aⅴ综合网站发布| 在线日韩av观看| 精品国产一区二区三区在线观看| 色妞色视频一区二区三区四区| 日韩av电影院| 成人有码视频在线播放| 成人午夜在线观看| 欧美电影第一页| 精品久久香蕉国产线看观看亚洲| 国产成人亚洲综合青青| 欧美激情乱人伦| 亚洲桃花岛网站| 夜夜嗨av色综合久久久综合网| 精品露脸国产偷人在视频| yellow中文字幕久久| 91精品国产精品| 深夜福利日韩在线看| 主播福利视频一区| 日韩小视频在线| 国产精品va在线| 国产午夜精品免费一区二区三区| 精品福利视频导航| 美日韩精品视频免费看| 一区二区三区精品99久久| 国产精品久久久久久av下载红粉| 综合欧美国产视频二区| 欧美国产日本高清在线| 国产精品av在线| 91社区国产高清| 国产主播精品在线| xxav国产精品美女主播| 日韩av免费观影|