分治法
分治法(divide and conquer,D&C):將原問題划分成若干個規模較小而結構與原問題一致的子問題 ;遞歸地解決這些子問題,然后再合並其結果,就得到原問題的解。
容易確定運行時間,是分治算法的優點之一。
分支模式在每一層遞歸上都有三個步驟:
--分解(Divide):將原問題分解為一系列子問題;
--解決(Conquer):遞歸地解各子問題。若子問題足夠小,則直接有解;
--合並(Combine):將子問題的結果合並成原問題的解。
分治法的關鍵點:
原問題可以一直分解為形式相同子問題,當子問題規模較小時,可自然求解,如一個元素本身有序
子問題的解通過合並可以得到原問題的解
子問題的分解以及解的合並一定是比較簡單的,否則分解和合並所花的時間可能超出暴力解法,得不償失
快速排序算法
1、分解:數組A[p..r]]被划分成兩個子數組A[p..q-1]和A[q+1,r],使得A[q]為大小居中的一個數,左側A[p..q-1]中的每一個元素都小於等於它,而右側A[q+1,r]中的每個元素都大於等於它。其中計算下標q也是划分過程的一部分。
2、解決:通過遞歸調用快速排序,對子數組A[p..q-1]和A[q+1,r]進行排序
3、合並:因為子數組都是原址排序的,所以不需要合並,數組A[p..r]已經有序
所以划分非常重要,具體一些划分方法以及優化在下一篇博客介紹。