n個整數組成的序列
(),求該序列形如
(1)分別用蠻力法、分治法和動態規劃法設計最大子段和問題的演算法; (
2)比較不同演算法的時間效能; (
3)給出測試資料,寫出程式文件。
// 實驗2.1最大欄位和問題.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。
#include using namespace std;
//最大欄位和:蠻力法
int maxsum_manli(int a, int n)
} return maxsum;
}//最大欄位和:分治法實現
int maxsum_fenzhi(int a, int left, int right)
s2 = 0; rights = 0; //再求解s2
for (j = center + 1; j <= right; j++)
midsum = s1 + s2; //計算情況③的最大子段和
if (midsum < leftsum) sum = leftsum; //合併解,取較大者
else sum = midsum;
if (sum < rightsum) sum = rightsum;
} return sum;
}//最大欄位和:動態規劃法
int maxsum_dongtai(int a, int n)
return maxsum;
}int main();
int n = 7;
cout << "請輸入數字串個數:";
cin >> n;
cout << "請依次輸入 " << n << " 個數字:";
for (int i = 0; i < n; i++)
cout << endl;
int sum1 = maxsum_manli(a, n);
int sum2 = maxsum_fenzhi(a, 0, n-1);
int sum3 = maxsum_dongtai(a, n);
cout << "使用蠻力法求得:" << sum1 << endl;
cout << "使用分治法求得:" << sum2 << endl;
cout << "使用動態規劃法求得:" << sum3 << endl;
最大子段和演算法分析
最大子段和問題 maximum interval sum 一.問題描述 給定長度為n的整數序列,a 1.n 求 1,n 某個子區間 i j 使得a i a j 和最大.或者求出最大的這個和.例如 2,11,4,13,5,2 的最大子段和為20,所求子區間為 2,4 二.演算法分析 1.窮舉法 1 i...
最大子段和問題分析
問題 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0,依此定義,所求的最優值為 max,1 i j n 例如,當 a1,a2,a3,a4,a4,a6 2,11,4,13,5,2 時,最大子...
演算法設計 最大子段和問題 動態規劃
演算法設計 最大子段和問題 動態規劃 問題 給定有n個整數 包含負整數 組成的序列a1,a2,a3,an,求該序列子段和的最大值。注意 當所有整數均為負值時,定義其最大欄位和為0 由bj的定義 bj是1到j位置的最大子段和 易知,當bj 1 0時bj bj 1 aj,否則bj aj。則計算bj的動態...