最大子段和問題實驗報告_第1頁
最大子段和問題實驗報告_第2頁
最大子段和問題實驗報告_第3頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實驗四最大子段和問題1掌握動態(tài)規(guī)劃的設計思想并能熟練運用;2理解這樣一個觀點:同樣的問題可以用不同的方法解決,一個好的算法是反復努力和 重新修正的結果;1分別用蠻力法、分治法和動態(tài)規(guī)劃法設計最大子段和問題的算法;2比擬不同算法的時間性能;3給出測試數(shù)據(jù),寫出程序文檔;3. 實驗設備和軟件環(huán)境操作系統(tǒng): Windows 7 64x開發(fā)工具:Visual Studio 20224. 實驗步驟以下實驗數(shù)據(jù)都是以數(shù)組 a=-2, 11, -4, 13, -5, -2為例子;蠻力法蠻力法是首先通過兩個for循環(huán)去求出所有子段的值,然后通過if語句查找出maxsum返回子序列的最大子段和;分治法(1) 劃

2、分:按照平衡子問題的原那么,將序列a1, a2,,an劃分成長度相同的兩個子序列a1, a2, ., an/2和an/2+1,ad ;(2) 求解子問題:對與劃分階段的情況和可遞歸求解,情況需要分別計算s1=maxE ;= ak(1=i=n/2),s2=max 刀=n+1 ak (n/2+1=j0 時,bj=bj -1+aj。2、當 bj-10 時,bj=aj然后做遞歸操作求出最大子段和;5. 實驗結果蠻力法#in elude #in elude using namespaeestd;/* */int manlifa( int a, int x)int i, j,sum=0,maxsum=0;

3、for (i = 0; i x; i+)for (j = i+1; j sum)sum = ai;if(summaxsum)maxsum = sum;int main()int y,sum;int a = -20, 11, -4, 13, -5, -2 ;int c = sizeof (a)/ sizeof (int );sum = man lifa(a, c);cout y;return 0;分治法#in clude#in cludeusing namespacestd;int MaxSum(nt a, int left , int right )int sum = 0, midSum =

4、0, leftSum = 0, rightSum = 0;int center, s1, s2, lefts, rights;if ( left = right )sum = a left ;elsecenter = ( left + right ) / 2;leftSum = MaxSum( a, left , center);rightSum = MaxSum( a, center + 1, right ); s1 = 0;lefts = 0;for ( int i = center; i =left ; i-)lefts +=ai;if (lefts s1) s1 = lefts;s2

5、= 0;rights = 0;for ( int j = center + 1; j s2) s2 = rights;midSum = si + s2;if (midSum leftSum) sum = leftSum;elsesum = midSum;if (sum rightSum) sum = rightSum;return sum;int main()/*i nt sum;/int a = -20, 11, -4, 14, -5, -2 ;sum1 = MaxSum(a, 0, 5);cout sum1 en dl;*/int j,n;int b100;cout n;cout 請輸入序

6、列子段.1!. )for (j = 0;j n; j+)sum = MaxSum(b, 0, 5); cout sum i;return 0;動態(tài)規(guī)劃法#in elude using namespacestd;int MaxSum(nt n, int * a)int sum = 0, b = 0;for ( int i = 1; i = n; i+) sum = b;return sum;int a = -2, 11, -4, 13, -5, -2 ;for ( int i = 0; i6; i+) cout ai cout en dl;cout 數(shù)組a的最大連續(xù)子段和為: MaxSum(6, a) k;return 0;6. 討論和分析在一開始做最大子段問題的實驗的時候, 對于蠻力法和分治法的理解還是可以的, 但是對于 動態(tài)規(guī)劃法的理解還不是那么明確透徹, 通過網(wǎng)上的一些解釋和結合自己書本上的知識, 對 動態(tài)規(guī)劃法得到了進一步的理解,接下來是三種算法時間性能的比擬:蠻力法:時間復

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論