动态编程算法

时间:2016-06-15 23:59:44

标签: algorithm dynamic-programming

我在作业上有以下问题 enter image description here

我不知道如何解决B部分(至少使用动态编程算法),因为据我所知,N天的最佳成本与N-1天的最佳成本无关。我不是在寻找有人为我做功课(我知道这里不赞成),但只是为了一些指导,从哪里开始,或者将其分成什么子问题。谢谢!

1 个答案:

答案 0 :(得分:0)

我喜欢你很谦虚所以我试图在这里提供一些提示......也请尝试使用纯文本,用你自己的话来简化问题,如果可以,下次:)欢迎来到社区。

b部分的问题陈述已经给出了一个很好的提示:使用2D数组来存储状态。这是因为它不足以知道一周 i-1 的最佳解决方案(这是贪婪的,你应该在第一部分回答它),这意味着我们必须知道除了周数之外的其他东西,这是第二个维度。

因此,让我们开始思考可能的二维方式,它们代表什么以及如何使用它们来找到我们的最佳答案。在这里,我介绍了自己关于DP问题的思考过程,它几乎填补了空白游戏。

思维过程

直观地说,一个维度必须是 i 的一周,因此它可能取决于前几周 i-1,i-2 ......等等

因此,让 D(i,?)成为2D状态,它代表我们必须支付的最低费用 i

这是说 D(i,?)=直至第i周的最低费用,xxx为yyy

什么是 xxx,yyy 公司X和当前公司的使用情况怎么样?让它适合它,看它是否有意义(这是我的思考过程,通过经验进行大量试验和错误,看看哪一个似乎是正确的)

  

D(i,X):=直到第i周的最低成本,公司X是当前使用的公司

更严重的逻辑思维(TL; DR)

好像没有?

所以我们有一个2D状态D(i,X),它可以用2D数组D [52] [3]来表示。

  

现在我们已经改变了问题

     

从最低成本到第一周我是什么时候?

     

到使用公司X作为最后一周的最低成本是多少   公司用过?

对于Simplicity,我将在下面使用D(i,A),D(i,B)和D(i,C)作为符号。

如果我们已经知道 i-1 的最佳解决方案使用特定公司,那么我们可以计算当前周 i 最佳解决方案。

这是因为它只考虑所有情况,相互排斥。在所有情况下,我的意思是无论哪一周,你都必须使用这三家公司中的一家。

它具有所谓的 optimal substructure 属性:例如,计算D(i,A),D(i-1,A),D(i)的最佳路径如果需要,包括惩罚的-1,B),D(i-1,C)必须给出D(i,A)的最优解。因为如果有一些路径 i-1 不是最佳的(无论哪家公司),我总是可以选择另一条最优的路径,并用它来计算D(i,A)哪个一定更好。

请注意,如果我们不考虑第二个维度当前公司,原始问题将没有此属性,因此贪婪不能直接解决。

使用另一个名为overlapping subproblems的属性,现在我们的新问题可以通过动态编程来解决。

当我们解决新问题时,我们可以使用新问题的解来解决我们原来的问题: Ans = Max(D(52,A),D(52,B),D(52) ,C))

回到家庭作业

好的,所以我在这里给你一些补充空白游戏,这可能有助于你完成这个问题。

  1. 将D(i,X)定义为____________________
  2. 基本情况D(0,X)是____________
  3. 答案是Max(____,____,____)
  4. D(i,A)= min(_____,_____,_____)+ a [i]其中a [i]是_________
  5. D(i,B)= min(_____,_____,_____)+ b [i]其中b [i]是_________
  6. D(i,C)= min(_____,_____,_____)+ c [i]其中c [i]是_________
  7. 填写所有这些,你很好。