最近在學分治法,涉及到很多問題都能用分治法解決,漢諾塔,快排,歸併排序等,下面是解決最大字串問題。
1,用分治法解決,下面還介紹不用分治解決的另一種方法。
#include//分治法
int countstring(int a,int start,int end);
void main()
; int v=countstring(a,0,5);
printf("最大字串為:%d",v);
}int countstring(int a,int start,int end)
else
return
0; }
int mid=(start+end)/2;
int leftsum=countstring(a,start,mid);//計算左邊最大字串
int rightsum=countstring(a,mid+1,end);//計算右邊最大字串
int left=0,l=0;
int right=0,r=0;
for(int i=mid; i>=start; i--)//兩個for結果之和求中間最大字串
for(int j=mid+1; j<=end; j++)
return ((right+left)>leftsum?(right+left):leftsum)>rightsum?((right+left)>leftsum?(right+left):leftsum):rightsum;//right+left,leftsum,rightsum中的最大值
}
2,不用分治,常規方法
#include
int maxsub(int a, int n)
return ans;
}int main()
; printf("%d\n",maxsub(a,6));
return
0;}
很多問題可以有多種方法,這裡只是介紹分治而已,當然是哪種方法簡單用哪種。 利用分治法求最大子陣列
利用分治法求解最大連續子陣列問題 1 將陣列均分兩段,遞迴分治。2 對於每層分治,最大子陣列要麼出現在左段或者右段,要麼出現在包含中點的連續陣列中,從中點出發向左右遍歷求最大陣列。3 每層最大子陣列為左段最大子陣列,右段最大子陣列及包含中點的最大子陣列的最大值。如下 include include ...
分治策略 求最大子陣列
只有當陣列中包含負數時,最大子陣列問題才有意義。如果所有元素都是非負的,最大子陣列問題沒有任何意義,因為整個陣列和肯定是最大的 1 public class findmaxsubarraydemo 4int result arr findmaximumsubarray arr,0,arr.lengt...
最大子陣列(分治法)
尋找a low,high 中的最大連續子陣列a i,j mid low high 2,欲求的最大連續子陣列出現的位置 1 出現在a low,mid 中 即 low i j mid 2 出現在a mid 1,high 中,即 mid 3 跨越了mid位置,出現在a low,high 中,即 low i...