c語言演算法的時間複雜度如何計算啊

2021-03-05 09:21:07 字數 3216 閱讀 8892

1樓:熊貓

看看這個 每個迴圈都和上一層迴圈的引數有關。 所以要用地推公式: 設i(n)表示第一層迴圈的i為n時的迴圈次數,注意到他的下一層迴圈次數剛好就是n,分別是0,1,2...

n-1 所以,把每一層迴圈設乙個函式分別為:j(n),k(n),t(n) 則有 i(n)=j(0)+...+j(n-1) j(n)=k(0)+...

+k(n-1) k(n)=t(0)+...+t(n-1) i(0)=j(0)=k(0)=0 t(n)=1 而總迴圈數是i(0)+i(1)...+i(n-1) 可以根據遞推條件得出準確值 所以演算法複雜度是o(i(0)+i(1)...

+i(n-1))

記得採納啊

2樓:匿名使用者

求解演算法的時間複雜度的具體步驟是:

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

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

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

只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。

⑶用大ο記號表示演算法的時間效能。

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

如果演算法中包含巢狀的迴圈,則基本語句通常是最內層的迴圈體,如果演算法中包含並列的迴圈,則將並列迴圈的時間複雜度相加。例如:

for(i=1;i<=n;i++)  x++;  for(i=1;i<=n;i++)

for(j=1;j<=n;j++)  x++;  第乙個for迴圈的時間複雜度為ο(n),第二個for迴圈的時間複雜度為ο(n2),則整個演算法的時間複雜度為ο(n+n2)=ο(n2)。

常見的演算法時間複雜度由小到大依次為:

ο(1)<ο(log2n)<ο(n)<ο(nlog2n)<ο(n2)<ο(n3)<…<ο(2n)<ο(n!)ο(1)表示基本語句的執行次數是乙個常數,一般來說,只要演算法中不存在迴圈語句,其時間複雜度就是ο(1)。ο(log2n)、ο(n)、ο(nlog2n)、ο(n2)和ο(n3)稱為多項式時間,而ο(2n)和ο(n!

)稱為指數時間。計算機科學家普遍認為前者是有效演算法,把這類問題稱為p類問題,而把後者稱為np問題。

這只能基本的計算時間複雜度,具體的執行還會與硬體有關。

3樓:血刺廢車

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

乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。 (2)時間複雜度 在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。

但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。 一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。

記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。 在各種不同演算法中,若演算法中語句執行次數為乙個常數,則時間複雜度為o(1),另外,在時間頻度不相同時,時間複雜度有可能相同,如t(n)=n2+3n+4與t(n)=4n2+2n+1它們的頻度不同,但時間複雜度相同,都為o(n2)。 按數量級遞增排列,常見的時間複雜度有:

常數階o(1),對數階o(log(2)n),線性階o(n), 線性對數階o(nlog(2)n),平方階o(n^2),立方階o(n^3),..., k次方階o(n^k),指數階o(2^n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

4樓:問豐建思蓮

在計算之前取得系統的滴答數

inttbegin

=gettickcount();

計算完成過後再次呼叫減去滴答數就行了,單位msinttend

=gettickcount()

-tbegin;

還有其他更精確的函式,搞忘了,你最好查下msdn純c下不要用c自帶的計算滴答數的函式,不精確,應該使用系統的

什麼是c語言中的時間複雜度?如何計算?

5樓:林柯伊南

時間復抄雜度不是相對於襲

程式而言的,而是指問題的複雜

例如排序,對分查詢在最劣情況下也是平方問題,但對於絕大多數問題而言,我們只關心平均效率。

例如稀疏陣列,可以降低對空間的要求,但當有用資料超過一定規模,執行速度將急劇下降。

次數超過4的多項式沒有平凡解,所以被成為大o的n次方問題,這樣的問題總是需要那麼多時間才能完成計算,這就是時間的複雜度。

任何資料的壓縮都有極限,越是隨機的資料,越不能找到良好的資料結構,這就是空間的複雜性。

實際上如果沒有好的演算法和資料結構,大多數程式是無法真正做到應用的。

6樓:

時間複雜度是就演算法而言的,與語言無關,時間複雜度不需要計算,是通過理論分析出來的,有很多方法來分析時間複雜度。

程式中的時間複雜度是怎麼計算的?

7樓:匿名使用者

演算法複雜度的介紹,見百科:

c語言,資料結構中 演算法的時間複雜度

8樓:匿名使用者

看看迴圈體的個數,一般來說迴圈體越多 時間複雜度越高例如for(i:0->n)

for(j: 0 -> m)

這段**的操作執行次數是n*m

如果n和m之間有函式關係,如 n = 2m。基本操作次數就是2m^2,時間複雜度中只取最高次冪項且忽略係數,所以時間複雜度為:o(m^2) 當然也可以西城o(n^2)。

9樓:佟倫崇雲

把那些基本的時間複雜度記住,然後遇到

迴圈就相乘,遇到順序結構就相加,而一般高階的複雜度可以吞併低階的。

比如說,二分法的複雜度是和log(n)同階,如果再出現在對n個數的遍歷的迴圈中,複雜度就是和n*log(n)同階。

如果先二分查詢,再順序查詢,就是n+log(n)。

演算法的時間複雜度是指空間複雜度是指

時間複雜度指的是隨著資料規模的增大時間的增率,比如資料量為n,花的時間為n 2,複雜度就是n 2,同理空間複雜度指的是記憶體的開銷。最次的情況就是階乘級別的複雜度,這種演算法是不能用的。演算法的空間複雜度指的是什麼?空間複雜度 space plexity 是對乙個演算法在執行過程中臨時占用儲存空間大...

同程式,因為計算不同問題,演算法時間複雜度可以不同嗎

可以比如快數排序。當資料基本有序時時間複雜度為o n 2 最好時為o log2n 2是下標,這個打不出來 同乙個演算法,可以編寫不同的程式,程式的執行時間不同,因此乙個演算法可以有多種不同的時間複雜性 因果關係不成立啊。時間複雜性和執行時間沒有直接的關係。比如同樣是o n 時間複雜度,乙個程式n 1...

計算以下程式的執行次數和時間複雜度,主要說一下詳細過程,我是

執行次數 9次 時間複雜度 o 1 因為這個程式迴圈次數只是有限次,其他賦值以及輸出操作時間複雜度只按1算,加起來還是等於乙個常數,故時間複雜度為o 1 如果將s 10改為 s c語言資料結構時間複雜度 1 因為抄f n 和g n 在n趨於 無窮大時襲為n 3階,h n 為n 1.5因此 1 f n...