1樓:匿名使用者
外層抄迴圈執
行bain次 i=1,2,3....n-1,內層迴圈執du行n-i次zhi,n-i=n-1,n-2,n-3.....,1
內層迴圈的daox++執行
1+2+3+....+(n-3)+(n-2)+(n-1)=n*(n-1)/2 次
2樓:抄仙以向露
看看迴圈體的個來數,一般來說迴圈體自越多
時間bai複雜度越高
例如for(i:0->n)
for(j:
0->m)這段**du的操作執行次數是zhin*m如果n和m之間有函式dao關係,如n=
2m。基本操作次數就是2m^2,時間複雜度中只取最高次冪項且忽略係數,所以時間複雜度為:o(m^2)
當然也可以西城o(n^2)。
c語言演算法的時間複雜度如何計算啊?
3樓:熊貓
看看這個 每個迴圈都和上一層迴圈的引數有關。 所以要用地推公式: 設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))
記得采納啊
4樓:匿名使用者
求解演算法的時間複雜度的具體步驟是:
⑴找出演算法中的基本語句;
演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。
⑵計算基本語句的執行次數的數量級;
只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。
⑶用大ο記號表示演算法的時間效能。
將基本語句執行次數的數量級放入大ο記號中。
如果演算法中包含巢狀的迴圈,則基本語句通常是最內層的迴圈體,如果演算法中包含並列的迴圈,則將並列迴圈的時間複雜度相加。例如:
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問題。
這隻能基本的計算時間複雜度,具體的執行還會與硬體有關。
5樓:血刺廢車
(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的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。
6樓:問豐建思蓮
在計算之前取得系統的滴答數
inttbegin
=gettickcount();
計算完成過後再次呼叫減去滴答數就行了,單位msinttend
=gettickcount()
-tbegin;
還有其他更精確的函式,搞忘了,你最好查下msdn純c下不要用c自帶的計算滴答數的函式,不精確,應該使用系統的
c語言,時間複雜度與空間複雜度,演算法時間公式t(n)=o(f(n)),與空間公式s(n)=o(f(n))
7樓:匿名使用者
演算法的時間複雜度:
為了便於比較同一問題的不同演算法,通常從演算法中抽取一種或者多種有代表性的基本操作,再以這些基本操作重複執行的次數與問題規模的關係t(n) 作為演算法的時間性量度。
如果t(n) 和 f(n) 是n 的函式,當n →∞ 時,有t(n) / f(n) → c (常數c ≠ 0),記作:t(n) = o(f(n)),稱o(f(n)) 為演算法的漸近時間複雜度,簡稱時間複雜度。
演算法的空間複雜度:
一個演算法實現所佔儲存空間大致包含三方面:
1. 指令、常數、變數所佔用的儲存空間;
2. 輸入資料所佔用的儲存空間;
3. 演算法執行時所需的輔助空間;
前兩者是必須的,通常將演算法執行時所需的輔助空間作為分析演算法空間複雜度的依據:s(n) = o(f(n)),其中f(n)的規則與時間複雜度一致。
關於c語言程式設計的時間複雜度
8樓:臨江仙
printf("%d%c",a,c)算是一條語句。
strcmp(svyd,svyy)這個是一條基本計算時間複雜度通常不這麼看。
如果是一個for迴圈,比版如權
for(i = 0; i 算是o(n),是個線性的。
如果for裡面又一個for,那麼是o(n^2)。
建議看一下資料結構演算法相關的知識。
9樓:匿名使用者
這是一個函式,copy並不是什麼基本運算bai,這些庫du函式你可以看看他們的定義,裡邊還zhi可能有其它的函式。dao你說的基本運算應該是指一條cpu的指令,比如一次加法之類的,這個你學了彙編可能會更瞭解,而其實就算是一條彙編指令他們用的時間也可能不同的,比如乘法比加法慢,這些你學了微機原理應該就知道了。而對於程式設計師來說,時間複雜度是演算法裡的概念,你學了演算法設計就知道了。
c語言,程式設計 演算法 最壞情況下的時間複雜度可以與平均情況的時間複雜度相 10
10樓:物理公司的
最差情況下的復
雜度是所有可能的輸入資料所消耗的最大資源,如果最差情況下的複雜度符合我們的要求,我們就可以保證所有的情況下都不會有問題。
某些演算法經常遇到最差情況。比如一個查詢演算法,經常需要查詢一個不存在的值。
也許你覺得平均情況下的複雜度更吸引你,可是平均情況也有幾點問題。第一,難計算,多數演算法的最差情況下的複雜度要比平均情況下的容易計算的多,第二,有很多演算法的平均情況和最差情況的複雜度是一樣的. 第三,什麼才是真正的平均情況?
如果你假設所有可能的輸入資料出現的概率是一樣的話,也是不合理的。其實多數情況是不一樣的。而且輸入資料的分佈函式很可能是你沒法知道。
考慮最好情況的複雜度更是沒有意義。幾乎所有的演算法你都可以稍微修改一下,以獲得很好的最好情況下的複雜度(要看輸入資料的結構,可以是o(1))。怎樣修改呢?
預先計算好某一輸入的答案,在演算法的開始部分判斷輸入,如果符合,給出答案。
11樓:勞雙韶旭
假設陣列長度為n,對於氣泡排序的最壞情況是逆向有序,複雜度為n-1+n-
2+n-
3+...+2+
1=(n-1)(n-1+1)/2=
n(n-1)/2
演算法的複雜度主要包括演算法的時間複雜度和空間複雜度,演算法的時間複雜度是指
時間複雜度考慮的是演算法的執行時間,因此是d 演算法的空間複雜度指的是什麼?1 簡單來說bai 演算法的空間du 複雜度指的是佔zhi用記憶體 dao,cpu等計算機資源回的程度。答 2 具體點來解釋就是 空間複雜度 space complexity 是對一個演算法在執行過程中臨時佔用儲存空間大小的...
演算法的時間複雜度和空間複雜度怎麼看
時間複雜度,就是計算程式執行的時間,空間複雜度,就是所佔的記憶體空間。同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。電腦科學中,演算法的時間複雜度是一個函式,它定量描述了該演算法的執行時間。這是一個關於代表演算法輸入值...
如何計算時間複雜度演算法時間複雜度o1和o2的區別???
定義 如果一個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,注意它是某一個演算法的時間複雜性。大o表示只是說有上界,由定義如...