算法的定義和特性
算法的五個特性:確定性,能行性,輸入,輸出,有窮性
確定(確切)性(Definiteness):算法每一步語義確切,不能有二義性
能行(可行)性(Effectiveness):算法中的運算原理上都能由人在有限時間內完成
輸入:一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定出了初始條件;
輸入的集合叫定義域
輸出:一個算法產生一個或多個輸出,輸出是與輸入有關的量
有窮性(Finiteness):一個算法總是在執行有窮步后終止
計算過程:只滿足確定性、能行性、輸入、輸出而不一定能終止的一組規則如操作系統
時間復雜度
算法時間復雜度定義:
在進行算法分析時,語句總的執行次數T(n)是關於問題規模n的函數,進而分析T(n)隨n的變化情況並確定T(n)的數量級。算法的時間復雜度,也就是算法的時間量度,記作:T(n)=O(f(n))。它表示隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸進時間復雜度,簡稱時間復雜度。其中f(n)是問題規模n的某個函數。
1)上界函數O(g(n))
如果存在兩個正常數c和n0,當n≥n0時,有f(n)≤cg(n),則記做f(n) = O(g(n)),稱g(n)是f(n)的一個上界
注: f(n)的階不高於g(n)
2)下界函數Ω(g(n))
c和n0,使得當n≥n0時,有f(n)≥c g(n),則記做f(n) = Ω (g(n)),稱為Ω記號。
注: f(n)的階不低於g(n)
3)平均情況限界函數θ(g(n))
當n≥n0時,有c1 g(n)≤f(n)≤c2 g(n),則記做f(n) = θ(g(n))。 注:此時f(n)和g(n)同階
判斷時間復雜度是否為准確值相關定理
如果存在正常數n0, 使得當n≥n0時有f(n)>0, g(n)>0
並且
則f(n)=O(g(n))
如果存在正常數n0, 使得當n≥n0時有f(n)>0, g(n)>0
並且
則f(n)=θ(g(n))
遞歸
在算法設計的初期階段使用遞歸, 一旦所設計的遞歸算法被證明為正確且確信是一個好算法時,就可以消去遞歸, 把該算法翻譯成與之等價的、只使用迭代的算法。
遞歸就是F(N)=F(N-1)自身調用自身,迭代就是for(i=0,i<n,i++) a=a*i;
https://blog.csdn.net/laoyang360/article/details/7855860
https://www.jianshu.com/p/32bcc45efd32