若干演算法例項總結

2021-06-30 16:35:48 字數 1129 閱讀 2200

1. 最大連續子串行

問題及分析: 給定乙個陣列a[n],求a的連續字陣列中,使得該子陣列的和最大,並給出和的值。

方法1: 暴力法,三重迴圈, 時間複雜度o(n^3)

方法2:分治法,可達到o(n*logn) 還不夠好。。。

下面兩種方法均可達到o(n)

o(n)方法 1  分析法: 

思路:一次遍歷求出i的字首和sum[i],

記錄每個i對應的min[i](即sum[0,1 2 ....i-1]中最小的乙個)

submax[i]  = sum[i] - min[i]可求得以每個a[i]結尾的最大子陣列的值 

比較submax[i] 可求得最大值max

注意此時最大值未考慮每個sum[i], 遍歷一遍比較得到真正最大子陣列值

總結:字首和思路很多時候用的上,要考慮到,開拓思路; 注意不要忘記比較sum[i]

pat 

ac **

#include#includeusing namespace std;

int main()

sum[0] = a[0];

submax[0] = a[0];

m[0] = 100000000;

m[1] = sum[0];

max = a[0];

for(int i = 1; i < n;i++)

} for(int i = 0; i < n; i++)

} printf("%d",max);

return 0;

}

o(n) 方法2 :

動態規劃

思路:submax[i] = max(submax[i-1], a[i)) 求最優子問題(以a[i]結尾的最大子陣列和)

動態規劃典型問題

ac **

#includeint main()

submax[0] = a[0];

max = a[0];

for(int i = 1; i < n; i++)

else

if (submax[i] > max)

} printf("%d",max);

return 0;

}

若干常用(內部)排序演算法的總結

實現 中會出現巨集 typedef int datatype define swap a,b 1.插入排序演算法 類似數學歸納法的描述 起始時a beg 的元素位置不變 此時a beg 這乙個元素已經有序 假設a beg a i beg i end 1 已經排好序,對a i 1 a end 依次將a...

貪心演算法總結及例項簡介

基本思想 1.求解最優化問題的演算法包含一系列步驟。2.每一步都有一組選擇。3.作出當前看來最好的選擇。4.希望通過作出區域性優化選擇達到全域性優化選擇。5.貪心演算法不一定總產生優化解。6.貪心演算法是否產生優化解需嚴格證明。貪心演算法產生優化解的條件 1.貪心選擇性 若乙個優化問題的全域性優化解...

若干排序演算法簡單彙總 一

從題目看,首先不是全部是若干。排序演算法很多,我個人的能力也有限,不可能都講到。另外,是簡單彙總,是希望能用最簡單的 最簡短的語言說明問題,不搞太多理論分析。就像前面說的,排序演算法有很多,而且不存在哪一種最不好,哪一種最好這樣的說法。根據用途不同選擇最適合的就行了。不過僅從時間複雜度來看,基本上有...