[アルゴリズム] 動的計画法 - 理論的基礎

タイトル 動的プログラミングに関するよくある質問

動的計画法の基礎(フィボナッチ数列、階段の上り下り)、ナップザック問題、住宅強盗、株式問題、部分数列問題

動的プログラミングの 5 つの部分

  1. 状態転送のプロセスにおける dp 配列の意味と次の表。
  2. 再帰式を見つけます。
  3. dp 配列を初期化する方法。
  4. 走査順序。
  5. dp 配列を出力します (コンテンツのチェックに役立ちます)

考慮すべき状況は他にもあります。
「ローリング配列思考」は一般的な動的プログラミング最適化手法であり、「オファーを指す剣 46. 数値を文字列に変換する」、「70. 数値を文字列に変換する」などのトピックで何度も使用されています。私たちが定義する状態は、動的計画法の遷移方程式の少数の状態にのみ関連しているため、この最適化手法は、空間の複雑さに対する「次元の削減」を目的として考えることができます。「ローリング アレイ思考」が何なのかわからない場合は、必ず関連情報を参照して学習してください。

ここに画像の説明を挿入

動的プログラミングの定義と区別

动态规划,英⽂:Dynamic Programming,简称DP,如果某⼀问题有很多重叠⼦问题,使⽤动态规划是最有效的。
所以动态规划中每⼀个状态⼀定是由上⼀个状态推导出来的,这⼀点就区分于贪⼼,贪⼼没有状态推导,⽽是从局
部直接选最优的,
在关于贪⼼算法,你该了解这些!中我举了⼀个背包问题的例⼦。
例如:有N件物品和⼀个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物
品只能⽤⼀次,求解将哪些物品装⼊背包⾥物品价值总和最⼤。
动态规划中dp[j]是由dp[j-weight[i]]推导出来的,然后取max(dp[j], dp[j - weight[i]] + value[i])。
但如果是贪⼼呢,每次拿物品选⼀个最⼤的或者最⼩的就完事了,和上⼀个状态没有关系。
所以贪⼼解决不了动态规划的问题。
其实⼤家也不⽤死扣动规和贪⼼的理论区别,后⾯做做题⽬⾃然就知道了。
⽽且很多讲解动态规划的⽂章都会讲最优⼦结构啊和重叠⼦问题啊这些,这些东⻄都是教科书的上定义,晦涩难懂
⽽且不实⽤。
⼤家知道动规是由前⼀个状态推导出来的,⽽贪⼼是局部直接选最优的,对于刷题来说就够⽤了。

おすすめ

転載: blog.csdn.net/qq_40500099/article/details/132562799
おすすめ