題目:用分治法求和
這裡我們舉出乙個例子,利用分治法求陣列的和:
比如: a[10] = ,分治法的演算法之前我們學資料結構的時候,有過應用,資料結構學過的歸併排序,二分法,快速排序演算法等裡面用到的就是分治法的思想:
如圖:
把乙個大問題,分解成若干個小問題,這裡把乙個大的陣列分解成若干個小陣列,再合併把值返回。
下面看程式**:
#include#includeint add(int *a,int
left,int
right);
int main()
int sum=add(array,0,9);
printf("%d\n",sum);
return 0;
} int add(int *a,int
left,int
right)
else
if (left == right-1)
else
}
執行結果:
題目還是比較簡單的,但是利用分治法來求和在效率上明顯很低,用乙個迴圈一次遍歷就可以實現求和了,而且效率比這個高。當然,這裡只是出於老師實驗要求的題目,能把實驗分混到手就行了。
常見演算法設計方法 分治法
歸併排序就是常見的一種採用 分治法 進行設計的演算法,以下先給出具體的c 版 示例 對列表進行遞迴排序 待排序陣列 public static listsort listlist 合併已經排序好的兩個list left list right list private static listmerge...
分治法例項 來自 演算法 C語言實現
使用分治法求最大值 這個函式將陣列a l a r 分成a l a m 和a m 1 a r 兩部分,分別求出每一部分的最大元素 遞迴地 並返回較大的那乙個作為整個陣列的最大元素.如果陣列大小是偶數,則兩部分大小相等 如果是奇數,第一部分比第二部分的大小大1.include include inclu...
C語言實現分治法
我用了大約三種方法實現,逐漸減少時間複雜度,分別用不同的命名 方式來區分他們,順便列印了那個子區間的和值最大,maxsum 1 用陣列的方式實現三次遍歷,求出所有子串行的和值,並且比較大小,求出最大子串行值 maxsum 2 用另乙個陣列來儲存從下標0開始的所有和值,然後操作次此序列,用減的方式,來...