時間複雜度和空間複雜度

2021-09-25 06:31:06 字數 960 閱讀 8647

時間複雜度和空間複雜度一般是針對演算法而言,是衡量乙個演算法是否高效的重要標準。先糾正乙個誤區,時間複雜度並不是演算法執行的時間,再糾正乙個誤區,演算法不單單指氣泡排序之類的,乙個迴圈甚至是乙個判斷都可以稱之為演算法。其實理解起來並不衝突,八大排序甚至更多的演算法本質上也是通過各種迴圈判斷來實現的。

時間複雜度指演算法語句的執行次數。乙個演算法語句的執行次數最終都是可以通過函式f(n)來表示的,例如:

int x = 1;

while(x < 10)

這裡的x++就是演算法語句,其f(n)=10-x

for(int i = 0;i < n;i++)

}這裡的system.out.println就是演算法語句,其f(n)如下圖

int i = 0;

while(i < n)

i++即演算法語句,被執行次數為f(n)=n-i

理解了如何將演算法語句執行次數通過函式表示出來,時間複雜度一眼就看出來了,有以下幾條規則

1.選取f(n)係數最大的項,如果係數都是負數,就選常數,那麼時間複雜度是常數階o(1)

2.根據第一條拿到係數最大項後,將係數化為1,剩下的就是時間複雜度

3.乙個演算法可能有多條演算法語句,即可能有多個迴圈判斷,時間複雜度的計算考慮最壞情況,即取最大的。

根據以上3個規則,前面三個例子的時間複雜度分別為

空間複雜度就是乙個演算法在執行過程中臨時占用的儲存空間大小,換句話說就是被建立次數最多的變數,它被建立了多少次,那麼這個演算法的空間複雜度就是多少。舉個例子:

for(int i=0;i和int temp=0;

for(int i=0;i前者空間複雜度就是o(n),而後者空間複雜度就是o(1)常數階。很好理解,前者每迴圈一次都會重新建立乙個temp物件,而後者只在迴圈外面建立了乙個temp物件,每次迴圈只是給他不同的引用而已。所以有個規律,如果演算法語句中就有建立物件,那麼這個演算法的時間複雜度和空間複雜度一般一致,很好理解,演算法語句被執行了多少次就建立了多少物件。

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...

演算法複雜度 時間複雜度和空間複雜度

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...

演算法複雜度 時間複雜度和空間複雜度

演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...