演算法和演算法分析
演算法:是為了解決某類問題而規定的乙個有限長的操作序列
演算法具有的五個特性:
有窮性:有限步驟,有限時間
確定性:不產生二義性
可行性:基本操作運算執行有限次來實現
輸入:有零個或者多個輸入
輸出:有乙個或者多個輸出
評價演算法優劣的基本準則:
正確性,可讀性(易於理解,相互交流),健壯性(能對非法輸出做出良好的回應),高效性(時間複雜度,空間複雜在度來衡量)
接下來介紹時間複雜度和空間複雜度:
先來說明兩個概念:
問題規模:演算法求解問題輸入量的多少,是問題大小的本質表示
語句頻度:一條語句重複執行的次數
常見的時間複雜度按數量級遞增排列依次為:
常量階o(1),
常量階o(1),
對數階o(long2n),
對數階o(long2n),
線性階o(n),
線性階o(n),
線性對數階o(nlong2n),
線性對數階o(nlong2n),
平方階o(n2),
平方階o(n2),
立方階o(n3),
立方階o(n3),
k次方階o(nk),
k次方階o(nk),
指數階o(2n)
指數階o(2n)
最好時間複雜度:演算法計算量可能達到的最小值
最壞時間複雜度:演算法計算量可能達到的最大值
平均時間複雜度:演算法在所有可能下,按輸入例項以等概率出現,演算法計算量的加權平均值
說明:一般情況人們只關心最壞情況下的時間複雜度,一般的時間複雜度,指的就是最壞時間複雜度
關於演算法儲存空間需求,類似於演算法的時間複雜度,我們採用漸進空間複雜度作為演算法所需儲存空間的度量民間稱空間複雜度,它也是問題規模n的函式,記作:
s(n)=o(f(n))
s(n)=o(f(n))
一般情況下,乙個程式在機器上執行時,除了需要本身所用的指令,常數,輸入資料外,還需要一些對資料進行操作的輔助儲存空間,其中對於輸入資料所佔的具體儲存量取決於問題本身,與演算法無關,這樣,只需要分析該演算法在實現時所需要的輔助空間就可以了
《資料結構》學習筆記(2)
類的定義體現了抽象資料型別的思想,可以用以支援說明與實現的分離,將抽象資料型別的實現封裝在類的內部,使達到資訊隱蔽的目標。include using namespace std class point ostream point operator ostream strm,point p 或poin...
資料結構學習筆記2
資料結構 第二章 chapter 1線性表線性儲存 引入 線性結構的定義 若結構是非空有限集,則有且僅有乙個開始結點和乙個終端結點,並且所有結點都最多只有乙個直接前趨和乙個直接後繼。可表示為 a1 a2 an 線性結構表示式 a1 a2 an 線性結構的特點 只有乙個首結點和尾結點 除首尾結點外,其...
《大話資料結構》 學習筆記2
第二章 演算法 2.2 資料結構 與 演算法的關係 簡單的說 資料結構 與 演算法 的關係 即 梁山伯 與 祝英台 的關係 把其中一方隔離出來唱獨角戲.沒意義!2.3 兩種演算法的比較 現寫乙個求1 2 3 100結果的程式,你應該怎麼寫呢?大多數人馬上寫出下面的c語言 int i,sum 0,n ...