分治法往往運用於解決較為大型的問題,在處理大型問題的時間上(t(n)=一(nlgn))相較於暴力求解有著極大的優勢,以下為分治法進行操作的具體步驟:
分解步驟:由於處理的問題較為大型,故分解成形式一致但規模較小的子問題對於問題的處理效率大有裨益,個人認為這也是分治法的核心。
解決步驟:用遞迴求解出子問題。當子問題的規模足夠小的時候,停止遞迴,直接求解。
合併步驟:通過歸併將子問題組合求出原問題的解。
1. 最大子陣列問題
2. 矩陣乘法的運算(strassen演算法)
等等。。。
以下先給出偽**:
find-max-crossing-subarray(a,low,mid,high)
left-sum=-∞
sum=0
for i=mid downto low
sum=sum+a[i]
if sum>left-sum
left-sum=sum
max-left=i
right-sum=-∞
sum=0
for j=mid+1 to high
sum=sum+a[i]
if sum>right-sum
right-sum=sum
max-right=j
return(max-left,max-right,left-sum+right-sum)
find-maximum-subarray
(a,low,high)
if high==low
return(low,high,a[low])
else mid=[(low+high)/2] (
left-low,left-high,left-sum
)= find-maximum-subarray
(a,low,high)
(right-low,right-high,right-sum)= find-maximum-subarray
(a,low,high)
(cross-low,cross-high,cross-sum)= find-max-crossing-subarray(a,low,mid,high)
if left-sum>=right-sum and left-sum>=cross-sum
return(right-low,left-high,left-sum)
elseif right-sum>=left-sum and right-sum>=cross-sum
return(right-low,left-high,left-sum)
else return(cross-low,cross-high,cross-sum)
思路:取中點作為乙個定位軸,則最小子陣列的位置就有三種情況軸右邊,軸左邊,軸上,以這個思路把軸兩邊的子陣列再次細分,這個過程我稱之為遞迴中的遞過程,在觸底即high==low
時開始進行歸,每次歸的都是當前定位軸所成子陣列的最大子陣列(子陣列中的子陣列),當進行到最後便是原陣列中的最大子陣列。
square-matrix-multiply-recursive(a,b)
n=a.rows
let c be a new n*n matrix
if n==1
c11=a11*b11
else partition a,b and c as in equations n/2*n/2 matrix1
c11= square-matrix-multiply-recursive(a11,b11)+square-matrix-multiply-recursive(a12,b21)
c12= square-matrix-multiply-recursive(a11,b12)+square-matrix-multiply-recursive(a12,b22)
c21= square-matrix-multiply-recursive(a21,b11)+square-matrix-multiply-recursive(a22,b21)
c22= square-matrix-multiply-recursive(a21,b12)+square-matrix-multiply-recursive(a22,b22)
return c
1: b= c同理
思路:此思路僅為偶數階矩陣適用
遞:先將大的矩陣按左上,左下,右上,右下平均分成4個小矩陣,照此細分直到觸底即n=2為止,此時的矩陣乘法就可變為唯一不變的四個式子。
歸:將算出的新矩陣即c,與另乙個新矩陣c2再次做矩陣運算,如此歸併直到成為原來的矩陣為止。
篩法 個人對篩法的理解
首先我們給出乙個問題 求1 n以內 的所有質 數 最樸素的演算法是一一枚舉1 n以內的 數,驗證 是否為素 數 一般 來說我們 驗證素數 的代價是 o n 當然你也 可以用賭 徒演算法 這樣我 們解決這 個問題就 需要o nn 的代 價 那麼我們能否做的更好呢?我們需要的就是篩法 由唯一分解定理我們...
右腦記憶法的個人理解
先寫個提綱。右腦記憶法 王峰 袁文魁等的記憶方法基礎。也是大腦錦標賽,記憶大師的通用方法學。說是右腦記憶,其實就是影象記憶。因為形象化的資訊,更容易記憶。最強大腦節目,記憶是很關鍵的一項能力。走進科學 記憶有魔方 最開始,就是數字編碼。習慣右腦影象的基本方法。圖形,連鎖,講故事,記憶宮殿等,都有乙個...
分治法排序
分治法排序 1 把大問題分為小問題 2 求每個小問題的解 3 和1反方向,把各個解合併起來 實現 1 啟用兩個快取,乙個放前半部份問題,乙個放後半部份問題 2 只用乙個大快取,用index的大小區分問題規模 include include void megre pre int pre,int fir...