求最大子串行的線性時間複雜度的解法的理解

2021-07-05 03:07:23 字數 639 閱讀 1342

今天在看《c++語言描述(第3版)_mark allen weiss》時,看到 第二章的四種求解最大子串行的方法,對於第四種解法,書上有言:「這是許多聰明演算法的典型:執行時間是明顯的,但正確性則不明顯。對於。。。;然而即便如此許多仍然不信服。」 好吧,這句話激起了我的興趣。

//最大子串行必然是序列中間的一部分:去掉序列的頭部啊和尾部b,且知道,去掉的兩部分必定小於0. 那麼問題來了,中間這部分怎麼找?

int maxsubsum4( const vector& a )

}

演算法的好處:只對資料進行一次掃瞄,一旦 a[i] 被讀入並被處理,它就不需要被記憶,更棒的是:在任意時候演算法都能對它已經讀入的資料給出子串行問題的正確答案,具有這種特性的演算法叫做聯機演算法(on-line algorithm)

我對這種解法的解釋:

我們不妨採取逆向理解:假設我們已經找到了乙個數列的 最大 子串行 a[m]...........a[n]  (n >m) , 在此序列的字首或是字尾,如果有不為負(也不為零)的子串行存在,則最大子串行的和將會增加,則與我們已經找到最大子串行矛盾,同時這裡也向世人證明一條定理:最大子串行的字首或是字尾子串行都不為正!

求最大子串行的和O(n)演算法複雜度

題目 輸入一組整數,求出這組數字子串行和中的最大值,只要求出最大子串行的和,不必求出最大值對應的序列。最大子串行和 整數序列a1,a2,an 可能有負數 求a1 an的乙個子串行ai aj,使得ai到aj的和最大。例如 序列 2,11,4,13,5,2,5,3,12,9,則最大子串行和為21。序列 ...

時間複雜度和最大子串行問題

執行時間計算 法則1 for迴圈 乙個for迴圈的執行時間最多是該for迴圈內部那些語句 包括測試 的執行時間乘以迭代的次數。法則2 巢狀的for迴圈 從裡向外分析這些迴圈,在一組巢狀迴圈內部的一條語句的執行時間為該語句的執行時間乘以該組所有的for迴圈的大小的乘積。法則3 順序語句 將各個語句的執...

最大子串行和O(n)階複雜度演算法

問題描述給定整數序列a1,a2,a3,a4,a5,求 ai a i 1 aj 的最大值 int mostson int arryin,int len else return most 演算法解釋 確定子串行最大值得關鍵點在於確定序列開始位置和結束位置。開始位置難以確定,確定開始位置之後每加乙個數字的...