同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。
演算法分析的目的在於選擇合適演算法和改進演算法。
演算法複雜度分為時間複雜度和空間複雜度。其作用: 時間複雜度是度量演算法執行的時間長短;而空間複雜度是度量演算法所需儲存空間的大小。
乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。
1. 一般情況下,演算法的基本操作重複執行的次數是模組n的某乙個函式f(n),因此,演算法的時間複雜度記做:t(n)=o(f(n))
分析:隨著模組n的增大,演算法執行的時間的增長率和f(n)的增長率成正比,所以f(n)越小,演算法的時間複雜度越低,演算法的效率越高。
2. 在計算時間複雜度的時候,先找出演算法的基本操作,然後根據相應的各語句確定它的執行次數,再找出t(n)的同數量級(它的同數量級有以下:1,log2n ,n ,nlog2n ,n的平方,n的三次方,2的n次方,n!),找出後,f(n)=該數量級,若t(n)/f(n)求極限可得到一常數c,則時間複雜度t(n)=o(f(n))
例:演算法:
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
c[ i ][ j ]=0; //該步驟屬於基本操作 執行次數:n的平方 次
for(k=1;k<=n;++k)
c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ]; //該步驟屬於基本操作 執行次數:n的三次方 次
則有 t(n)= n的平方+n的三次方,根據上面括號裡的同數量級,我們可以確定 n的三次方 為t(n)的同數量級
則有f(n)= n的三次方,然後根據t(n)/f(n)求極限可得到常數c
則該演算法的 時間複雜度:t(n)=o(n的三次方)
按數量級遞增排列,常見的時間複雜度有:
常數階o(1),對數階o(log2n),線性階o(n),
線性對數階o(nlog2n),平方階o(n2),立方階o(n3),...,
k次方階o(nk), 指數階o(2n) 。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。
與時間複雜度類似,空間複雜度是指演算法在計算機內執行時所需儲存空間的度量。記作:
s(n)=o(f(n))
我們一般所討論的是除正常占用記憶體開銷外的輔助儲存單元規模。
最優化理論
最優化 optimization 應用數學的重要研究領域.它是研究在給定約束之下如何尋求某些因素 的量 以使某一 或某些 指標達到最優的一些學科的總稱.由於運籌學中出現的問題大多即是最優化所研究的問題,因此運籌學的許多分支,如數學規劃 組合最優化 排隊論,以及決策論等也是最優化的組成部分.此外,最優...
最優化理論
2017 10 24 最優化是應用數學的乙個分支,只不過對於計算機系的同學而言其實還是非常重要的。像現在很火的方向,如機器學習 計算機視覺 計算機圖形學 機械人等方向中都有非常基礎的應用,還有機械 物理 生物等,更不用說金融方向的quant。相信很多同學都學過最優化,對於軟體方向的同學應該是四年級的...
關於顏色理論
製作網頁的過程中,我一直不知道應該如何配色。我的意思是,我不知道應該選擇哪些顏色放在一起,完全憑感覺。於是昨天,我在網上找了一些資料,希望找到理論指導。結果很失望。顏色理論研究的都是顏色的本質,至於顏色搭配,最終靠的還是個人感覺。說到底,choosing colors is art,not scie...