為自己Coding
為自己Coding

YO~~ 剛跨入AI人工智慧領域的小小工程師, 熱愛自學, 熱愛分享, 下班後的我想為自己Coding, 積極撰寫教學文, 想將自學的程式知識分享給大家, 不斷追求進步的自己, 希望有一天能回饋社會,幫助需要幫助的人, 如果您有什麼很酷的想法,也覺得我還行,歡迎您找我合作~~ IG: https://www.instagram.com/coding_4_me/

LeetCode學習筆記 - 動態規劃 Dynamic Programming - 觀念介紹

Github連結

攝影師:Janez Podnar,連結:Pexels


1. Dynamic Programming 是什麼?


  • 動態規劃,又稱為DP
  • 透過把原問題切成多個相對簡單處理的子問題,來解決複雜問題的一種方法
  • Dynamic Prgramming = 切割和征服(計算、處理)+ 記憶(存儲): 動態規劃的執行過程,就是不斷地讀取數據、處理數據,和存儲數據


2. 解決的問題


  • 目標結果不容易透過簡單地直接計算來處理,但走到第n步的結果(也就是後面的結果),可以使用前面的結果來表達呈現,不是從一開始就能像推骨牌一樣,一路計算到結果
  • 動態規劃所解決的問題,前面的關聯性非常低,與可以直接透過一層一層遞進的問題不太一樣
  • 最開始的結果可以直接取得,通常都具有很明確的條件,像是如果sum(N): 1+2+..N,我們帶入sum(1) = 1,可以很明確地得到最開始的那個結果
  • 通常透過遞迴(Recursion)或迴圈來完成


3. 適用範圍


  • 當我們的目標問題可以拆成多種或一種重複的子問題
  • 需要將子問題所解出來的結果儲存並重複地使用它們
  • 子問題的解應該要是不可變動的,才能重複使用,不然都要重新計算會造成計算複雜度提升



Reference

https://zh.wikipedia.org/wiki/动态规划

http://web.ntnu.edu.tw/~algo/DynamicProgramming.html

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论