軟體工程第三次個人作業 - 最大連續子數組和

來源:互聯網
上載者:User

標籤:port   unittest   ada   def   演算法   git   __name__   logs   時間複雜度   

最大連續子數組和(最大子段和)

問題: 給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時定義子段和為0,依此定義,所求的最優值為: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n
例如,當(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)時,最大子段和為20。
-- 引用自《百度百科》

環境
  • 語言: python 3.6

  • 整合式開發環境: PyCharm 2017.3

  • 作業系統: Arch Linux 核心版本 4.15.12

1.窮舉法

Coding

def enumerate_arrays(numbers):    max_sum = numbers[0]    num_len = len(numbers)    for i in range(num_len):        tmp_sum = numbers[i]        max_sum = max(tmp_sum, max_sum)        for j in range(i + 1, num_len):            tmp_sum += numbers[j]            max_sum = max(tmp_sum, max_sum)    return max(0, max_sum)

枚舉所有連續子數組,分別求和,找出最大的和,時間複雜度為\(O(n^2)\)

2.Kadane演算法

Coding

def kadane_solve(numbers):    max_sum = numbers[0]    tmp_sum = 0    for i in numbers:        if tmp_sum < 0:            tmp_sum = i        else:            tmp_sum += i        max_sum = max(tmp_sum, max_sum)    return max(0, max_sum)

如果累加值為負數,用新讀入的值覆蓋累加值,否則繼續累加,時間複雜度為\(O(n)\)

測試案例

Coding

import unittestfrom homework.a.a import enumerate_arraysfrom homework.a.a import kadane_solveclass TestA(unittest.TestCase):    def testEnumerate(self):        num1 = [-2, 11, -4, 13, -5, -2]        num2 = [1, 2, 3]        num3 = [-1, -2]        num4 = [1]        self.assertEqual(enumerate_arrays(num1), 20)        self.assertEqual(enumerate_arrays(num2), 6)        self.assertEqual(enumerate_arrays(num3), 0)        self.assertEqual(enumerate_arrays(num4), 1)    def testKadane(self):        num1 = [-2,  11, -4, 13, -5, -2]        num2 = [1, 2, 3]        num3 = [-1, -2]        num4 = [1]        self.assertEqual(kadane_solve(num1), 20)        self.assertEqual(kadane_solve(num2), 6)        self.assertEqual(kadane_solve(num3), 0)        self.assertEqual(kadane_solve(num4), 1)if __name__ == ‘__main__‘:    unittest.main()

用題目中提供的測試案例和全為正數,全為負數,單個數進行測試

測試結果
  • 在PyCharm中:

,測試通過

  • 在終端中:

鍵入命令:

python -m tests.test_a

,測試通過

軟體工程第三次個人作業 - 最大連續子數組和

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.