第六周學習總結

2021-10-04 18:31:56 字數 1295 閱讀 5702

已經進入到了第六周,我感覺我的水平也在逐步提公升,從一開始的看不懂題到如今能夠做出題來,這說明更多的思考是值得的。而在做題的過程中,我也對動態規劃演算法有了更為深刻的認識。

動態規劃,就是利用歷史記錄,來避免我們的重複計算。而這些歷史記錄,我們得需要一些變數來儲存,一般是用一維陣列或者二維陣列來儲存。

第一步驟:定義陣列元素的含義,上面說了,我們會用乙個陣列,來儲存歷史陣列,假設用一維陣列 dp 吧。這個時候有乙個非常非常重要的點,就是規定你這個陣列元素的含義,例如你的 dp[i] 是代表什麼意思?

第二步驟:找出陣列元素之間的關係式,我覺得動態規劃,還是有一點類似於我們高中學習時的歸納法的,當我們要計算 dp[n] 時,是可以利用 dp[n-1],dp[n-2]…dp[1],來推出 dp[n] 的,也就是可以利用歷史資料來推出新的元素值,所以我們要找出陣列元素之間的關係式,例如 dp[n] = dp[n-1] + dp[n-2],這個就是他們的關係式了。而這一步,也是最難的一步。

第三步驟:找出初始值。學過數學歸納法的都知道,雖然我們知道了陣列元素之間的關係式,例如 dp[n] = dp[n-1] + dp[n-2],我們可以通過 dp[n-1] 和 dp[n-2] 來計算 dp[n],但是,我們得知道初始值啊,例如一直推下去的話,會由 dp[3] = dp[2] + dp[1]。而 dp[2] 和 dp[1] 是不能再分解的了,所以我們必須要能夠直接獲得 dp[2] 和 dp[1] 的值,而這,就是所謂的初始值。

總體來講,我們在做動態規劃時依然會用到歸納的思想,通過這種思想來找到元素之間的關係,從而得到關係式,也就是所謂的動態規劃方程。下面我會用乙個簡單的例題來具體描述操作過程。

乙個機械人位於乙個 m x n 網格的左上角,機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角,問總共有多少條不同的路徑?

步驟一:由於我們的目的是從左上角到右下角一共有多少種路徑,那我們就定義 dp[i] [j]的含義為:當機械人從左上角走到(i, j) 這個位置時,一共有 dp[i] [j] 種路徑。那麼,dp[m-1] [n-1] 就是我們要的答案了。

步驟二:機械人一共有兩種方式可以到達,一種是從 (i-1, j) 這個位置走一步到達,一種是從(i, j - 1) 這個位置走一步到達。因為是計算所有可能的步驟,所以是把所有可能走的路徑都加起來,所以關係式是 dp[i] [j] = dp[i-1] [j] + dp[i] [j-1]。

步驟三:找到初始值,也就是之前學的邊界條件。一共有兩個,一種是dp[0] [0….n-1] = 1,相當於最上面一行,機械人只能一直往左走。一種是dp[0…m-1] [0] = 1,相當於最左面一列,機械人只能一直往下走。

經過這三個步驟,我們即可得出最終的答案。

第六周學習總結

定義乙個指令集體系結構,例如y86,包括定義各種狀態元素 指令集和他們的編碼 一組變成規範和異常事件處理。程式設計師可見的狀態 y86中每條指令都會讀取或修改處理器狀態的某些部分。這裡的 程式設計師 既可以是用彙編 寫程式的人,也可以是產生機器 的編譯器。y86的處理器狀態類似ia32。有8個程式暫...

第六周學習總結

pytorch 本週繼續學習了基本操作,包括tensor的合併與分割 數 算 屬性統計等 另外複習了隨機梯度下降演算法,並通過乙個demo實現了自動求梯度和反向傳播 此外還實現了乙個2d函式的模型構建與優化。pytorch自用筆記 第三週 高階篇 計算機視覺 本週學習了一些cnn框架,包括lenet...

第六周學習總結

scrum 原意是橄欖球,這裡特指一種敏捷開發框架,是乙個增量的 迭代的開發過程。然後講了 自主織團隊 與中國團隊的不同之處還有scrum在需求方面的核心理念,最主要的乙個概念是使用者故事,有關這個概念主持人用了相當一部分時間去講述,下面給大家補充一下使用者故事的標準格式 作為.角色 從使用者的角度...