關於演算法的一點心得
演算法概念:演算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。
至於演算法的什麼的特性之類的請自行百度本部落格就不於解釋了。
既然談到演算法那麼就要說說演算法的好壞了,演算法的本質是解決問題,但是一個問題的解決方案又有多種解法。不同的人的看法又不同。這就造成了同一問題,多套程式碼。那麼又如何判定那套好呢????
在這就要引入一個空間複雜度和時間複雜度。這兩者分別定義了一套程式碼的空間與時間的增長率,但是在現今社會中空間已不是太重要,因為現今的記憶體已經上漲到了已T為單位。而時間複雜度主要講的是增長速度打一比方:比如同一程式碼在查詢陣列中的元素
當陣列長度為10時是相同時間、但是當資料上漲到10萬、20萬是時間就不同了時間複雜度就是指上漲的速度
在介紹完演算法的基本概念後就要講一講遞迴了,作為一個最基礎的演算法說白了就是自己呼叫自己,這是相當符合java中的6大設計原則的有興趣的朋友可以看看Java設計模式六大原則。
而在遞迴中最重要的不是呼叫,而是找到出口也就是何時停止。在這附上n的累加和的遞迴java程式碼:
package 遞迴; import java.util.Scanner; public class Main { /*累加和 * * */ public int num(int n) { if(n==1) return 1; else return n+num(n-1); } public static void main(String[] args) { // TODO 自動生成的方法存根 Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); System.out.println(new Main().num(n)); } }
從上面可以看出遞迴的簡便。但只要有點程式碼常識的都會說我可以用for、while等迴圈寫啊。但是我給你分析一下上述帶碼
假如你輸入一個6的時候num會呼叫6+num(5)
然後是5+num(4)-->4+num(3)-->3+num(2)-->2+num(1)
當到了1時就是if返回1-->2+1-->3+3-->6+4-->10+5-->15+6最終返回21是否理解了一個類只專注於做一件事
高效的完成一件事。
遞迴就是這樣後續寫一寫分治法、快速查詢、歸併查詢等