1. 程式人生 > >關於演算法的一點心得

關於演算法的一點心得

演算法概念:演算法(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是否理解了一個類只專注於做一件事

高效的完成一件事。

遞迴就是這樣後續寫一寫分治法、快速查詢、歸併查詢等