計算複雜度是怎麼計算的啊,我經常見到O 這個函式,但是不知

2021-05-23 11:39:59 字數 5722 閱讀 4424

1樓:匿名使用者

常用時間複雜度和空間複雜度。

時間複雜度,指的是在迴圈等演算法中,最基本的一條語句的執行次數。

如for(int i =1;i<=n;i++)m++;//假設m是一個可以自增1的變數

上述基本語句就是m++,可以看到for迴圈將進入n次,每次都執行一下m++,所以說這個小演算法的時間複雜度就是o(n)。

空間複雜度,指的是演算法在真個執行過程中需要使用的儲存單元數。

如for(int i = 1;i<=n;i++)上述for迴圈進入n次,但每次都要開闢一個記憶體單元給temp使用,雖然n次迴圈開闢了n次這樣的儲存單元,但每一次使用後都會釋放掉,也就是說這個演算法只需要系統為它提供一個記憶體單元就夠了。

所以空間複雜度為o(1)。

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

2樓:匿名使用者

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

冪函式是如何計算的,其計算複雜度如何統計

3樓:簡愛的獨白

這個建議你來看一下數值分析。源我可以簡單說一bai下理論。如果還有想知道du的,可

時間複雜度log是怎麼計算出的,

4樓:匿名使用者

i每迴圈一次就乘了2,知道當i>=n時迴圈結束,迴圈m次有2^m>=n,得到m=log2n。

5樓:匿名使用者

時間複雜度

同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。一個演算法的評價主要從時間複雜度和空間複雜度來考慮。

1、時間複雜度

(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(log2n),線性階o(n),

線性對數階o(nlog2n),平方階o(n2),立方階o(n3),...,

k次方階o(nk),指數階o(2n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

2、空間複雜度

與時間複雜度類似,空間複雜度是指演算法在計算機內執行時所需儲存空間的度量。記作:

s(n)=o(f(n))

我們一般所討論的是除正常佔用記憶體開銷外的輔助儲存單元規模。

c++,這個時間複雜度怎麼計算啊!?

6樓:mr明鏡

每次執行迴圈後,i=i/2.

所以一共執行 log2(n) 次。時間複雜度就是執行基本操作的次數啊。樓上回答的也是很正確的。

7樓:匿名使用者

i每次迴圈減少一半,所以是o(lgn)

8樓:匿名使用者

log2(n)

每次除以2

演算法的時間複雜度怎麼計算啊?什麼叫基本操作的原操作啊?

9樓:匿名使用者

演算法的時間復抄雜度就是 程式中所襲有語句的頻度(該語句重複執行的次數)之和構成

即是由巢狀最深層次的語句頻度決定的

例如:for(int i=0;i複雜度o(n)=n*m*l;

什麼是函式怎麼用函式計算 5

10樓:雪落為花

函式就是在某變化過程中有兩個變數x和y,變數y隨著變數x一起變化,而且依賴於x。如果變數x取某個特定的值,y依確定的關係取相應的值,那麼稱y是x的函式。

11樓:了

數學學bai

科的一個基本概念。

函式(dufunction)表示每個輸入值zhi對應唯一輸出值的dao一種對迴應答關係。函式f中對應輸入值的輸出值x的標準符號為f(x)。包含某個函式所有的輸入值的集合被稱作這個函式的定義域,包含所有的輸出值的集合被稱作值域。

若先定義對映的概念,可以簡單定義函式為,定義在非空數集之間的對映稱為函式。

12樓:綠葉子之

在不同階段函式有不同定義:

初中高中不同。

函式計算器呢。是可以輸入函式,畫函式圖象等功能的計算器。

13樓:匿名使用者

你說的太籠統了 ,函式其實通俗

的講就是一種代數關係

式,但是我們通常回將這種關係式用答f(x)表示,其實這是一種替換的方式,就像我們算方程求解的時候總是將x作為方程的解,通過解關於x的方程來解決數學問題,達到求得數值的目的。其實函式關係式的計算要把握幾點:一個是函式的定義域,所謂定義域就是你要計算一個數的取值範圍。

如果你學過集合的話就好理解這個概念,就是我們要通過a來求b ,a不是一個固定的數值的時候,那麼它就是一個集合,這個集合裡的所有數都是作為來求得結果b的一個變數。就像函式的定義裡講的,自變數a,通過一個代數式,去求因變數b的數值。這就和我們之前學的一對一的方式求未知數不一樣,(例如:

x+1=3)這裡就只有一個解。而函式的值域卻是一個範圍,這個範圍可以有一個解,無解或是無窮多解。

14樓:謝菀蓴

你說的是電腦軟體裡的還是數學裡面的呀

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

15樓:熊貓

看看這個 每個迴圈都和上一層迴圈的引數有關。 所以要用地推公式: 設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))

記得采納啊

16樓:匿名使用者

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

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

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

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

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

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

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

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

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問題。

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

17樓:血刺廢車

(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的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

18樓:問豐建思蓮

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

inttbegin

=gettickcount();

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

=gettickcount()

-tbegin;

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

資料結構中的時間複雜度怎麼算啊?看不懂啊,有沒有具體的公式

19樓:散live悠名

看迴圈的次數,比如for(k=1;k<=n;k*=2)這種巢狀迴圈;首先第一個 k=1時候如果

小於版每次都是乘以2然後與n進行比較

權,那反過來只要進行log(2)n次,因為求的就是2的多少次方等於或者大於n,第二個的話就是1一直到n然後就是n。然後這個又是巢狀迴圈所以相乘就好了,這個時間複雜度度就是o(nlog(2)n)。這種主要是理解每一層迴圈的次數,然後巢狀就相乘,不是巢狀就取最大的那個迴圈。

時間複雜度log是怎麼計算出的,請問演算法的時間複雜度是怎麼計算出來的

i每迴圈一次就乘了2,知道當i n時迴圈結束,迴圈m次有2 m n,得到m log2n。時間複雜度 同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。一個演算法的評價主要從時間複雜度和空間複雜度來考慮。1 時間複雜度 1 ...

期貨風險度計算,期貨中 風險度是怎麼計算的?

風險度 持倉保證金 客戶權益 風險度 所持頭寸佔用的保證金總額 客戶權益 100 客戶權益 上日資金餘額 當日資金存取 當日平倉盈虧 實物交割款項 當日手續費 當日浮動盈虧 看你的訊息和技術面咯,訊息越多,分析越多,得到的也更準確些,當然在做 的話,要有一定的心裡素質。有些時候計劃,演算法比不上變化...

以下排序演算法最壞情況下時間複雜度最低的是A 氣泡排序B

在氣泡排序,插入排序,選擇排序,快速排序中,在最最壞情況下,快速排序的時間複雜為o n2 插入排序o n2 選擇排序o n2 氣泡排序o n2 所以abcd時間複雜度是一樣的。在快速排序演算法中,最為關鍵的就是選取一個基值,將陣列分為大於基值以及小於基值兩部分,並返回基值所以在位置以利用於遞迴劃分。...