演算法第二章實踐報告

2022-07-26 12:45:11 字數 640 閱讀 8098

1.實踐題目名稱:最大子列和問題

2.問題描述:給定k個整數組成的序列,「連續子列」被定義為,其中 1≤i≤j≤k。「最大子列和」則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。

3.演算法描述:

通過分析,很容易發現最大子串行和只有三種情況:

出現在陣列的左半部分

出現在陣列的右半部分

出現在陣列的中間部分,橫跨左右兩部分

而且對於左半部分或者右半部分,上述結論也成立。

利用這特性,可以寫出相應的遞迴,遞迴結束的條件是當只有乙個元素時,判斷這個元素是否大於零,大於零便返回這個數,否則返回零。

然後求出左邊最大值,右邊最大值和橫跨兩邊的最大值,返回這三個值中的最大值。

4.演算法時間及空間複雜度分析:設總的時間複雜度為t(n),分成兩份每邊都是t(n/2),還要加上算跨越分界線部分o(n)(表示每乙個元素都掃瞄了一遍,即n的常數倍,每一次求跨越邊界的子列都要掃瞄左右兩邊的元素,每個元素多會掃瞄一遍以上)設分k次遞迴終止,則k =logn, 左右兩邊相等。t(1)=o(1),k =logn,   ckn=cnlogn=o(nlogn)。

當兩個複雜度在一起時我們取大的那個o(nlogn),

演算法第二章實踐報告

本章總共上機兩次。首先是最大子列和的問題。剛看到這道題目的時候,只是會想到用那種前面一直加然後再比較的想法,這種思想十分複雜。在老師的說明下,了解到用二分的方法,分別找出左邊和右邊的最大值,然後再看是否跨界的為最大。其實也算是一種子問題的劃分。第一次演算法上機的時候,我和同伴都是慌張的。以前上機的話...

演算法第二章上機實踐報告

實踐題目名稱 找第k個小的數 問題描述 設計乙個平均時間為o n 的演算法,在n 1 n 1000 個無序的整數中找出第k小的數。演算法描述 就是先假設a left 為這個分界值x,然後排序。比較x是不是第k個如果是,返回這個值。如果不是比較一下x和a k 的大小,如果xa k 遞迴在x的右邊找 演...

演算法第二章上機實踐報告

7 1 最大子列和問題 20分 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資...