分治法的個人理解

2021-07-27 12:22:17 字數 2356 閱讀 1948

分治法往往運用於解決較為大型的問題,在處理大型問題的時間上(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...