一、演算法效率。
二、時間效率。
(一)定義:
(1)時間效率也被稱為時間複雜度,它反映的是乙個演算法所執行時間的快慢,時間複雜度大,則效率低,反之,效率就高。
(2)在電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行間。一 個演算法執行所耗費的時間,從理論上說,是不能算出來的,只有你把你的程式放在機器上跑起來,才能知道。所以才會有時間複雜度的分析方式。乙個演算法所花費的時間與其中語句的執行次數成正比例,因此,演算法中的基本操作的執行次數,為演算法的時間複雜度。
(二)表示法:
大o漸進法表示演算法複雜度:
大o符號(big o notation):是用於描述函式漸進行為的數學符號。
#include
using
namespace std;
//9*9乘法口訣表
void
print()
printf
("\n");
}}intmain()
那它的空間複雜度又會是如何呢?
推導大o階方法:
通過上面我們會發現大o的漸進表示法去掉了那些對結果影響不大的項,簡潔明瞭的表示出了執行次數。
另外有些演算法的時間複雜度存在最好、平均和最壞情況:
最壞情況:任意輸入規模的最大執行次數(上界)
平均情況:任意輸入規模的期望執行次數
最好情況:任意輸入規模的最小執行次數(下界)
例如:
在乙個長度為n陣列中搜尋乙個資料x 。
最好情況:1次找到。(x在第乙個位置)
最壞情況:n次找到。(x在最後乙個位置)
平均情況:n/2次找到。
例題1:
void
bubblesort
(int
* a,
int n)}if
(exchange ==0)
break;}
}
基本操作執行最好n次,最壞執行了(n*(n+1)/2次,通過推導大o階方法+時間複雜度一般看最 壞,時間複雜度為 o(n^2) 。
三、空間效率。
空間效率指的就是空間複雜度:
空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的量度 。空間複雜度不是程式占用了多少 bytes的空間,因為這個也沒太大意義,所以空間複雜度算的是變數的個數。空間複雜度計算規則基本跟實踐 複雜度類似,也使用大o漸進表示法。
例如:
long
long
factorial
(size_t n)
遞迴呼叫了n次,開闢了n個棧幀,每個棧幀使用了常數個空間。空間複雜度為o(n) 。 資料結構 演算法效率
資料結構之前,先來了解兩個概念 時間複雜度 由來 這裡的時間複雜度不是程式執行的時間。評價乙個演算法的好壞,並不能通過程式執行的快慢來評估。因為程式的執行快慢還有很多因素,和計算機硬體有關,所以如果在不同的電腦上 執行的時間可能不一樣 那麼這裡的時間複雜度指啥,指的是演算法中基本操作的執行次數。比如...
演算法與資料結構的介紹
資料結構和演算法 資料結構和演算法地位 資料結構和演算法是計算結科學領域非常核心的一門課程。程式 資料結構 演算法 學習時長 查詢資料結構 非線性結構 二叉樹森林 mysql的索引 b 樹 不是二叉樹 圖總結 這兩天的內容,你學完之後,做出有用的東西。主要學習的是思考的問題的方式,方法。就像練功的人...
資料結構 關於KMP演算法的效率分析
通常的kmp演算法可以描述如下,不知道的可以查相關資料。從s的pos位置開始尋找字串t int index kmp string s,string t,int pos else j next j i不變 不回溯 j跳動 if j t.length return i t.length 匹配成功 els...