首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

算法学习之最大子序列有关问题

2012-11-22 
算法学习之最大子序列问题最大子序列问题:即在给定序列中寻找一子序列使其和在所有子序列中最大。代码实现

算法学习之最大子序列问题

最大子序列问题:


即在给定序列中寻找一子序列使其和在所有子序列中最大。


代码实现如下:

#include <iostream>#include <vector>using namespace std;const unsigned int N = 5;int maxSubSum1(const vector<int> & a){    int max_sum = 0;    int begin = 0;    int interval = 0;    for(unsigned int i = 0; i < a.size(); i++)    {        for(unsigned int j = i; j < a.size(); j++)        {            int this_sum = 0;            for(unsigned int k = i; k <= j; k++)            {                this_sum += a[k];            }            if(this_sum > max_sum)            {                max_sum = this_sum;                begin = i;                interval = j;            }        }    }    cout << "The biggest subarray is:" << endl;    for( ; begin <= interval; begin++)    {        cout << a[begin] << "\t";    }    return max_sum;}//int maxSubSum2(const vector<int> & a){    int max_sum = 0;    int begin = 0;    int interval = 0;    for(unsigned int i = 0; i < a.size(); i++)    {        int this_sum = 0;        for(unsigned int j = i; j < a.size(); j++)        {            this_sum += a[j];            if(this_sum > max_sum)            {                max_sum = this_sum;                begin = i;                interval = j;            }        }    }    cout << "The biggest subarray is:" << endl;    for( ; begin <= interval; begin++)    {        cout << a[begin] << "\t";    }    return max_sum;}//int maxSubSum3(const vector<int> & a){    int max_sum = 0;    int this_sum = 0;    unsigned int begin = 0;    unsigned int count = 0;    for(unsigned int j = 0; j < a.size(); j++)    {        this_sum += a[j];        count++;        if(this_sum >max_sum)        {            max_sum = this_sum;            begin = (j+1) - count;        }        else if(this_sum < 0)        {            this_sum = 0;            count = 0;        }    }    cout << "The biggest subarray is:" << endl;    for(unsigned int i = begin; i < begin + count; i++)    {        cout << a[i] << "\t";    }    return max_sum;}int main(){    vector<int> array(N);    int sub_sum = 0; //   maxSubSum1(array);    cout << "Please input " << N <<" number to the array:" << endl;    for(unsigned int i = 0; i < N; i++)    {        cin >> array[i];    }    sub_sum = maxSubSum3(array);    cout << "\nThe biggest sum of the subarray is:" << endl;    cout << sub_sum << endl;    return 0;}

代码中给出了三种不同的方法,第一种的时间复杂度为O(n^3)。第二种为O(n^2)。第三种为O(n)。


热点排行