演算法時間複雜度o1和o2的區別演算法時間複雜度的表示法OnOnO1Onlogn等是什麼意思?

2021-03-06 16:31:27 字數 5941 閱讀 6100

1樓:a羅網天下

o後面的括號中有一個函式,指明某個演算法的耗時/耗空間與資料增長量之間的關係。其中的n代表輸入資料的量。

時間複雜度為o(n),就代表資料量增大幾倍,耗時也增大幾倍。比如常見的遍歷演算法。所以o(2)相比於o(1)資料量會更多,同時需要執行的時間會更多。

一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),存在一個正常數c使得fn*c>=t(n)恆成立。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

時間複雜度o(n^2),就代表資料量增大n倍時,耗時增大n的平方倍,這是比線性更高的時間複雜度。比如氣泡排序,就是典型的o(n^2)的演算法,對n個數排序,需要掃描n×n次。

比如o(logn),當資料增大n倍時,耗時增大logn倍(這裡的log是以2為底的,比如,當資料增大256倍時,耗時只增大8倍,是比線性還要低的時間複雜度)。二分查詢就是o(logn)的演算法,每找一次排除一半的可能,256個資料中查詢只要找8次就可以找到目標。

o(nlogn)同理,就是n乘以logn,當資料增大256倍時,耗時增大256*8=2048倍。這個複雜度高於線性低於平方。歸併排序就是o(nlogn)的時間複雜度。

2樓:天寂無痕

根據大o定義易知,o(1) = o(2)。用o(1)和o(2)表示同一個函式時,差別僅在於常數因子c而已。

兩個都是時間複雜度為常量。複雜度是用來表達演算法的複雜程度跟演算法輸入的規模n的關係。如果不管n是多大,演算法的複雜程度都固定是1或者2(比如1條指令,2個迴圈),那麼在「複雜度」這個概念上,兩者都一樣,叫做「常數階」複雜度。

o(g(n)) = ,則g(n)是f(n)的漸進上界。o(g(n))是指所有與g(n)具有相同增長率或比其增長率小的函式的集合。

3樓:兄弟連教育

時間複雜度是一個函式,它定量描述了該演算法的執行時間。常見的時間複雜度有以下幾種。

1,log(2)n,n,n log(2)n ,n的平方,n的三次方,2的n次方,n!

1指的是常數。即,無論演算法的輸入n是多大,都不會影響到演算法的執行時間。這種是最優的演算法。而n!(階乘)是非常差的演算法。當n變大時,演算法所需的時間是不可接受的。

用通俗的話來描述,我們假設n=1所需的時間為1秒。那麼當n = 10,000時。

o(1)的演算法需要1秒執行完畢。

o(n)的演算法需要10,000秒 ≈ 2.7小時 執行完畢。

o(n2)的演算法需要100,000,000秒 ≈ 3.17年 執行完畢。

o(n!)的演算法需要******xx(系統的計算器已經算不出來了)。

可見演算法的時間複雜度影響有多大。

所以o(1)和o(n)差了2.7小時,區別顯而易見。

4樓:繭與劍

o(1)與o(2)的階位一樣,所以僅僅是常數區別

5樓:尋秦記記

沒有o(2)這一說,要麼是o(1),要麼是o(f(n))

演算法時間複雜度的表示法o(n²)、o(n)、o(1)、o(nlogn)等是什麼意思?

6樓:匿名使用者

o(n²)表示關於n的2階無窮小量。當n線性增長時,計算量按n²規律增大。

o(1)表示計算量不變。

其它類似

7樓:匿名使用者

演算法的時間複雜度是一個函式,它定量描述了該演算法的執行時間。這是一個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,隨著模組n的增大,演算法執行的時間的增長率和 f(n) 的增長率成正比,所以 f(n) 越小,演算法的時間複雜度越低,演算法的效率越高.

例:演算法:

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

}則有 t(n) = n 的平方+n的三次方,根據上面括號裡的同數量級,我們可以確定 n的三次方 為t(n)的同數量級

則有 f(n) = n的三次方,然後根據 t(n)/f(n) 求極限可得到常數c

則該演算法的時間複雜度:t(n) = o(n^3)

c++中的時間複雜度o(1)與o(n)有什麼區別

8樓:杜xiao若

c++中的bai時間複雜度o(du1)與o(n)的主要區別在於:zhi

1、時間複雜度o(1)是常數階

dao,其基本

內操作重複執行的次數是一個固定的容常數,執行次數不存在變化;

2、而時間複雜度o(n)是線性階,其基本操作重複執行的次數是與模組n成線性相關的,其值會隨著模組n的變化而變化,當模組n的規模確定為定值後,其時間複雜度轉化為o(1)。

擴充套件資料1.時間複雜度的計算方法:

一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得t(n)/f(n)的極限值(當n趨近於無窮大時)為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

9樓:幻夢·人生

時間複雜度是

來一個函源數,它定量描述了該bai演算法的執行時間。常du

見的zhi時間複雜度有以下幾種。

1,daolog(2)n,n,n log(2)n ,n的平方,n的三次方,2的n次方,n!

