時間複雜度是演算法的特性,而不是問題的特性。因為乙個問題可以用兩種以上的演算法進行解答,且各自的時間複雜度也不相同。計算機理論科學的計算複雜度理論就是屬於這一類的學科。
計算複雜度理論研究的是問題的特性計算複雜度理論是學習各類問題特性的一門學科,先來比較如下兩個問題:
能否直接判斷兩個問題孰難孰易?此處的「難」並不是指解題的難度(對人而言,而是對計算機而言)。計算複雜性理論中,問題的難度指的是當前問題是存在快速解題演算法。
通常認為,有快速解題演算法的問題計算起來比較容易,反之,計算起來比較難。
快速演算法的標準是什麼呢?一般把多項式時間演算法或比它更快的演算法稱為「快速演算法」。(快速其實是定量的,不只是簡單地你說它比其他的快,它就快,最後都要落實到計算機的執行)。
計算複雜度理論中存在著多項式時間演算法的問題合稱為「p 問題」(polynomial)。
例如,排序問題有無數個多項式演算法,因此排序問題是 p 問題。像p 問題這種把具有相同特性的問題聚集到一起的集合就是「計算複雜度類(complexity class)」
計算複雜度類:
所有 p 問題都包含於 np 問題的集合
證明乙個問題能在多項式時間內完成比較容易,但不能解是十分困難的。就像經常談論的 ufo,要證明它的存在,只需獲取一架 ufo 即可,但要證明它的不存在,最笨的方法自然是遍歷整個宇宙空間。
比如子集和(subset sum)的問題,目前尚未發現解出子集和的多項式時間演算法,但也不能證明這種演算法就不存在。
計算複雜度理論使用規約(reduction)方法比較兩個問題的難度。約簡是把乙個問題轉換成另乙個問題進行解答的方法。假如有乙個約簡演算法能把 b 的輸入值適當地變換成 a 的輸入值,那麼利用解 a 題的最快演算法和約簡演算法就能編寫解 b 更難的問題。
複雜度計算
在1 n 中,能被 2整除的有 n 2個,能被 3整除的有 n 3個,則該演算法的複雜度可這樣計算 o n n 2 1 n 3 2 n 5 3 n 7 4 即o n n n 考慮到6這個數,它既是2的倍數,也是3倍數,因此還要用到容斥原理。設能被第 i個素數整除的正整數的集合為ai。對於特定的乙個整...
計算複雜度
求極限 n 無窮大 表示式n 無窮大 表示式1 n 0 2n2 2n3 n n 3 2 n 2 1 n 2 n 無窮大的時候 2 n 0 1 n 2 0 2 常數 此演算法的時間複雜度是n 3 時間複雜度的概念 執行的次數和同數量級 n最高次方數 取商是常數 那麼同數量級就是這個演算法的時間複雜度 ...
計算時間複雜度與空間複雜度
如何衡量乙個演算法的好壞?複雜度 空間複雜度 時間複雜度 事後統計法 就是在演算法的程式執行結束後,根據實際執行結果衡量演算法好壞 事前估計法 就是在程式執行之前,先按照程式 來預估演算法的好壞 時間複雜度 用基本指令的執行次數而不是執行時間代表時間複雜度,同乙個程式在不同配置的機器下的執行時間不一...