演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作
演算法具有五個基本特性:輸入、輸出、有窮性、確定性和可行性。
2.2.1 輸入輸出
演算法有0個或多個輸入,至少有乙個或多個輸出。
2.2.2 有窮性
有窮性:指演算法在執行有限的步驟之後,自動結束而不會出現無限迴圈,並且每乙個步驟可在可接受的時間內完成。
2.2.3 確定性
確定性:演算法的每一步驟都具有明確的含義,不會出現二義性。
2.2.4 可行性
可行性:演算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成。
好的演算法具有的特性:
2.3.1 正確性
正確性:演算法的正確性是指演算法至少應該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需求、能夠得到問題的正確答案。
正確性可以分為四個層次:
層次依次提高。
2.3.2 可讀性
2.3.3 健壯性
2.3.4 時間效率高和儲存量低
設計演算法應盡量滿足時間效率高和儲存量低的要求。
2.4.1 事後統計方法
事後統計方法:這種防風主要是通過設計好的測試程式和資料,利用計算機時對不同演算法的編制的程式的執行時間進行比較,從而確定演算法效率的高低。
存在很大缺陷:
因此,基於事後統計防風,我們通常不予採納。
2.4.2 事前分析估算方法
事前分析估算方法:在計算機程式編制前,依據統計方法對演算法進行估算。
高階程式語言便攜的程式執行時消耗時間的影響因素:
在分析程式的執行時間時,最重要的是把程式看成是獨立於程式設計的語言的演算法或一系列步驟。
2.5.1 演算法時間複雜度定義
在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,是演算法的時間量度,記作:t(n)=o(f(n))。它表示隨問題規模n的增大,稱作演算法的漸進時間複雜度,簡稱時間複雜度。f(n)是問題規模n的某個函式。
o( )來體現演算法時間複雜度的記法,稱之為大o記法。
最優演算法是t(n)增長最慢的演算法。
2.5.2 推倒大o階方法
推到大o階:
2.5.3 常數階
執行時間恆定,與問題規模無關的程式是o(1)複雜度。
2.5.4 線性階
要分析演算法的複雜度,關鍵就是要分析迴圈結構的運**況。
除了常數階和線性階,還有對數階、平方階、立方階和指數階等。
執行次數函式
階非正式術語
12o(1)
常數階2n+3
o(n)
線性階3n^2+2n+1
o(n^2)
平方階5log_2n+20
o(logn)
對數階2n+nlog_2n+19
o(nlogn)
nlogn階
6n3+2n2+3n+4
o(n^3)
立方階2^n
o(2^n)
指數階注意o(logn)的時間複雜度比o(n)小。
最壞情況執行時間是一種保證,執行時間不能再壞了。除非特別指定的情況,一般提到的執行時間都是最壞情況的執行時間。
平均執行時間是所有情況中最有意義的,因為它是期望的執行時間。
演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法空間複雜度的計算公式記作:s(n)=o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。
資料探勘 Chapter 2
本章 資料有什麼型別的屬性或字段組成?每個屬性具有何種型別的資料值 屬性 屬性是乙個資料字段,表示資料物件的乙個特徵。機器學習文獻更傾向於使用術語 特徵 而統計學家更源於使用術語 變數 資料探勘與資料庫的專業人士一般使用術語 屬性 屬性的種類 資料的基本統計描述 資料視覺化 層次視覺化 視覺化複雜物...
大話資料結構 Chapter 1 資料結構介紹
資料結構 是相互之間存在一種或者多種特定的關係的資料元素的集合。程式設計的實質是對確定的問題,選擇一種好的資料結構,加上設計一種好的演算法。1.1 資料 資料 描述客觀事物的符號,是計算機中可以操作的物件,是能夠被計算機識別,並輸入給計算機處理的符號集合。資料就是符號,符號需要具備兩個前提 1.2 ...
Python資料探勘建模 chapter 2決策樹
2.決策樹演算法分析 id3演算法 在各節點上用資訊增益法作為屬性選擇標準,只適合離散的描述屬性 c4.5演算法 用資訊增益率選擇節點屬性,可處理離散的描述屬性,連續的描述屬性 cart演算法 有效的非引數分類和回歸方法,終結點為連續變數時,為回歸樹,終結點為分類變數,為分類樹 常見的決策樹演算法還...