演算法01 關於演算法的概念理解

2021-10-05 16:17:36 字數 802 閱讀 4610

**演算法效率衡量**

需要考慮機器的配置和執行環境(相同機器對比測試),

因此單純依靠執行的時間來比較演算法的優劣並不一定是客觀準確的。

時間複雜度實際上就是乙個函式,該函式計算的是執行基本操作的次數。

乙個演算法語句總的執行次數是關於問題規模 n 的某個函式,記為分 f(n),n 稱為問題的規模。

語句總的執行次數。記為 t[n],當 n 不斷變化時,t[n]也在變化,演算法的執行次數的增長速率和 f(n)的增長速率相同。則 t[n]=o(f(n)),稱 o(f(n))為時間複雜度的 o 漸進表示法。

分析演算法時,存在幾種可能的考慮:

演算法完成工作最少需要多少基本操作,即最優時間複雜度

演算法完成工作最多需要多少基本操作,即最壞時間複雜度

演算法完成工作平均需要多少基本操作,即平均時間複雜度

時間複雜度的幾條基本計算規則:

(1) 基本操作,即只有常數項,認為其時間複雜度為 o(1)

(2) 順序結構,時間複雜度按加法進行計算

(3) 迴圈結構,時間複雜度按乘法進行計算

(4) 分支結構,時間複雜度取最大值

(5) 判斷乙個演算法的效率時,往往只需要關注運算元量的最高次項,其它次要項和

常數項可以忽略

(6) 在沒有特殊說明時,我們所分析的演算法的時間複雜度都是指最壞時間複雜度

o(1) < o(logn) < o(n) < o(nlogn) < o(n^2) < o(n^3) < o(2^n) < o(n!) < o(n^n)

關於KMP演算法的理解

上次因為haipz組織的比賽中有道題必須用到kmp演算法,因此賽後便了解了下它,在仔細拜讀了孤 影神牛的文章之後有種茅塞頓開的感覺,再次orz。附上鏈結 對於整個kmp演算法,最精髓的部分便是關於next陣列的生成。一開始ruijia liu的書上貼上的 感覺完全不能理解,但是看神犇的分析覺得似乎明...

關於CPD演算法的理解

最近看了 point set registration coherent point drift 來記錄一下對這個演算法的理解。cpd演算法使用的數學模型為高斯混合模型 gmm 關於高斯混合模型的理解可以參考下面這篇部落格 首先定義了一系列變數 其中點集x和點集y是兩個需要配準的點雲,t為變換矩陣。...

關於KMP演算法的理解 文字匹配演算法

莫里斯 普拉特 操作 簡稱kmp演算法 kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。其中實現減少匹配次數的主要方法是提前算出模板的乙個部分匹配表next。先舉個例子吧,文字是abcabcdabdabcdabc,模板是abcdabc,模板的匹配陣列ne...