什么是資料結構?
資料結構(Data Structure)是計算機存盤、組織資料的方式,指相互之間存在一種或多種指定關系的資料元素的集合;
什么是演算法?
演算法(Algorithm)就是定義良好的計算程序,取一個或一組值作為輸入,并產生一個或一組值作為輸出;簡單地說,演算法就是系列的計算步驟,用來將輸入的資料轉化為輸出;
演算法效率
演算法效率分析分為兩種:時間效率(時間復雜度)、空間效率(空間復雜度);時間復雜度衡量演算法的運行速度,空間復雜度衡量演算法所占的額外空間;
計算機發展早期,存盤容量很小,所以對空間復雜度很在乎,但經過發展,計算機的存盤容量已經達到了很高的程度,所以**我們如今不再特別關注空間復雜度;**
時間復雜度(time complexity):
一個演算法所花費的時間與其中的陳述句的執行次數成正比,即:演算法中基本執行陳述句的執行次數稱為演算法的時間復雜度;
實際中我們計算時間復雜度時,并不需要計算精確的執行次數,只需要大概的執行次數,所以這里我們參考大O記號的漸進表示法;
由這一定義,可匯出大O記號的以下性質:
(1)對于任一常數c > 0,有O(f(n)) = O(c?f(n))
(2)對于任意常數a > b > 0,有O(na + nb ) = O(na )
性質(1)意味著,在大O記號的意義下,函式各項正的常系數可以忽略并等同于1;
性質(2)則意味著,多項式中的低次項均可忽略,只需保留最高次項;
當一個演算法的基本執行陳述句的執行次數是某一給定常數時,那么它的時間復雜度為O(1);
例如:
int count = 0;
for (int i = 0; i < 2N ; ++ i)
{
for (int j = 0; j < N ; ++ j)
{
++count;
}
}
for (int k = 0; k < N ; ++ k)
{
++count;
}
int M = 10;
while (M--)
{
++count;
}
這段代碼的執行次數為:2N2+N+10,那么換算成大O表示的時間復雜度,則為:O(N2)
可以看出,大O記號的這些性質體現了對函式總體漸進增長趨勢的關注和刻畫,
空間復雜度(space complexity):
空間復雜度是對一個演算法在運行程序中臨時占用存盤空間大小的量度 ,空間復雜度不是程式占用了多少 bytes的空間,因為這個也沒太大意義,所以空間復雜度算的是變數的個數,空間復雜度計算規則基本跟時間復雜度類似,也使用大O漸進表示法,
//作者定期分享C語言學習路上的經驗,歡迎關注哦
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264148.html
標籤:其他
上一篇:做個web全堆疊工程師很難嗎?最難的服務器架構也就這樣而已
下一篇:華為面試題:1000階臺階,如果每次只能走1步,2步或3步,且如果走三步1次,那么下次就只能走1步或2步(即:要休息一下),問:有多少種走法?(深入理解遞回演算法)
