軟體設計中演算法複雜度中大O 的具體意思

時間 2021-08-17 02:21:32

1樓:匿名使用者

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

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

我們一般所討論的是除正常佔用記憶體開銷外的輔助儲存單元規模。討論方法與時間複雜度類似,不再贅述。

2樓:

軟體設計中演算法複雜度中大o、ω的意思是:演算法的複雜性

演算法的複雜性是演算法效率的度量,是評價演算法優劣的重要依據.一個演算法的複雜性的高低體現在執行該演算法所需要的計算機資源的多少上面,所需的資源越多,我們就說該演算法的複雜性越高;反之,所需的資源越低,則該演算法的複雜性越低.

計算機的資源,最重要的是時間和空間(即儲存器)資源.因而,演算法的複雜性有時間複雜性和空間複雜性之分.

不言而喻,對於任意給定的問題,設計出複雜性儘可能低的演算法是我們在設計演算法時追求的一個重要目標;另一方面,當給定的問題已有多種演算法時,選擇其中複雜性最低者,是我們在選用演算法適應遵循的一個重要準則.因此,演算法的複雜性分析對演算法的設計或選用有著重要的指導意義和實用價值.

簡言之,在演算法學習過程中,我們必須首先學會對演算法的分析,以確定或判斷演算法的優劣.

演算法中描述複雜度的大o是什麼意思

3樓:

在「計算機演算法複雜性分析」課程

中,通常使用大 o 符號表述時間複雜內度。常見的有:

容(1)、o(n²):表示當 n 呈線性增長時,計算量按 n² 規律增大。該種演算法是效率最低的一種。

(2)、再例如:要在一個大小為 n 的整數陣列中,找到一個該陣列裡面的最大的一個整數,因此你需要把 n 個整數都掃描一遍,操作次數為 n,那麼該時間複雜度就是o(n)。

演算法複雜度中的o(n)、o(nlgn)、o(n^2)等是什麼意思

4樓:少年子桑

關於演算法的複雜度計算,初學者一開始便容易進入完全定量的思考之中,這是難以到達的。演算法複雜度在很多時候是對演算法執行的時間一個大概的定性(或者說大數)描述,因為很多時候無法精確地描述一條**究竟執行了多少時間。而任何一個演算法執行的大多時間都集中在某一主體迴圈之中,像for,while之類,主體迴圈的次數往往跟某個或多個輸入引數或環境變數有關。

像o(n)、o(nlgn)、o(n^2)之類描述都是圍繞主體迴圈次數和輸入引數或者環境變數的關係的。

下面舉一個例子,從給定的整型陣列中查詢與某一數相等的數的位置,顯然對於沒有排序的陣列而言,需要從陣列頭部開始向後遍歷比較,那麼這個主體遍歷迴圈就跟陣列的長度有關,即演算法複雜度為o(n)。

下面是演算法設計與程式分析作業中的一題,是演算法的時間複雜度那一塊的一個定理的證明。注意是大ω不是大o

5樓:電燈劍客

n->oo時 lim f(n)/n^m = a_m > 0所以存在n>0,當n>n時

f(n)/n^m > a_m/2 > 0

這就行了

6樓:匿名使用者

如果我沒有記錯,這是求下限,設g(n)=a_m * n^m,f(n) >= g(n) = omiga(n^m)得證?

演算法分析中o(n)什麼含義

7樓:匿名使用者

^o(n)這個大o表示的是最來壞源情況下的時間複雜度,就比如你舉的例子,一共n^3次乘法和n^3次加法,那麼加起來就是2×n^3。 然後如果有一個表示式f(n),使得n趨於無窮大的時候,lim(2×n^3)/f(n)=常數c,那麼就可以用大o表示。表示為o(f(n)),而且規定f(n)的表示式是不帶常數的係數的,那麼在這裡f(n)=n^3。

一般用大o表示演算法複雜度只需要取次數最高的項,而且去掉係數就ok了,不用每次都這麼算的。三重迴圈而且每重迴圈都執行n次的話直接o(n^3)就好了。

8樓:匿名使用者

o(bain) 表示執行時間的上界du 通俗點說就是演算法執行的zhi

最壞情況該程式dao有三重循

環 由c[i][j]=c[i][j]+a[i][k]*b[k][j];可知進行一回次答乘法必進行一次加法 故t(n)<=n^3+n^3=2n^3=cn^3故t(n)=o(g(n))=o(n^3)

演算法的基本概念是什麼,演算法複雜度的概念和意義

9樓:西風恨

演算法是指按照一定規則解

決某一類問題的明確和有限的步驟。

