C语言实现最大字段和(动态规划法和分治法)
生活随笔
收集整理的這篇文章主要介紹了
C语言实现最大字段和(动态规划法和分治法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 前言
- 一、動態規劃法
- 二、分治法
- 三、程序總代碼
- 總結
前言
本次將對最大字段和使用C語言實現的兩種方法實現,動態規劃法和分治法,兩種方法所反映和表現是不同的想法和做法,但是動態規劃法的時間復雜度更低,那并不是說分治法就不行,相反只是在解答最大字段和的時候沒有動態規劃法來的高效罷了。代碼都比較的好理解,認真看都能看得懂,這里就不解釋了!
一、動態規劃法
int maxsum2(int a[],int left,int right) {int first = left + 1;int total = right - left + 1;int b[100];int sum = 0;b[left] = a[left];int i, j;for (i = first;i <= right;i++){b[i]=(b[i-1] + a[i]) > 0 ? (b[i-1] + a[i]) : a[i];}for (j = left;j <= right;j++){sum = sum > b[j] ? sum : b [j] ;}return sum; }二、分治法
int maxsum1(int a[], int left, int right) {int leftsum, rightsum, midsum;int mid;int i, j;int temporary1=0, temporary2=0;int sum1=0, sum2=0,sum;if (left == right){sum = a[left];}else {mid = (left + right) / 2;leftsum = maxsum1(a, left, mid);rightsum = maxsum1(a,mid+1,right);for (i = mid;i >= left;i--){sum1 += a[i];temporary1 = sum1 > temporary1 ? sum1:temporary1;}for (j = mid + 1;j <= right;j++){sum2 += a[j];temporary2 = sum2 > temporary2 ? sum2 : temporary2;}midsum = temporary1 + temporary2;if (leftsum > rightsum ){sum = leftsum;}else {sum = rightsum;}if (sum < midsum){sum = midsum;}}return sum; }三、程序總代碼
#include<stdio.h> int maxsum1(int a[], int left, int right); //分治法求最大字段和 int maxsum2(int a[], int left, int right); //動態規劃法求最大字段和 int main() {int a[10];int max;for (int i = 0;i < 10;i++){scanf("%d", &a[i]);}for (int j = 0;j < 10;j++){printf("%d ", a[j]);}//max=maxsum1(a, 0, 9);max = maxsum2(a,0,9);printf("\n%d", max);return 0; } int maxsum1(int a[], int left, int right) {int leftsum, rightsum, midsum;int mid;int i, j;int temporary1=0, temporary2=0;int sum1=0, sum2=0,sum;if (left == right){sum = a[left];}else {mid = (left + right) / 2;leftsum = maxsum1(a, left, mid);rightsum = maxsum1(a,mid+1,right);for (i = mid;i >= left;i--){sum1 += a[i];temporary1 = sum1 > temporary1 ? sum1:temporary1;}for (j = mid + 1;j <= right;j++){sum2 += a[j];temporary2 = sum2 > temporary2 ? sum2 : temporary2;}midsum = temporary1 + temporary2;if (leftsum > rightsum ){sum = leftsum;}else {sum = rightsum;}if (sum < midsum){sum = midsum;}}return sum; }int maxsum2(int a[],int left,int right) {int first = left + 1;int total = right - left + 1;int b[100];int sum = 0;b[left] = a[left];int i, j;for (i = first;i <= right;i++){b[i]=(b[i-1] + a[i]) > 0 ? (b[i-1] + a[i]) : a[i];}for (j = left;j <= right;j++){sum = sum > b[j] ? sum : b [j] ;}return sum; }總結
記錄自己的學習!
總結
以上是生活随笔為你收集整理的C语言实现最大字段和(动态规划法和分治法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bmob的使用-上传图片
- 下一篇: Python爬虫-抓取数据到可视化全流程