數據結構學習筆記(一丶基礎知識及時間空間複雜度)

數據結構是計算機存儲,組織數據的方式,指相互之間存在一種或者多種特定關係的數據元素的集合。
算法就是定義良好的計算過程,它取一個或者一組的值爲輸入,併產生出一個或者一組值爲輸出,簡單的來講算法就是一系列計算步驟,用來將輸入數據轉化爲輸出結果。
算法效率
算法效率分析分爲兩種:第一種是時間效率,第二種是空間效率。時間效率被稱爲時間複雜度,而空間效率被稱做空間複雜度。 時間複雜度主要衡量的是一個算法的運行速度,而空間複雜度主要衡量一個算法所須要的額外空間,在計算機發展的早期,計算機的存儲容量很小。因此對空間複雜度非常在意。可是通過計算機行業的迅速發展,計算機的存儲容量已經達到了很高的程度。因此咱們現在已經不須要再特別關注一個算法的空間複雜度。
1.時間複雜度
定義:在計算機科學中,算法的時間複雜度是一個函數,它定量描述了該算法的運行時間。一個算法執行所耗費的時間,從理論上說,是不能算出來的,只有你把你的程序放在機器上跑起來,才能知道。可是咱們須要每一個算法都上機測試嗎?是能夠都上機測試,可是這很麻煩,因此纔有了時間複雜度這個分析方式。一個算法所花費的時間與其中語句的執行次數成正比例,算法中的基本操做的執行次數,爲算法的時間複雜度。




算法

大O漸進表示法
一、用常數1取代運行時間中的全部加法常數。
二、在修改後的運行次數函數中,只保留最高階項。
三、若是最高階項存在且不是1,則去除與這個項目相乘的常數。獲得的結果就是大O階。


數據結構

例:ide

long Fib(size_t N) 
{
return N < 2 ? N : Fib(N-1)+Fib(N-2);
}
分析發現基本操做遞歸了2^N次,時間複雜度爲O(2^N)。

2.空間複雜度
空間複雜度是對一個算法在運行過程當中臨時佔用存儲空間大小的量度 。空間複雜度不是程序佔用了多少bytes的空間,由於這個也沒太大意義,因此空間複雜度算的是變量的個數。空間複雜度計算規則基本跟時間複雜度相似,也使用大O漸進表示法。
例:

函數

long Fac(size_t N) 
{
 return N < 2 ? N : Fac(N-1)*N; 
 }
 分析發現遞歸調用了N次,開闢了N個棧幀,每一個棧幀使用了常數個空間。空間複雜度爲O(N)
相關文章
相關標籤/搜索