多項式時間演算法

2021-10-23 01:18:02 字數 1376 閱讀 7224

時間複雜度並不是表示乙個程式解決問題需要花多少時間,而是當問題規模擴大後,程式需要的時間隨規模增長得有多快。

也就是說,對於高速處理資料的計算機來說,處理某乙個特定資料的效率不能衡量乙個程式的好壞。當這個資料的規模變大到數百倍後,程式執行時間是否相差不大,或者也跟著慢了數百倍,或者變慢了數萬倍。

1、不管資料有多大,程式處理花的時間始終是那麼多的,我們就說這個程式很好,具有o(1

11)的時間複雜度,也稱常數級複雜度;

2、資料規模變得有多大,花的時間也跟著變得有多長,這個程式的時間複雜度就是o(n

nn),比如找n個數中的最大值;

3、像氣泡排序、插入排序等,資料擴大2倍,時間變慢4倍的,屬於o(n

2n^2

n2)的複雜度。

4、窮舉類的演算法,所需時間長度成幾何階數**,這就是o(a

na^n

an)的指數級複雜度,甚至o((n!n!

n!))的階乘級複雜度。

不會存在o((2n2

2n^2

2n2))的複雜度,因為數字「2」是係數,不會影響到整個程式的時間增長。同樣地,o (n3+

n2

n^3+n^2

n3+n

2)的複雜度也就是o(n

3n^3

n3)的複雜度。因此,我們會說,乙個o(0.01n3

0.01n^3

0.01n3

)的程式的效率比o(100n2

100n^2

100n

2)的效率低,儘管在n很小的時候,前者優於後者,但後者時間隨資料規模增長得慢,最終o(n^3)的複雜度將遠遠超過o(n

2n^2

n2)。我們也說,o(n

100n^

n100

)的複雜度小於o(1.01n

1.01^n

1.01

n)的複雜度。

總結:容易看出,前面的幾類複雜度被分為兩種級別,其中後者的複雜度無論如何都遠遠大於前者:一種是o(1

11),o(log

(n

)log(n)

log(n)

),o(n

an^a

na)等,我們把它叫做多項式級的複雜度,因為它的規模n出現在底數的位置;另一種是o(a

na^n

an)和o(n!n!

n!)型複雜度,它是非多項式級的,其複雜度計算機往往不能承受。當我們在解決乙個問題時,我們選擇的演算法通常都需要是多項式級的複雜度,非多項式級的複雜度需要的時間太多,往往會超時,除非是資料規模非常小。

多項式時間演算法

定義 若存在乙個常數c,使得對於所有n 0,都有 f n c g n 則稱函式f n 是o g n 時間複雜度是o p n 的演算法稱為多項式時間演算法,這裡p n 是關於n的多項式。不能夠這樣限制時間複雜度的演算法被稱為指數時間演算法。例如 時間複雜度為o nlog n o n 3 的演算法都是多...

多項式演算法

一般地,一元n次多項式的求值需要經過 n 1 n 2次乘法和n次加法 double f1 int n,double a,double x 時間複雜度為o n 2n 2 n2 秦九韶演算法是中國南宋時期的數學家秦九韶提出的一種多項式簡化演算法。秦九韶演算法計算多項式時只需要n次乘法和n次加法。即每次將...

多項式時間 Polynomial time

什麼是時間複雜度?時間複雜度並不是表示乙個程式解決問題需要花多少時間,而是當程式所處理的問題規模擴大後,程式需要的時間長度對應增長得有多快。也就是說,對於某乙個程式,其處理某乙個特定資料的效率不能衡量該程式的好壞,而應該看當這個資料的規模變大到數百倍後,程式執行時間是否還是一樣,或者也跟著慢了數百倍...