演算法和時間複雜度概念

2021-09-23 01:53:24 字數 2859 閱讀 6785

時間複雜度計算

時間複雜度距離

空間複雜度分析

是指令的集合,是為解決特定問題而規定的一系列操作,演算法就是計算機解題的過程。

乙個演算法通常來說具有以下五個特性:

輸入:乙個演算法應以待解決的問題的資訊作為輸入。

輸出:輸入對應指令集處理後得到的資訊。

可行性:演算法是可行的,即演算法中的每一條指令都是可以實現的,均能再有限的時間內完成。

有窮性:演算法執行的指令個數是有限的,每個指令優勢再有限時間內完成的,因此整個演算法也是再有限時間內可以結束的。

確定性:演算法基於特定的合法輸入,其對應的輸出是唯一的,即當演算法從乙個特定的輸入開始,多次執行同一指令集結果總是相同的。

舉例:如何求1+2+3+…+100=?

演算法1:依次相加while do-while for

演算法2:高斯解法:首尾相加*50

演算法3:使用遞迴實現:sum(100)=sum(99)+100 sum(99)=sum(98)+99…sum(2)=sum(1)+2 sum(1)=1

評價演算法優劣的根據:複雜度(時間複雜度和空間複雜度)

演算法的複雜性體現再執行演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間資源,因此複雜度分為時間和空間複雜度。

時間複雜度是指執行演算法所需要的計算工作量;

空間複雜度是執行這個演算法所需要的記憶體空間。

乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試。

乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。

乙個演算法中的語句執行次數稱為語句頻度或時間頻度,表示為t(n),n表示問題的規模

但有時我們想知道它變化時成型什麼規律,想知道問題的規模,而不是具體的次數,此時一i納入時間複雜度,一般情況下,演算法中基本操作重複執行的次數時問題規模n的某個函式用t(n)表示。

時間複雜度就是時間頻度去掉低階項和首項常數。

比如某個演算法的時間頻度時t(n)=10000nn+10n+3

但是時間複雜度時t(n)=o(nn)

平均時間複雜度是指所有可能的輸入例項均以等概率出現的情況下,演算法的期望執行時間,鑑於平均複雜度

第一:難計算

第二:由很多演算法的平均情況和最差情況的複雜度時一樣的。

所以一般討論最壞時間複雜度

為了進一步說明演算法的時間複雜度我們定義o、ω、θ符號

o符號給出了演算法時間複雜度的上界(最壞情況 《=)

ω符號給出了時間複雜度的下屆(最好情況》=)

θ符號給出了演算法時間複雜度的精確階(最好和最壞時同一階 = )

找出演算法中的基本語句;

演算法中執行粗疏最多的那條語句就是基本語句,通常時內層迴圈的迴圈體

計算基本語句的執行次數的數量級;

只需計算基本語句執行次數的數量級,之久以為著要保證基本語句執行次數的函式中的最高次冪正確即可,

可以忽略所有低次冪和最好次冪的係數,這樣能夠簡化演算法分析,並且式注意力集中再最重要的一點上:增長率

用大o記號表示演算法的時間效能

將基本語句執行次數的數量級放入大o記號中

int count =

0;

t(n)= 1

t(n)= o(1)

int count =0;

。。。int count100 =

100;

t(n)= 1

t(n)= o(1)

int n=

8,count=0;

for(

int i=

1; i<

10n+

100;i++

)

t(n)= 10n+100

t(n)= o(n)

int n=

8,count=0;

for(

int i=

1; i

int n=

8,count=0;

for(

int i=

1;i<=n;i++

)}

int n=

8,count=0;

for(

int i=

1;i<=n;i*=2)

}

int n=

8,count=0;

for(

int i=

1;i<=n;i++

)}

1+2+3+4+。。。+n=(1+n)n/2 ==》t(n)= o(n2)

int

fun(

int n)}}

return

(s);

}

由於演算法中臨時變數的個數與問題規模n無關,所以空間複雜度均為s(n)=o(1)

void

fun(

int a,

int n,

int k)

}else

fun(a,n,k+1)

;}}

此演算法屬於遞迴演算法,每次呼叫本身都要分配空間,fun(a,n,0)的空間複雜度為o(n)

注意:

空間複雜度相比時間複雜度分析很少

對於遞迴演算法來說,**一般都比較簡短,演算法本身所占用的儲存空間較少,但執行時需要占用較多的臨時工作單元;若寫成非遞迴演算法,**一般可能比較長,演算法本身占用的儲存空間較多,但執行時將可能需要較少的儲存單元。

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

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

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

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

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

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