資料結構第1章 緒論 1 2 演算法和演算法評價

2021-10-08 12:20:38 字數 2017 閱讀 6194

返回目錄?

演算法(algorithm)是對特定問題求解步驟的一種描述,它是指令的有限序列,其中的每條指令表示乙個或多個操作。乙個演算法還具有下列5個重要特徵:

通常,乙個好的演算法應該考慮達到以下目標:

我們以時間複雜度空間複雜度來度量演算法的效率。

乙個語句的頻度是指該語句在演算法中被重複執行的次數。演算法中所有語句的頻度之和計為t(n

)t_

t(n)

​,它是該演算法規模n

nn的函式,時間複雜度主要分析t(n

)t_

t(n)

​的數量級。演算法中基本運算(最深層迴圈體內的語句)的頻度與t(n

)t_

t(n)

​同數量級,因此通常採用演算法中基本運算的頻度f(n

)f_

f(n)

​來分析演算法的時間複雜度。因此,演算法的時間複雜度記為t(n

)=o(

f(n)

)t_ = o(})

t(n)​=

o(f(

n)​)

,其中o

oo的含義是t(n

)t_

t(n)

​的數量級,其嚴格的數學定義是:若t(n

)t_

t(n)​和f(n

)f_

f(n)

​是定義在正整數集合上的兩個函式,則存在正常數c

cc和n0n_

n0​,使得當n≥n

0n\ge

n≥n0

​時,都滿足0≤t

(n)≤

cf(n

)0\leq}\leq}

0≤t(n)

​≤cf

(n)​

個人理解:也就是說t(n

)t_

t(n)

​其實是對時間的cf(

n)的一

種放

縮cf_的一種放縮

cf(n)​

的一種放

牢記:0≤t

(n)≤

cf(n

)0\leq}\leq}

0≤t(n)

​≤cf

(n)​

演算法的時間複雜度不僅僅取決於問題的規模n

nn,也取決於待輸入資料的性質(如輸入資料元素的初始狀態)。例如,在陣列a[0……n-1]中,查詢指定數值k

kk的演算法大致為:

(

1) i = n -1;

(2)while

(i >=

0&& a[i]

!= k)(3

) i--;(

4)return i;

該語句(3)的頻度不僅僅與問題的規模n有關,而且與例項中a的各個元素的取值以及k的取值也有關

所以,引入了最壞時間複雜度平均時間複雜度最好時間複雜度的概念

一般總是在思考降低最壞時間複雜度,以保證演算法執行的時間不會比它更長。

分析程式的兩個法則:

演算法的空間複雜度s(n

)s(n)

s(n)

定義為該演算法所耗費的儲存空間,它是問題規模n

nn的函式。記為s(n

)=o(

g(n)

)s(n) = o(g(n))

s(n)=o

(g(n

))乙個程式在執行時除需要儲存空間來存放本身所用的指令、常數、變數和輸入資料外,還需要一些對資料進行操作的工作單元和 儲存一些為實現計算所需資訊的輔助空間。若輸入資料所佔空間只取決於問題本身,和演算法無關, 則只需分析除輸入和 程式之外的額外空間。

演算法原地工作是指演算法所需的輔助空間為常量,即o(1

)o(1)

o(1)

資料結構 C 1 第 1 章 緒論

1.1.1 氣泡排序 時間複雜度,用大o記號 t n o n2 t n o n 2 t n o n2 void bubblesort1a n 1.1.2 演算法 演算法是指基於特定的計算模型,旨在解決某一資訊處理問題而設計的乙個指令序列。演算法應該具備 輸入與輸出,基本操作 確定性與可行性,難解性,...

資料結構和演算法(第 1 章) 什麼是資料結構和演算法

不知道你有沒有這樣的疑惑?為什麼一說資料結構或者演算法,它們總是會同時出現,這不應該是兩門課嗎?為什麼要整合到一起呢?接下來我們就帶著問題去了解一下資料結構和演算法之間的關係。什麼是資料結構?什麼是演算法?其實,這樣是沒辦法的事。為了定義的明確和嚴謹,就得加很多限制條件,這樣就不會讓定義模稜兩可,但...

資料結構和演算法緒論

讓程式設計改變世界 change the world by program 資料結構和演算法這門計算機必修課歷來無論在哪個學校,都是無比乏味和催人入睡的。因為很多時候,考研玩的不是智商,其實就是乙個人投入的時間而已。什麼是資料結構?資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間...