/*
功能:求最大子列和
日期:2018/7/23
*/#include
#include
#define n 1000
int maxsubsesum(int a, int n);
void main()
,i; for (i = 0; i < n; i++)
a[i] = rand() % 10000;
printf("maxsubsesum=%d\n", maxsubsesum(a, n));
system("pause");
}int maxsubsesum(int a,int n)}}
return maxsum;
}
因為有3重for迴圈,因此時間複雜度為:t(n)=o(n^3),時間複雜度太大,不理想,下面是稍微優化後的。
#include
#include
#define n 1000
int maxsubsesum(int a, int n);
void main()
, i;
for (i = 0; i < n; i++)
a[i] = rand() % 10000;
printf("maxsubsesum=%d\n", maxsubsesum(a, n));
system("pause");
}int maxsubsesum(int a, int n)
}return maxsum;
}
t(n)=o(n^2)
時間複雜度稍微好一點,但還是比較大,程式設計師一般看到時間複雜度是n^2,就會想辦法將其複雜度變為nlogn,因此出現了下面的分而治之法。
/*
功能:求最大子列和(分而治之)
*/#include
#include
#define n 1000
//求三個數的最大值
int max(int a, int b, int c)
//遍歷整個子列求最大值
int maxcross(int a, int left, int mid, int right)
//遍歷從中間到右邊
sum = 0;
for (i = mid + 1; i <= right; i++)
return leftsum + rightsum;
}//分而治之
int divideandrule(int a, int left,int right)
//求中間值
mid = (left + right) / 2;
//對左邊的子列用分而治之法
maxleft = divideandrule(a, left, mid);
//對右邊的子列用分而治之法
maxright = divideandrule(a, mid + 1, right);
//遍歷整個子列
maxmiddle = maxcross(a,left,mid,right);
return max(maxleft, maxright, maxmiddle);
}void main()
, i;
for (i = 0; i < n; i++)
a[i] = rand() % 10000;
printf("divideandrule=%d\n", divideandrule(a, 0, n - 1));
system("pause");
}
/*
*/#include
#include
#define n 1000
void main()
, i;
for (i = 0; i < n; i++)
a[i] = rand() % 10000;
printf("onlineprocess=%d\n", onlineprocess(a,n));
system("pause");
}int onlineprocess(int a, int n)
return maxsum;
}
———————————————————————————-2018.7.23以上是我今天整理的資料結構的一點小小的筆記,以後還會繼續更新^-^ 資料結構 求最大子列和
陳越姥姥已經講得很好了 傳送門,我只做記錄方便回顧。四種演算法 1.暴力,演算法複雜度 o n 3 2.暴力,演算法複雜度 o n 2 3.分治法 遞迴 演算法複雜度 o nlogn 4.及時處理,演算法複雜度 o n includeint a 100000 int whoismax int i,i...
最大子列和(C語言 4種方法)
主函式 呼叫不同的函式,更改這句就ok max maxsubseqsum4 a,n int main return maxsum int maxsubseqsum2 int a,int n return maxsum int max int a,int b,int c int divideandco...
求最大子列和的四種方法
includeint maxsubseqsum2 int a,int n return maxsum int main int i,n scanf d n for i 0 i int max3 int a,int b,int c int divideandconquer int list,int l...