2022-04-09

js算法初步學習記錄

算法復雜度是我們來衡量一個算法執(zhí)行效率的一個度量標準谤草,算法復雜度通常主要有時間復雜度和空間復雜度兩種芹缔。時間復雜度就是指算法代碼在運行最終得到我們想要的結(jié)果時所消耗的時間,而空間復雜度則是指算法中用來存儲的數(shù)據(jù)結(jié)構(gòu)所占用的空間铝阐。往往一個時間復雜度比較低的算法擁有著較高的空間復雜度消玄,兩者是互相影響的荔燎,我們前面講解數(shù)據(jù)結(jié)構(gòu)中的一些例子和代碼也足以說明這一點贸诚。本文會簡單介紹一下用于描述算法的性能和復雜程度的大O表示法方庭。

此內(nèi)容由?小紅書www.xiaohongshutuiguang.cn)轉(zhuǎn)載提供

我們先來看一段簡單的代碼厕吉,來幫助我們理解什么是大O表示法:

function increment(num) {

return ++num;

}

console.log(increment(1));

上面的代碼聲明了一個函數(shù),然后調(diào)用它械念。這樣的代碼無論我們傳入的參數(shù)是什么头朱,它都會返回自增后的結(jié)果。也就是說該函數(shù)的執(zhí)行時間跟我們傳入的參數(shù)沒有任何關(guān)系龄减,執(zhí)行的時間都是X项钮。因此,我們稱該函數(shù)的復雜度是O(1)欺殿,常數(shù)的寄纵。

我們再來看看前面講過的順序搜索算法,我們直接把代碼拿過來用就好了脖苏。

//順序搜索

function sequentialSearch(array,item) {

for(var i = 0; i < array.length; i++) {

if(item === array[i]) {

return i;

};

};

return -1;

};

現(xiàn)在我們假設(shè)要搜索的數(shù)組是[1,2,3...9,10],然后我們搜索1這個元素定踱,那么在第一次判斷時就能找到想要搜索的元素棍潘。那么我們這里先假設(shè)每執(zhí)行一次循環(huán)的開銷是1。那么我們還想搜索11崖媚,數(shù)組中沒有這個元素亦歉,sequentialSearch

就會執(zhí)行十次遍歷整個數(shù)組,發(fā)現(xiàn)沒有后返回-1畅哑。那么在最壞的情況下肴楷,數(shù)組的長度大小決定了算法的搜索時間。這樣的函數(shù)的時間復雜度就是O(n)荠呐,線性的赛蔫,這里的n就是數(shù)組的長度。

那么泥张,我們來稍微修改一下sequentialSearch讓它可以計算開銷:

//順序搜索

function sequentialSearch(array,item) {

var cost = 0;

for(var i = 0; i < array.length; i++) {

cost++;

if(item === array[i]) {

return i;

};

};

console.log(array.length,cost);

return -1;

};

sequentialSearch([1,2,3,4,5,6,7,8,9,10],11);

很簡單呵恢,就是加上了一個cost變量來計數(shù)。那么我們下面再來看看冒泡排序的時間復雜度是怎樣的媚创,這里我們不再浪費篇幅渗钉,直接在代碼中加入計數(shù)器:

function swap(array,index1,index2) {

var aux = array[index1];

array[index1] = array[index2];

array[index2] = aux;

}

function bubbleSort(array) {

var length = array.length;

var cost = 0;

for (var i = 0; i < length; i++) {

cost++;

for (var j = 0; j < length - 1; j++) {

cost++;

if(array[j] > array[j + 1]) {

swap(array,j,j+1);

}

}

}

console.log(length,cost);

}

bubbleSort([2,3,4,1,8,7,9,10]);

代碼本身沒什么好說的,我們發(fā)現(xiàn)钞钙,如果數(shù)組的長度是8鳄橘,那么我們排序所消耗的時間就是64,如果長度是10芒炼,消耗的時間就是100瘫怜。換句話說,冒泡排序的時間復雜度就是數(shù)組長度的平方焕议,也就是O(n2)宝磨。

上面的代碼是用js畫的一幅圖弧关,其中有一些常用的大O表示法所對應的時間復雜度,大家可以把代碼COPY到本地自行去看一下唤锉,這樣會才會對大O表示法有更好的理解世囊,為了偷點懶,也為了大家可以確實的自己去看一下圖標窿祥。我這里不會把圖給大家貼上的株憾。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市晒衩,隨后出現(xiàn)的幾起案子嗤瞎,更是在濱河造成了極大的恐慌,老刑警劉巖听系,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贝奇,死亡現(xiàn)場離奇詭異,居然都是意外死亡靠胜,警方通過查閱死者的電腦和手機掉瞳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浪漠,“玉大人陕习,你說我怎么就攤上這事≈吩福” “怎么了该镣?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長响谓。 經(jīng)常有香客問我损合,道長,這世上最難降的妖魔是什么歌粥? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任塌忽,我火速辦了婚禮,結(jié)果婚禮上失驶,老公的妹妹穿的比我還像新娘土居。我一直安慰自己,他們只是感情好嬉探,可當我...
    茶點故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布擦耀。 她就那樣靜靜地躺著,像睡著了一般涩堤。 火紅的嫁衣襯著肌膚如雪眷蜓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天胎围,我揣著相機與錄音吁系,去河邊找鬼德召。 笑死,一個胖子當著我的面吹牛汽纤,可吹牛的內(nèi)容都是我干的上岗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼蕴坪,長吁一口氣:“原來是場噩夢啊……” “哼肴掷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起背传,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤呆瞻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后径玖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痴脾,經(jīng)...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年梳星,在試婚紗的時候發(fā)現(xiàn)自己被綠了明郭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,563評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡丰泊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出始绍,到底是詐尸還是另有隱情瞳购,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布亏推,位于F島的核電站学赛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吞杭。R本人自食惡果不足惜盏浇,卻給世界環(huán)境...
    茶點故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芽狗。 院中可真熱鬧绢掰,春花似錦、人聲如沸童擎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顾复。三九已至班挖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芯砸,已是汗流浹背萧芙。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工给梅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人双揪。 一個月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓动羽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盟榴。 傳聞我的和親對象是個殘疾皇子曹质,可洞房花燭夜當晚...
    茶點故事閱讀 43,435評論 2 348

推薦閱讀更多精彩內(nèi)容