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)。 定義 如果一個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,注意它是某一個演算法的時間複雜性。大o表示只是說有上界,由定義如... 時間複雜度考慮的是演算法的執行時間,因此是d 演算法的空間複雜度指的是什麼?1 簡單來說bai 演算法的空間du 複雜度指的是佔zhi用記憶體 dao,cpu等計算機資源回的程度。答 2 具體點來解釋就是 空間複雜度 space complexity 是對一個演算法在執行過程中臨時佔用儲存空間大小的... 時間複雜度,就是計算程式執行的時間,空間複雜度,就是所佔的記憶體空間。同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。電腦科學中,演算法的時間複雜度是一個函式,它定量描述了該演算法的執行時間。這是一個關於代表演算法輸入值...如何計算時間複雜度演算法時間複雜度o1和o2的區別???
演算法的複雜度主要包括演算法的時間複雜度和空間複雜度,演算法的時間複雜度是指
演算法的時間複雜度和空間複雜度怎麼看