度量乙個演算法的效率,乙個方法是事後統計,即先將演算法實現,然後輸入適當的資料執行,測算其時間和空間開銷。其缺點顯而易見,不僅編寫程式實現演算法將花費較多的時間和精力,而且實驗結果依賴於計算機的軟硬間等環境因素,容易掩蓋演算法本身的優劣。所以通常採用事前分析估算的方法估算演算法所消耗的資源。
不談與計算機軟硬體有關的因素,影響演算法時間代價的最主要因素是問題規模。問題規模是指輸入量的多少,一般情況下可以從問題描述中得到。乙個顯而易見的事實:幾乎所有的演算法,對於規模更大的輸入需要執行更長的時間。正因如此,執行演算法所需要的時間t是問題規模n的函式,記作t(n)。
精確給出表示演算法的執行時間函式常常是很困難的,即使給出,也是相當複雜的函式,函式的求解本身也相當複雜。為優化求解方式,可以用演算法中基本基本語句的執行次數來度量演算法的工作量,進而客觀反映乙個演算法的執行時間。我們將只考察當問題規模充分大時,演算法中基本語句的執行次數在漸進意義下的階稱作演算法的漸進時間複雜度,簡稱時間複雜度,通常用o記號表示。
演算法時間複雜度的思維抽象:演算法的執行時間=每條語句的執行時間之和→每條語句的執行次數之和→基本語句的執行次數→基本語句執行次數的數量級→演算法的時間複雜度。
演算法在執行過程中所需的儲存空間包括:
(1)輸入/輸出資料占用的空間;
(2)演算法本身占用的空間;
(3)執行演算法需要的輔助空間。
其中,輸入/輸出資料占用的空間取決於問題,與演算法無關;演算法本身占用的空間雖然與演算法相關,但其大小一般是固定的。因此演算法的空間複雜度是指演算法在執行過程中需要的輔助空間數量,也就是除演算法本身和輸入輸出資料所占用的空間外,演算法臨時開闢的儲存空間。
若演算法所需的輔助空間相對於問題規模來說是乙個常數,稱此演算法為原地工作。
否則,這個輔助空間函式也應是問題規模的函式,通常記作:
s(n)=o(f(n))
其中,n為問題規模,分析方法與演算法的時間複雜度類似。
題解:
#include
#include
#include
using namespace std;
string str;
char change[6]
=;intmain()
} ans++;}
} cout
}
演算法效率的度量
常見時間複雜度 當演算法的時間複雜度為 即使n的值很小,實際的程式執行時間也是不可接受的!大o的n的3次方是工程開發時時間複雜度的臨界點。當演算法在最壞情況下仍能滿足需求時,可以推斷演算法的最好情況和平均情況都滿足需求。空間複雜度 推導時間複雜度的方法同樣適用於空間複雜度。空間與時間的策略 多數情況...
演算法效率的度量
演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,它考察當輸入值大小趨近無窮時的情況。t n o f n 總結幾點求時間複雜度的規則 ...
C 初學記錄(演算法效率與度量)
時間效能 演算法複雜性函式 f n n 2 1000n log n 1000 當n的資料規模逐漸增大時,f n 的增長趨勢 當n增大到一定值以後,計算公式中影響最大的就是n的冪次級最高的項,並且其他的常數項和低冪次項都可以忽略,我們更關注的是它是乙個什麼量級的演算法,是線性的還是n方的,還是指數級的...