時間複雜度和空間複雜度

2021-09-27 09:47:20 字數 1665 閱讀 4229

在面試的時候,經常會詢問到演算法的題目,尤其是後端的面試,去一些網際網路的大廠。那麼解析乙個題目的演算法又很多種,面試官如何判斷你這個演算法是不是最優的演算法。沒錯,判斷乙個演算法的優秀程度,就是使用時間複雜度。

個人總結出三個計算時間複雜度的規律

1、找到執行次數最多的語句

2、語句執行語句的數量級

3、用o表示結果

計算時間複雜度的3個出發點,掌握這三個出發點,那麼一向搞不懂的時間複雜度就可以迎刃而解啦。

o(1 )< o(logn) < o(n) < o(n*logn) < o(n^2) < o(n^3) < o(2^n) < o(n!) < o(n^n)

/**

* o(1)

*/private static void complexforo1()

/*** o(n)

*/private static void complexforon(int n)

}

此時時間複雜度為 o(n × 1),即 o(n)。

/**

* o(n^2) demo1

*/private static void complexforonsquare1(int n)

}}

此時時間複雜度為 o(n × n × 1),即 o(n^2)。

/**

* o(n^2) demo2

*/private static void complexforonsquare2(int n)

}for (int i = 1; i < n; i++)

}

此時時間複雜度為 max(o(n^2), o(n)),即 o(n^2)。

/**

* o(n^2) demo3

*/private static void complexforonsquare3(int n)

}} else

}}

此時時間複雜度為 max(o(n^2), o(n)),即 o(n^2)。

/**

* o(log(n))

** 假設迴圈次數為 t,則迴圈條件滿足 2^t < n。

* 可以得出,執行次數t = log(2)(n),即 t(n) = log(2)(n),可見時間複雜度為 o(log(2)(n)),即 o(log n)

*/private static void complexforonlog(int n)

}

/**

* o(2^n)

* 顯然執行次數,t(0) = t(1) = 1,同時 t(n) = t(n - 1) + t(n - 2) + 1,這裡的 1 是其中的加法算一次執行。

* 顯然 t(n) = t(n - 1) + t(n - 2) 是乙個斐波那契數列,通過歸納證明法可以證明,當 n >= 1 時 t(n) < (5/3)^n,同時當 n > 4 時 t(n) >= (3/2)^n。

* 所以該方法的時間複雜度可以表示為 o((5/3)^n),簡化後為 o(2^n)

*/private static int complexforo2squaren(int n) else

}

剩餘的,後續待補充...

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

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

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

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

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

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