演算法第二章作業 實驗報告

2022-08-03 03:42:12 字數 1416 閱讀 4231

實踐報告任選一題進行分析。內容包括:

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

問題描述:

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

本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下:

資料1:與樣例等價,測試基本正確性;

資料2:102個隨機整數;

資料3:103個隨機整數;

資料4:104個隨機整數;

資料5:105個隨機整數;

輸入格式:

輸入第1行給出正整數k (≤);第2行給出k個整數,其間以空格分隔。

輸出格式:

在一行中輸出最大子列和。如果序列中所有整數皆為負數,則輸出0。

演算法描述

利用分治法。將區間以中間為基準一分為二,將最大子列和問題劃分為左區間、右區間、橫跨左右區間的最大子列和問題。其中左右區間可以通過遞迴完成,中間的最大子列和要另外處理。

遞迴:函式+判斷語句;  基例+鏈條

3.演算法時間及空間複雜度分析(要有分析過程)

時間複雜度:

將n劃分成  k個問題。

t(n) = { o(1)   , n<=c

{2t(n/2) + o(n)  ,n>c

解得t(n) = o(nlogn) 

空間複雜度: o(n) 用於儲存輸入資料。

心得體會(對本次實踐收穫及疑惑進行總結)

一開始對分治法理解不夠,遞迴的思想沒加入到分治法裡面。

僅僅是將原問題一分為二,而不是遞迴的一分為二。

於是就寫出了如上的fun函式,求解左半邊的max和右半邊的max。

what  a joke.

後來刪掉fun,將原來的maxnum函式改成遞迴函式,問題迎刃而解。

這就是分治法嗎?i了i了。

運用和掌握乙個演算法的過程有些曲折,用題目來鞏固這種演算法思想,體驗很好。

演算法第二章實驗報告

7 1 二分查詢 輸入n值 1 n 1000 n個非降序排列的整數以及要查詢的數x,使用二分查詢演算法查詢x,輸出x所在的下標 0 n 1 及比較次數。若x不存在,輸出 1和比較次數。輸入共三行 第一行是n值 第二行是n個整數 第三行是x值。輸出x所在的下標 0 n 1 及比較次數。若x不存在,輸出...

第二章實驗報告

實踐題目名稱 找第k小的數 1.問題描述 設計乙個平均時間為o n 的演算法,在n 1 n 1000 個無序的整數中找出第k小的數。輸入格式 輸入有兩行 第一行是n和k,0第二行是n個整數 輸出格式 輸出第k小的數 輸入樣例 在這裡給出一組輸入。例如 10 4 2 8 9 0 1 3 6 7 8 2...

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

實驗報告 1 實踐題目 pta第二題,改進二分搜尋演算法 2 問題描述 設a 0 n 1 是已排好序的陣列,請改寫二分搜尋演算法,使得當x不在陣列中時,返回小於x的最大元素位置i和大於x的最小元素位置j。當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置。3 演算法描述 整體框架 1 首先,還是...