1指的是常數。即,無論演算法的輸入n是多大,都不會影響到演算法的執行時間。這種是最優的演算法。而n!(階乘)是非常差的演算法。當n變大時,演算法所需的時間是不可接受的。

用通俗的話來描述,我們假設n=1所需的時間為1秒。那麼當n = 10,000時。

o(1)的演算法需要1秒執行完畢。

o(n)的演算法需要10,000秒 ≈ 2.7小時 執行完畢。

o(n2)的演算法需要100,000,000秒 ≈ 3.17年 執行完畢。

o(n!)的演算法需要******xx(系統的計算器已經算不出來了)。

可見演算法的時間複雜度影響有多大。

所以o(1)和o(n)差了2.7小時,區別顯而易見。

10樓:匿名使用者

你理解錯了,bai

我舉個du例子:

你設計了一個字串zhi類:客

dao戶有時需要知道字串的專長度,

所以有兩種屬設計getlength()函式的方法1。每次客戶詢問長度,你都用迴圈檢測串長,即for(i=0;str[i]!=0;++i)這樣效率低 時間複雜度o(n)

2 每次串內容改變時才算長度,算好後存起來,以後客戶需要知道字串的長度就直接把變數值返回這樣效率高 時間複雜度o(1)

11樓:匿名使用者

o(1)複雜度是與輸入資料copy

無關,baio(n)是與輸入資料成正比。

對於du程式zhia,for(int i=0;i<1000;i++),當輸入任意的n時迴圈次數dao均為1000,複雜度為o(1);

對於程式b,for(int i=0;i

列舉一個時間複雜度為o(n)和o(n2)的演算法。

12樓:影墨者

o(n):

for(i=0;i<100;i++)

o(n^2):

for(i=0;i<100;i++)

for(j=0;j<100;j++)

時間複雜度為n(n-1)/2時記作o(n^2),還是什麼意思,為什麼這兩個會相等?

13樓:匿名使用者

g(x)記作o(f(x))的含義是存在一個正數c,使得g(x) < c*f(x),上面如果令c=1,那麼,對於任何n,n(n-1)/2 <= n^2都是成立的。

14樓:匿名使用者

當n趨於無窮大時可忽略常數,所以-1,/2可忽略,答案是o(n^2)

15樓:宇飛天才小諸葛

當n——>無窮,n(n-1)/2=n^2/2-n/2——>n^2(n/2的影響忽略不計。)

16樓:藍藍藍鯨鯨鯨

在n特別大的時候,n和n^2比大小啊可以忽略,o()看的是最大的那一級

17樓:赧衣牟若彤

時間複雜度

演算法分析

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

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))

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

演算法中有兩處兩重迴圈,其時間複雜度為o(mn)還是o(n^2)?兩者有什麼區別?

18樓:匿名使用者

都可以,看從哪個角度看,其實兩者作為時間複雜度也沒有太大的區別,如果是mn,重點是描述二個參量各自的變化,如果是n^2,則重點在於運算量為平方的變動量

〔演算法〕排序的最低時間複雜度為什麼是o(nlogn)

19樓:匿名使用者

這個首先要明確一點,只用到比較的排序演算法最低時間複雜度是o(nlogn),而

內像桶排這樣的容只需要o(r)(r為桶的大小)

為了證明只用到比較的排序演算法最低時間複雜度是o(nlogn),首先要引入決策樹。

首先決策樹是一顆二叉樹,每個節點表示元素之間一組可能的排序,它予以京進行的比較相一致,比較的結果是樹的邊。

先來說明一些二叉樹的性質,令t是深度為d的二叉樹,則t最多有2^片樹葉。

具有l片樹葉的二叉樹的深度至少是logl。

所以,對n個元素排序的決策樹必然有n!片樹葉(因為n個數有n!種不同的大小關係),所以決策樹的深度至少是log(n!),即至少需要log(n!)次比較。

而log(n!)=logn+log(n-1)+log(n-2)+...+log2+log1

>=logn+log(n-1)+log(n-2)+...+log(n/2)

>=(n/2)log(n/2)

>=(n/2)logn-n/2

=o(nlogn)

所以只用到比較的排序演算法最低時間複雜度是o(nlogn)。

如何計算時間複雜度演算法時間複雜度o1和o2的區別???

定義 如果一個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,注意它是某一個演算法的時間複雜性。大o表示只是說有上界,由定義如...

演算法的複雜度主要包括演算法的時間複雜度和空間複雜度,演算法的時間複雜度是指

時間複雜度考慮的是演算法的執行時間,因此是d 演算法的空間複雜度指的是什麼?1 簡單來說bai 演算法的空間du 複雜度指的是佔zhi用記憶體 dao,cpu等計算機資源回的程度。答 2 具體點來解釋就是 空間複雜度 space complexity 是對一個演算法在執行過程中臨時佔用儲存空間大小的...

演算法的時間複雜度和空間複雜度怎麼看

時間複雜度,就是計算程式執行的時間,空間複雜度,就是所佔的記憶體空間。同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。電腦科學中,演算法的時間複雜度是一個函式,它定量描述了該演算法的執行時間。這是一個關於代表演算法輸入值...