1. 程式人生 > 其它 >第三章上機報告

第三章上機報告

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

1.1 問題描述

  一個商人穿過一個N×N的正方形的網格,去參加一個非常重要的商務活動。他要從網格的左上角進,右下角出。每穿越中間1個小方格,都要花費1個單位時間。商人必須在(2N-1)個單位時間穿越出去。而在經過中間的每個小方格時,都需要繳納一定的費用。

  這個商人期望在規定時間內用最少費用穿越出去。請問至少需要多少費用?

注意:不能對角穿越各個小方格(即,只能向上下左右四個方向移動且不能離開網格)。

1.2 演算法描述

  使用動態規劃求解,輸入二維陣列,令其首行首列為9999以避免選擇到首行首列,令其向右或向下更新陣列,如Arr[i][j]將與arr[i-1][j]或arr[i][j-1]相加比較大小來選擇從哪走,最後輸出ajj[n][n]

1.3 問題求解:

1.1.1 根據最優子結構性質,列出遞迴方程式

  當只有一個方格時,arr[1][1]

  其他:arr[i][j]=min{arr[i-1][j],arr[i][j-1]}+arr[i][j]

1.1.2 給出填表法中表的維度、填表範圍和填表順序。

  二維,陣列arr[n][n],從左往右從上往下

1.1.3 分析該演算法的時間和空間複雜度

  O(n^2)

  T(n^2)

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

  起初想要設定一個變數記錄時間後來發現只要保證一直往下往右就不會超出時間。還有就是要考慮邊界條件,以及初始化

2. 你對動態規劃演算法的理解和體會

  動態規劃滿足最優子結構和重疊子問題兩個特徵,需要我們找到問題的遞迴方程來求解。往往需要建立一個或多個數組,為了避免重疊子問題的多次計算。