演算法設計與分析 最大子段和問題

2021-09-20 10:32:53 字數 1414 閱讀 6851

給定由

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的動態...