計算複雜度 P NP NP 完備

2021-07-15 07:16:17 字數 998 閱讀 6173

時間複雜度是演算法的特性,而不是問題的特性。因為乙個問題可以用兩種以上的演算法進行解答,且各自的時間複雜度也不相同。計算機理論科學的計算複雜度理論就是屬於這一類的學科。

計算複雜度理論研究的是問題的特性

計算複雜度理論是學習各類問題特性的一門學科,先來比較如下兩個問題:

能否直接判斷兩個問題孰難孰易?此處的「難」並不是指解題的難度(對人而言,而是對計算機而言)。計算複雜性理論中,問題的難度指的是當前問題是存在快速解題演算法

通常認為,有快速解題演算法的問題計算起來比較容易,反之,計算起來比較難。

快速演算法的標準是什麼呢?一般把多項式時間演算法或比它更快的演算法稱為「快速演算法」。(快速其實是定量的,不只是簡單地你說它比其他的快,它就快,最後都要落實到計算機的執行)。

計算複雜度理論中存在著多項式時間演算法的問題合稱為「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最高次方數 取商是常數 那麼同數量級就是這個演算法的時間複雜度 ...

計算時間複雜度與空間複雜度

如何衡量乙個演算法的好壞?複雜度 空間複雜度 時間複雜度 事後統計法 就是在演算法的程式執行結束後,根據實際執行結果衡量演算法好壞 事前估計法 就是在程式執行之前,先按照程式 來預估演算法的好壞 時間複雜度 用基本指令的執行次數而不是執行時間代表時間複雜度,同乙個程式在不同配置的機器下的執行時間不一...