資料結構與演算法 演算法及其時間複雜度

2021-10-05 02:36:16 字數 1779 閱讀 1259

寒假開始自學資料結構與演算法,到現在很多東西因為上網課的原因都沒時間再回過頭複習一遍,以致現在很多內容都不清晰了,今天有空就把時間複雜度這一部分進行整理。

時間複雜度:評估執行程式所需的時間。可以估算出程式對處理器的使用程度。

空間複雜度:評估執行程式所需的儲存空間。可以估算出程式對計算機記憶體的使用程度。

為了計算時間複雜度,我們通常會估計演算法的操作單元數量,每個單元執行的時間都是相同的。因此,總執行時間和演算法的操作單元數量最多相差乙個常量係數。

相同大小的不同輸入值仍可能造成演算法的執行時間不同,因此我們通常使用演算法的最壞情況複雜度,記為 t(n) ,定義為任何大小的輸入 n

所需的最大執行時間。另一種較少使用的方法是平均情況複雜度,通常有特別指定才會使用。時間複雜度可以用函式 t(n)

的自然特性加以分類,舉例來說,有著 t(n) = o(n) 的演算法被稱作「線性時間演算法」;而 t(n) = o(mn) 和 mn=

o(t(n)) ,其中 m ≥ n > 1 的演算法被稱作「指數時間演算法」。

大o表示法

像前面用o( )來體現演算法時間複雜度的記法,我們稱之為大o表示法。

演算法複雜度可以從最理想情況、平均情況和最壞情況三個角度來評估,由於平均情況大多和最壞情況持平,而且評估最壞情況也可以避免後顧之憂,因此一般情況下,我們設計演算法時都要直接估算最壞情況的複雜度。

大o表示法o(f(n)中的f(n)的值可以為1、n、logn、n²等,因此我們可以將o(1)、o(n)、o(logn)、o(n²)分別可以稱為常數階、線性階、對數階和平方階,那麼如何推導出f(n)的值呢?我們接著來看推導大o階的方法。

推導大o階

推導大o階,我們可以按照如下的規則來進行推導,得到的結果就是大o表示法:

1.用常數1來取代執行時間中所有加法常數。

2.修改後的執行次數函式中,只保留最高端項

3.如果最高端項存在且不是1,則去除與這個項相乘的常數。

複雜度的比較

注:此圖**別人的部落格。

常用的時間複雜度按照耗費的時間從小到大依次是:

o(1)插入一張各個排序演算法的時間複雜度比較圖

舉例:下面我們就分硬幣這個問題的三種方法(一層迴圈,兩層迴圈,三層迴圈)的時間複雜度進行比較。

問題:實現用一元人民幣換成一分、兩分、五分的硬幣共五十枚。

首先是三層迴圈:

```c

#include

intmain()}}}

迴圈次數為:515151 o(n^3)

兩層迴圈:

#include

intmain()

}}

迴圈次數為:51*51 o(n^2)

一層迴圈:

#include

intmain()

}

迴圈次數為:13 o(1)

資料結構 堆排序問題及其時間複雜度

問題描述 關於排序的問題,我們之前見過氣泡排序,其時間複雜度為o n 2 效率很低,那有沒有高效一點的排序方法?我們就要說到堆排序了,本部落格中主要討論堆排序的實現,以及其時間複雜度分析。解題思路 我們知道如果乙個二叉樹滿足堆的特性,那麼堆頂元素則一定是整個堆中最大或最小的元素 這取決於大堆或小堆 ...

資料結構與演算法 演算法與時間複雜度

演算法的五大特性 1.輸入,0 個或多個 2.輸入 1 個或多個 3.有窮性 4.確定性 5.可行性 如果乙個演算法執行效率 步驟 標記成 t n n 3 2 那麼這個2 可以看作乙個常數 k 就可以寫成 t n n 3 k 可以看出,如果改變常數k的值,並不會影響 t n 這個函式在座標軸的走勢,...

演算法與資料結構 時間複雜度

複雜度是衡量乙個演算法效率高低的乙個重要的因素,一般分為時間複雜度和空間複雜度。空間複雜度,一般在排序等 抽象資料型別的運算和物理實現 有關。本篇主要介紹時間複雜度的一些概念。我們在ram模型 1 記憶體無限大 2 基本運算o 1 下面考慮接下來的內容。準確的說,演算法的複雜性是執行演算法所需要的計...