算法引入(一)

算法的概念

算法是計算機處理信息的本質,因為計算機程序本質上是一個算法來告訴計算機確切的步驟來執(zhí)行一個指定的任務实抡。一般的欠母,當算法在處理信息時,會從輸入設備或數(shù)據(jù)的存儲地址讀取數(shù)據(jù)澜术,把結果寫入輸出設備或某個存儲地址以后再調用艺蝴。

算法是獨立存在的一種解決問題的方法和思想猬腰。

算法的五大特性

  • 輸入:算法具有0個或者多個輸入
  • 輸出:算法至少有1個或者多個輸出
  • 有窮性:算法在優(yōu)先的步驟之后會自動結束而不會無限循環(huán)鸟废,并且每一步步驟可以在可接受的時間內完成。
  • 確定性:算法的每一步都有確定的含義姑荷,不會出現(xiàn)二義性盒延。
  • 可行性:算法的每一步都是可行的,也就是說每一步都是能夠執(zhí)行有限的次數(shù)完成鼠冕。
案例引入

如果 a+b+c=1000添寺,且 a2+b2=c^2(a,b,c 為自然數(shù)),如何求出所有a懈费、b计露、c可能的組合?

import time
start_time = time.time()

for a in range(0, 1001):
    for b in range(0, 1001):
        for c in range(0, 1001):
            if a + b + c ==1000 and a ** 2 + b ** 2 == c ** 2:
                print('a, b, c: %d, %d, %d' %(a, b, c))
end_time = time.time()
print('elapsed: %f' %(end_time - start_time))

print('complete!')
運行結果
import time

start_time = time.time()

# 注意是兩重循環(huán)
for a in range(0, 1001):
    for b in range(0, 1001-a):
        c = 1000 - a - b
        if a**2 + b**2 == c**2:
            print("a, b, c: %d, %d, %d" % (a, b, c))

end_time = time.time()
print("elapsed: %f" % (end_time - start_time))
print("complete!")
執(zhí)行結果

算法效率衡量

執(zhí)行時間反映算法效率

實現(xiàn)算法程序的執(zhí)行時間可以反應出算法的效率,即算法的優(yōu)劣。

單純依靠運行的時間來比較算法的優(yōu)劣并不一定是客觀準確的票罐!

程序的運行離不開i計算機的環(huán)境(包括硬件和操作系統(tǒng))叉趣,這些客觀原因會影響程序運行的速度并反應在程序的執(zhí)行時間上。

時間復雜度與“大O記法”

我們假定計算機執(zhí)行算法的每一個基本操作的時間是固定的一個時間單位该押,那么有多少個基本操作就會代表會花費多少時間單位疗杉。對于不同的機器環(huán)境而言,確切的單位時間不同的蚕礼,但是對于算法進行多少個基本操作(即花費多少時間單位)在規(guī)模數(shù)量級上確是相同的烟具,由此我們可以忽略機器環(huán)境的影響而客觀的反映算法的時間效率。

對于算法的時間效率奠蹬,用“大O記法”來表示朝聋。
“大O記法”:對于單調的整數(shù)函數(shù)f,如果存在一個整數(shù)函數(shù)g和實常數(shù)c>0,使得對于充分大的n總有f(n)<= c*g(n),就是說函數(shù)g是f的一個漸近函數(shù)(忽略常數(shù))囤躁,記為f(n) = O(g(n)). 也就是說玖翅,在趨向無窮的極限意義下,函數(shù)f的增長速度受到函數(shù)g的約束割以,即函數(shù)f與函數(shù)g的特征相似金度。

時間復雜度:假設存在函數(shù)g,使得算法A處理規(guī)模為n的問題示例所用的時間為T(n) = O(g(n)), 稱O(g(n))為算法A的漸近的時間復雜度严沥,簡稱為時間復雜度猜极,記為T(n)
算法引入第一種時間復雜度
最壞時間復雜度

分析算法時,存在幾種可能的考慮

  • 算法完成工作最少需要多少基本操作消玄,即最優(yōu)時間復雜度
  • 算法完成工作最多需要多少基本操作跟伏,即最壞時間復雜度
  • 算法完成工作平均需要多少基本操作,即平均時間復雜度
我們通常關注算法的最壞情況翩瓜,即最壞時間復雜度受扳。
時間復雜度的幾個基本計算規(guī)則
  • 1基本操作,與數(shù)據(jù)規(guī)模(n)無關兔跌,即只有常數(shù)項勘高,認為其時間復雜度為0(1)
  • 2順序結構,時間復雜度按加法進行計算
  • 3循環(huán)結構坟桅,時間復雜度按乘法進行計算
  • 4條件分支結構华望,時間復雜度取最大值
  • 5判斷一個算法的效率時,往往最需要關注操作數(shù)量的最高次項仅乓,其他次要項和常數(shù)可以忽略
  • 6在沒有特殊說明下赖舟,我們所分析的算法的時間復雜度都是指最壞時間復雜度
常見時間復雜度
時間復雜度

時間復雜度之間的關系
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市夸楣,隨后出現(xiàn)的幾起案子宾抓,更是在濱河造成了極大的恐慌子漩,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件石洗,死亡現(xiàn)場離奇詭異痛单,居然都是意外死亡,警方通過查閱死者的電腦和手機劲腿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門旭绒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人焦人,你說我怎么就攤上這事挥吵。” “怎么了花椭?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵忽匈,是天一觀的道長。 經(jīng)常有香客問我矿辽,道長丹允,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任袋倔,我火速辦了婚禮雕蔽,結果婚禮上,老公的妹妹穿的比我還像新娘宾娜。我一直安慰自己批狐,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布前塔。 她就那樣靜靜地躺著嚣艇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪华弓。 梳的紋絲不亂的頭發(fā)上食零,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音寂屏,去河邊找鬼贰谣。 笑死,一個胖子當著我的面吹牛凑保,可吹牛的內容都是我干的冈爹。 我是一名探鬼主播涌攻,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼欧引,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恳谎?” 一聲冷哼從身側響起芝此,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤憋肖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后婚苹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岸更,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年膊升,在試婚紗的時候發(fā)現(xiàn)自己被綠了怎炊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡廓译,死狀恐怖评肆,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情非区,我是刑警寧澤瓜挽,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站征绸,受9級特大地震影響久橙,放射性物質發(fā)生泄漏管怠。R本人自食惡果不足惜淆衷,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渤弛。 院中可真熱鬧吭敢,春花似錦、人聲如沸暮芭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辕宏。三九已至畜晰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瑞筐,已是汗流浹背凄鼻。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留聚假,地道東北人块蚌。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像膘格,于是被迫代替她去往敵國和親峭范。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容