一、概念: 在電腦科學中,分治法是建基於多項分支遞迴的一種很重要的演算法正規化。字面上的解釋是「分而治之」,就是把乙個複雜的問題分成兩個或更多的相同或相似的子問題,直到最後子問題可以寄簡單的直接求解,原問題的解即子問題的解的合併。
這個技巧是很多高校演算法的基礎,如排序演算法(快速排序、歸併排序)、傅利葉轉換(快速傅利葉變換)
思路:1.分解:把原問題分解為若干個規模較小,相對獨立,與原問題形式相同的子問題。
2. 解決:若子問題規模較小且易於解決時,則直接解。否則,遞迴地解決各子問題。
3.合併:講各子問題的解合併為原問題的解。
分治演算法是按照下列方案來工作的:
1)將問題的例項劃分為幾個較小的例項,最好具有相等的規模(事實上,一般來說就是這樣來分的,而且分為2個例項的居多,注意是遞迴的分!!!)
2)對這些較小的例項求解(一般使用遞迴的方法,但在問題規模足夠小的時候也可以採用採用另乙個演算法(停止遞迴))
3)如果有必要的話,合併這些較小問題的解,以得到原始問題的解(事實上,乙個分治演算法的精華就在於合併解的過程)
不要忽視這三句話!!!它是許多分治演算法經驗的總結,有助於在分析問題中考慮如何去使用分治演算法,提請注意括號裡我的注釋!!!
形象的表示一下,截張圖:
參照:
演算法 分治法
include function 列印int型陣列 parameter int型陣列,陣列的長度 void displayarray int a,int n printf n function 劃分由下標s開始到t終止的int陣列 parameter int型陣列,陣列的起始座標,陣列的終點座標 r...
演算法導論 分治法
分治法的思想 分 將問題分解為規模更小的子問題 治 將這些規模更小的子問題逐個擊破 合 將已解決的子問題合併,最終得出 母 問題的解 例如 將乙個陣列a,從小到到大排序。分治思想 我們可以將陣列a分成2個陣列,即a 0.a.length 2 a a.length 2 1,a.length 分別將它們...
分治演算法 折半查詢法
二分查詢演算法根據邊界情況不同,一般可分為兩種情況,一中是左閉右開區間,類似於 left,right 一種是左閉右閉區間,在非遞迴二分中,必須遵守一定的區間規則,否則會造成程式錯誤,即區間不能夠重複。思路 假設目標值在閉區間 l,r 中,每次將區間長度縮小一半,當l r時,我們就找到了目標值。題目描...