最大子列和(演算法複雜度優化)

2021-08-10 23:34:02 字數 2066 閱讀 9199

#include 

#include

#include

#define maxk 1e7

clock_t start,stop;

double duration;

/*一種複雜度為o(n^3)的暴力解法*/

int maxsubseqsum1(int a,int n)

}return maxsum;

}/*複雜度為o(n^2)的演算法*/

int maxsubseqsum2(int a,int n)

}return maxsum;

} /*分而治之演算法,複雜度為o(nlogn)*/

int max3( int a, int b, int c )

int divideandconquer( int list, int left, int right )

// 左邊掃瞄結束

maxrightbordersum = 0; rightbordersum = 0;

for( i = center + 1; i <= right; i++ ) //右邊掃瞄結束

//下面返回"治"的結果

return max3( maxleftsum, maxrightsum,

maxleftbordersum + maxrightbordersum );

}int maxsubseqsum3( int list, int n )

int maxsubseqsum4(int a,int n)

return maxsum;

} int main()

start=clock();

for(int i=0;i//重複呼叫函式以獲得充分多的時鐘打點數

maxsubseqsum1(a,n);

stop=clock();

duration=((double)(stop-start))/clk_tck/maxk;

printf("%d\n",maxsubseqsum1(a,n));

printf("ticks1=%f\n",(double)(stop-start));

printf("duration1=%6.2e\n",duration);

start=clock();

for(int i=0;i//重複呼叫函式以獲得充分多的時鐘打點數

maxsubseqsum2(a,n);

stop=clock();

duration=((double)(stop-start))/clk_tck/maxk;

printf("%d\n",maxsubseqsum2(a,n));

printf("ticks2=%f\n",(double)(stop-start));

printf("duration2=%6.2e\n",duration);

start=clock();

for(int i=0;i//重複呼叫函式以獲得充分多的時鐘打點數

maxsubseqsum3(a,n);

stop=clock();

duration=((double)(stop-start))/clk_tck/maxk;

printf("%d\n",maxsubseqsum3(a,n));

printf("ticks3=%f\n",(double)(stop-start));

printf("duration3=%6.2e\n",duration);

start=clock();

for(int i=0;i//重複呼叫函式以獲得充分多的時鐘打點數

maxsubseqsum4(a,n);

stop=clock();

duration=((double)(stop-start))/clk_tck/maxk;

printf("%d\n",maxsubseqsum4(a,n));

printf("ticks4=%f\n",(double)(stop-start));

printf("duration4=%6.2e\n",duration);

return

0; }

C 解決最大子列和問題,演算法時間複雜度優化

問題描述很簡單,對於給定的整數a1,a2,an 可能有負數 求ak a2 aj的最大值 k 串數的和最大非空連續子陣列。為了方便起見,如果所有的整數均為負數,則最大的子串行和為0 演算法1 窮舉演算法 計算並返回所最大子串行的和 窮舉遍歷 int maxsubsum1 const vector a ...

複雜度1 最大子列和問題

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入格式 輸入第1行給出正整數 k 100000 第2行給出k個整數,其間以空格分隔。輸出格式...

時間複雜度 最大子列和問題

給定kk k個整數組成的序列,連續子列 被定義為n i 1 njn jn j 其中 1 i j k1 le i le j le k1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各...