《數據結構與算法》第二課:算法

博主前言:

發佈於2019.4.11. 自清明以來,博主是感冒發燒頭痛牙疼,所以一直拖到現在才發第二課。第二課相比第一課概念的東西少很多,主要介紹了算法、算法的時間複雜度和算法的空間複雜度的概念以及計算方法,掌握此篇博客的內容有利於日後解決相關的計算題,所以加油吧!還有就是,注意身體。

2.1 算法是什麼?
2.2 算法的時間複雜度
2.2.1 推導大O階方法
2.2.2 算法比較
2.3 算法的空間複雜度

在《數據結構與算法》這門學科中,由學科題目就可以看出數據結構與算法是不可分割的,是同等重要的。
在許多大牛的博客和書中都會提到一句話:若把數據結構比喻成肉體,算法則是靈魂。
由此可見,算法的重要性不言自明!
那麼,算法到底是什麼呢?我們該如何才能學好算法呢?

2.1 算法是什麼?

算法這個詞,對於大多數非計算機專業人員來說還是挺陌生的。就像我在沒上專業課之前,也沒聽說過算法一詞,不過其實早在小學甚至更早,我們就已經運用到了算法的概念,只是當時不是以算法一詞來稱謂。
小學的時候,數學老師常說要試着用不同的解題思路來解決同一個問題,這裏的解題思路其實就是算法。
算法,即解決問題的方法。
解決上班交通問題,我們可以採用乘坐出租車,乘坐大巴車,乘坐私家車等方式,當然爲了響應國家低碳生活的號召,也可以選擇走路。
在這裏,我們用了不同的方式來解決上班交通問題,那麼對於不同的方式,有什麼優缺點呢?
這裏就涉及到了算法比較的問題。
我們就拿乘坐出租車和乘坐大巴車來做比較。乘坐出租車通常會比大巴車更快到底目的地,但出租車的費用通常也會比大巴車要高。所以,對於不同的算法,並沒有完美的可以兼顧所有問題的算法,只是根據你的側重點來選擇,若更加側重效率,你可以選擇乘坐出租車的方式;若更加側重金錢,你也可以選擇乘坐大巴車的方式。

2.2 算法的時間複雜度

在進行算法分析和比較時,通常將算法的時間複雜度和算法的空間複雜度作爲評階標準。
算法的時間複雜度:即隨着問題規模的增大,算法執行時間的增長規模。
如何計算算法的時間複雜度,在對算法的事前分析預估和研究生入學考試都是相當重要的。

2.2.1 推導大O階方法

在這裏,我們採用推導大O階方法來計算算法的時間複雜度。
1 .用1取代運行時間中的所有加法常數
2 .在修改後的運行次數函數中,只保留最高階項
3 .如果最高階項存在且不是1,則去除這個項相乘的常數
得到的結果就是大O階。
由此,我們得到了一個計算算法時間複雜度的萬能公式,可是在計算時間複雜度時,可沒這麼簡單。

2.2.2 算法比較

當問題的規模增大時,算法的時間複雜度通常被分爲

  1. 常數階:O(1)
  2. 線性階:O(n)
  3. 對數階:O(logn)
  4. 平方階:O(n^2)
  5. 指數階:O(2^n)

常用的時間複雜度所消耗的時間從小到大依次是:

O(1)<O(n)<O(logn)<O(n^2) <O(2^n) <O(n^n)

2.3 算法的空間複雜度

算法的空間複雜度通過計算算法所需要的存儲空間實現。算法執行期間所需要的存儲空間包括3部分:
1.算法程序所佔的空間
2.輸入的初始數據所佔的存儲空間
3.算法執行過程中所需要的額外的空間
通常,我們都使用‘時間複雜度’來指運行時間的需求,使用‘空間複雜度’來指空間需求。

當無限定詞的用‘複雜度’時,通常指時間複雜度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章