演算法基礎 --- 日常總結

帕尼尼0_0發表於2018-09-15

master公式

master公式(也稱主方法)是用來利用分治策略來解決問題經常使用的時間複雜度的分析方法,(補充:分治策略的遞迴解法還有兩個常用的方法叫做代入法和遞迴樹法,以後有機會和親們再嘮),眾所周知,分治策略中使用遞迴來求解問題分為三步走,分別為分解、解決和合並,所以主方法的表現形式:
T (n) = aT(n/b) + O(N^d)
其中 a >= 1 and b > 1 是常量,其表示的意義是n表示問題的規模,a表示遞迴的次數也就是生成的子問題數,b表示每次遞迴是原來的1/b之一個規模,f(n)表示分解和合並所要花費的時間之和。

解法:

  1. 當d<logb a時,時間複雜度為O(n^(logb a))
  2. 當d=logb a時,時間複雜度為O((n^d)*logn)
  3. 當d>logb a時,時間複雜度為O(n^d)

二分查詢

function binarySearch(arr,value){
	let left = 0;
	let right = arr.length - 1;
	let middle;
	while(left <= right){
		middle = left + (right - left) / 2;
		if(arr[middle] < value){ // value在右邊
			left = middle + 1;
		} else if(arr[middle] === value){
			return middle;
		} else { // value在左邊
			right = middle-1;
		}
	}
	return -1;
}

陣列逆序

function reverse(array) {
	let l = 0;
	let r = array.length-1;
	while(l != r){
		swap(array, l++, r--);
	}
}

相關文章