演算法複雜度主要表現為時間複雜度和空間複雜度,同一演算法其複雜度將直接影響其演算法乃至程式的優劣。一般來說,演算法的複雜度越低,其效率就越高。演算法複雜度是衡量程式優劣及效率的重要指標。

10樓:

演算法是一系列解決問題的清晰指令,也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。

一個演算法的優劣可以用空間複雜度與時間複雜度來衡量。

演算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列。

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

11樓:超超

計算機系統中的任何軟體,都是由大大小小的各種軟體組成部分構成,各自按照特定的演算法來實現,演算法的好壞直接決定所實現軟體效能的優劣.用什麼方法來設計演算法,所設計演算法需要什麼樣的資源,需要多少執行時間,多少儲存空間,如何判定一個演算法的好壞,在實現一個軟體時,都是必須予以解決的.計算機系統中的作業系統,語言編譯系統,資料庫管理系統以及各種各樣的計算機應用系統中的軟體,都必須用一個個具體的演算法來實現.

因此,演算法設計與分析是電腦科學與技術的一個核心問題.

歐幾里德曾在他的著作中描述過求兩個數的最大公因子的過程.20世紀50年代,歐幾里德所描述的這個過程,被稱為歐幾里德演算法,演算法這個術語在學術上便具有了現在的含義.下面是這個演算法的例子及它的一種描述.

歐幾里德曾在他的著作中描述過求兩個數的最大公因子的過程.20世紀50年代,歐幾里德所描述的這個過程,被稱為歐幾里德演算法,演算法這個術語在學術上便具有了現在的含義.下面是這個演算法的例子及它的一種描述.

資料結構:設計一個高效演算法,將順序表中的所有元素逆置,要求演算法空間複雜度為o(1)。

12樓:崇元化

設計一個高效演算法,將順序表中的所有元素逆置,要求演算法空間複雜度為o(1)掃描順序表l的前半部分元素l.data[i] (0<=i順序表的儲存只要確定了起始位置,表中任一元素的地址都通過下列公式得到:loc(ai)=loc(a1)+(i-1)*l  1≤i≤n 其中,l是元素佔用儲存單元的長度。

13樓:匿名使用者

輔助變數for(i=0;itemp=l.data[i];  //交換 l.data[i]與 l.

data[l.length-i-1]

l.data[i]=l.data[l.length-i-1];

l.data[l.length-i-1]=temp;

14樓:煙火中的塵埃

資料結構的高效演算法:for(int i = 0; i < array.length / 2; i++)

只有swap函式需要一個位元組的記憶體,所以空間複雜度o(1)。

資料結構是計算機儲存、組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。

資料結構往往同高效的檢索演算法和索引技術有關。

對每一個資料結構而言,必定存在與它密切相關的一組操作。若操作的種類和數目不同,即使邏輯結構相同,資料結構能起的作用也不同。不同的資料結構其操作集不同,但下列操作必不可缺:

1.結構的生成;

2.結構的銷燬;

3.在結構中查詢滿足規定條件的資料元素;

4.在結構中插入新的資料元素;

5.刪除結構中已經存在的資料元素;

6.遍歷。

15樓:匿名使用者

for(int i = 0; i < array.length / 2; i++)

只有swap函式需要一個位元組的記憶體,所以空間複雜度o(1)

什麼是軟體設計?什麼是軟體設計,其目的是什麼

軟體設計就是從軟體的需求規格說明著手,然後根據分析階段去更好的確定功能軟體系統的完整結構以及劃分功能模組,這樣可以更好的確定每一個模組的計算方式以及編寫 最終形成一個具體的軟體設計方案。很多人雖然是從事軟體設計的,或者說是對軟體設計的確有一定的瞭解,但是對其是什麼的問題卻是難以徹底解釋清楚的。很多事...

軟體設計師考多少可以拿到證書,軟體設計師考多少可以拿到證書

親親賀小魚吧 45分。從軟體設計師開始以來,每年的合格成績都保持在45分。軟體設計師是指能根據軟體開發專案管理和軟體工程的要求,按照系統總體設計規格說明書進行軟體設計,編寫程式設計規格說明書等相應的文件的實用性人才。還能夠組織和指導程式設計師編寫 除錯程式,並對軟體進行優化和整合測試,開發出符合系統...

什麼是軟體設計,什麼是軟體?軟體開發是做什麼的呢?

物件導向技術,特別是c 似乎給軟體界帶來了不小的震動。出現了大量的 和書籍去描述如何應用這項新技術。總的來說,那些關於物件導向技術是否只是一個 的問題已經被那些關於如何付出最小的努力即可獲得收益的問題所替代。物件導向技術出現已經有一段時間了,但是這種 式的流行卻似乎有點不尋常。人們為何會突然關注它呢...