【數據結構與算法之美】常見算法的模板

1.遞歸

1.1 代碼實現

	public void recur(int level,int param){
		//terminator  --》終止條件
		if(level > MAX_LEVEL){
			//process result
			return;
		}

		//process current logic  --》 當前邏輯處理
		process(level,param);
		
		//drill down           --》 遞歸到下一個子問題。
		recur(level:level+1,newParam);
		
		//restore current status  --》存儲當前狀態 -非必須。
 	}

1.2 思維要點

1.不要人肉遞歸(最大誤區)
2.找到最近最簡方法,將其拆成可重複解決的問題(重複子問題)3.數學歸納法整理

2.回溯法

2.1 代碼實現

result = []
def backtrack(路徑, 選擇列表):
    if 滿足結束條件:
        result.add(路徑)
        return

    for 選擇 in 選擇列表:
        做選擇
        backtrack(路徑, 選擇列表)
        撤銷選擇

2.2 思維要點

回溯法主要是通過遞歸來實現的。
1.找到一個可能存在的正確的答案。
2.在嘗試了所有可能的分步方法後宣告該問題沒有答案。
ps:在最壞的情況下,回溯法會導致一個複雜度爲指數時間的計算。

3.二分查找

3.1 代碼實現

	left , right = 0,len = array.length-1;
	while(left <= right){
		mid = (left + right) / 2;
		if(array[mid] == target)
			return result;
		else if(array[mid] < target)
			left = mid + 1;
		else 
			right = mid-1;
	}

3.2 思維要點

二分查找的前提
1.目標函數單調性(單調遞增或遞減)
2.存在上下界(bounded)
3.能夠通過索引進行訪問(index accessible)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章