分治法求最大子串

2021-08-04 05:54:35 字數 1027 閱讀 9709

最近在學分治法,涉及到很多問題都能用分治法解決,漢諾塔,快排,歸併排序等,下面是解決最大字串問題。

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...