Bo主前言:
? ? ? 自清明以來祈噪,Bo主是感冒發(fā)燒頭痛牙疼,所以一直拖到現(xiàn)在才發(fā)第二課啡邑。第二課相比第一課概念的東西少很多产徊,主要介紹了算法昂勒、算法的時間復(fù)雜度和算法的空間復(fù)雜度的概念以及計算方法,掌握此篇博客的內(nèi)容有利于日后解決相關(guān)的計算題舟铜,所以加油吧戈盈!還有就是,注意身體谆刨。
2.1 算法是什么塘娶?
2.2 算法的時間復(fù)雜度
? ? 2.2.1 推導(dǎo)大O階方法
? ? 2.2.2 算法比較
2.3 算法的空間復(fù)雜度
在《數(shù)據(jù)結(jié)構(gòu)與算法》這門學(xué)科中,由學(xué)科題目就可以看出數(shù)據(jù)結(jié)構(gòu)與算法是不可分割的痊夭,是同等重要的刁岸。
在許多大牛的博客和書中都會提到一句話:若把數(shù)據(jù)結(jié)構(gòu)比喻成肉體,算法則是靈魂她我。
由此可見难捌,算法的重要性不言自明膝宁!
那么鸦难,算法到底是什么呢根吁?我們該如何才能學(xué)好算法呢?
2.1 算法是什么合蔽?
算法這個詞击敌,對于大多數(shù)非計算機專業(yè)人員來說還是挺陌生的。就像我在沒上專業(yè)課之前拴事,也沒聽說過算法一詞沃斤,不過其實早在小學(xué)甚至更早,我們就已經(jīng)運用到了算法的概念刃宵,只是當(dāng)時不是以算法一詞來稱謂衡瓶。
小學(xué)的時候,數(shù)學(xué)老師常說要試著用不同的解題思路來解決同一個問題牲证,這里的解題思路其實就是算法哮针。
算法,即解決問題的方法坦袍。
解決上班交通問題十厢,我們可以采用乘坐出租車,乘坐大巴車捂齐,乘坐私家車等方式蛮放,當(dāng)然為了響應(yīng)國家低碳生活的號召,也可以選擇走路奠宜。
在這里包颁,我們用了不同的方式來解決上班交通問題,那么對于不同的方式压真,有什么優(yōu)缺點呢娩嚼?
這里就涉及到了算法比較的問題。
我們就拿乘坐出租車和乘坐大巴車來做比較榴都。乘坐出租車通常會比大巴車更快到底目的地待锈,但出租車的費用通常也會比大巴車要高。所以嘴高,對于不同的算法竿音,并沒有完美的可以兼顧所有問題的算法,只是根據(jù)你的側(cè)重點來選擇拴驮,若更加側(cè)重效率春瞬,你可以選擇乘坐出租車的方式;若更加側(cè)重金錢套啤,你也可以選擇乘坐大巴車的方式宽气。
2.2 算法的時間復(fù)雜度
在進行算法分析和比較時随常,通常將算法的時間復(fù)雜度和算法的空間復(fù)雜度作為評階標(biāo)準。
算法的時間復(fù)雜度:即隨著問題規(guī)模的增大萄涯,算法執(zhí)行時間的增長規(guī)模绪氛。
如何計算算法的時間復(fù)雜度,在對算法的事前分析預(yù)估和研究生入學(xué)考試都是相當(dāng)重要的涝影。
2.2.1 推導(dǎo)大O階方法
在這里枣察,我們采用推導(dǎo)大O階方法來計算算法的時間復(fù)雜度。
1.? 用1取代運行時間中的所有加法常數(shù)
2. 在修改后的運行次數(shù)函數(shù)中燃逻,只保留最高階項
3. 如果最高階項存在且不是1序目,則去除這個項相乘的常數(shù)
得到的結(jié)果就是大O階。
由此伯襟,我們得到了一個計算算法時間復(fù)雜度的萬能公式猿涨,可是在計算時間復(fù)雜度時,可沒這么簡單姆怪。
2.2.2 算法比較
當(dāng)問題的規(guī)模增大時叛赚,算法的時間復(fù)雜度通常被分為
1.? 常數(shù)階:O(1)
2. 線性階:O(n)
3. 對數(shù)階:O(logn)
4. 平方階:O(n^2)
5. 指數(shù)階:O(2^n)
常用的時間復(fù)雜度所消耗的時間從小到大依次是:
O(1)<O(n)<O(logn)<O(n^2)<O(2^n)<O(n^n)
2.3 算法的空間復(fù)雜度
算法的空間復(fù)雜度通過計算算法所需要的存儲空間實現(xiàn)。算法執(zhí)行期間所需要的存儲空間包括3部分:
1. 算法程序所占的空間
2. 輸入的初始數(shù)據(jù)所占的存儲空間
3. 算法執(zhí)行過程中所需要的額外的空間
通常片效,我們都使用‘時間復(fù)雜度’來指運行時間的需求红伦,使用‘空間復(fù)雜度’來指空間需求。
當(dāng)不限定的用‘復(fù)雜度’時淀衣,通常指時間復(fù)雜度昙读。