【算法设计与分析】03 算法及其时间复杂度
在學習算法的時間復雜度之前,需要了解下面5條概念
- 什么是算法的時間復雜度? 針對指定基本運算,計數算法所做的運算次數。
- 什么是基本運算?比較、加法、乘法、置指針、交換…
- 什么是輸入規模?輸入串的編碼長度,通常是數組元素的多少、調度問題的任務個數、圖的頂點數與邊數等。
- 算法的基本運算次數可以表示為輸入規模的函數。
- 給定問題和基本運算,就決定了一個算法類
文章目錄
- 1 算法的兩種時間復雜度
- 1.1 例子:檢索問題
- (1)順序檢索算法
- (2)改進順序檢索算法
- 2 總結
1 算法的兩種時間復雜度
對于相同輸入規模的不同實例,算法的基本運算次數也不一樣,所以定義了兩種時間復雜度。
平均情況下的時間復雜度求解公式為:
A(n)=∑I∈SPItIA(n) = \sum_{I{\in}S} P_It_IA(n)=I∈S∑?PI?tI?
其中:S為規模為n的實例集,實例I∈SI\in SI∈S的概率為PI .算法對實例I執行的基本運算次數為:tI
在某些情況下,可以假定每個輸入實例的概率相等。
1.1 例子:檢索問題
- 輸入:非降序排列的數組L,元素個數n,需要檢索的數x。
- 輸出:j。如果x在數組L中,j是x首次出現的下標。否則j=0.
- 基本運算:x與L中的元素比較。
(1)順序檢索算法
j=1, 將x與L[j]比較. 如果 x=L[j],則算法停止,輸出 j;如果不等,則把 j 加1,繼續x與L[j]的比較,如果 j>n,則停機并輸出0。
實例:1 2 3 4 5
x=4,需要比較4次
x=2.5 ,需要比較5次
不同的輸入有:2n+1個,分別對應:
- 最壞情況下時間:W(n)=n;
- 最壞的輸入:x不在L中,或者x=L[n](還沒有接觸到數據結構中的數組,下表不是從0開始的,是從1開始的)。此時要做n次比較。
輸入實例的概率分布:假設x在L中的概率是P,且每個位置的概率相等。則由上文的公式得:
A(n)=∑i=1nipn+(1?p)n=p(n+1)2+(1?p)nA(n) = \sum_{i=1}^n i\frac{p}{n} + (1-p)n = \frac{p(n+1)}{2}+(1-p)nA(n)=i=1∑n?inp?+(1?p)n=2p(n+1)?+(1?p)n
當p=1/2時,A(n)=n+14+n2≈3n4A(n)=\frac{n+1}{4}+\frac{n}{2} \approx \frac{3n}{4}A(n)=4n+1?+2n?≈43n?
注意:上述求解公式中,注意理解(1-p)n 代表如果元素不存在數組中,比較的次數是從頭到尾。即n次,不存在的概率是1-p。
(2)改進順序檢索算法
j=1, 將 x與L[j]比較. 如果 x=L[j],則算法停止,輸出 j;如果 x >L[j],則把 j 加1,繼續 x與 L[j]的比較;如果 x < L[j],則停機并輸出0. 如果 j >n,則停機并輸出 0。
之所以可以優化成這樣是因為該算法的輸入是:非降序排列的數組
實例:1 2 3 4 5
x = 4,需要比較 4 次
x = 2.5,需要比較 3 次
輸入實例的概率分布:假設x在數組L中的每個位置與空隙的概率都相等。設在數組中的概率是p,不在數組L中的概率是1-p。則pn=1?pn+1\frac{p}{n}=\frac{1-p}{n+1}np?=n+11?p?
則由公式,計算平均時間復雜度為:
A(n)=∑i=1nipn+1?pn+1n=∑i=1nipn+pnnA(n) = \sum_{i=1}^n i\frac{p}{n} + \frac{1-p}{n+1}n =\sum_{i=1}^n i\frac{p}{n} + \frac{p}{n}n A(n)=i=1∑n?inp?+n+11?p?n=i=1∑n?inp?+np?n
=p(1+n)2+p=\frac{p(1+n)}{2}+p=2p(1+n)?+p
當p=1/2時:
A(n)=n4+34≈n4A(n)=\frac{n}{4}+\frac{3}{4} \approx \frac{n}{4}A(n)=4n?+43?≈4n?
很明顯,改進后的檢索算法,時間復雜度減小了很多。算法的性能有所提升。
2 總結
- 本文的學習并不是來學習檢索這個算法也不是來提升它的性能。
- 而是根據檢索算法這個例子,來學習時間復雜度的定義,學會計算時間復雜度。
總結
以上是生活随笔為你收集整理的【算法设计与分析】03 算法及其时间复杂度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: navicat 结构同步会加锁吗_被柜员
- 下一篇: 可以导出记录EXCEL表格的记账理财账本