以下情况{44}中贪婪算法失败的原因

时间:2017-11-22 05:44:46

标签: algorithm dynamic-programming greedy

我尝试解决一个声称只能使用动态编程解决的问题。以下是问题所在。 一个人的总能量为H,他需要覆盖距离D.他希望在最短时间内使用最大能量达到这个距离。他可以运行5种模式。根据5种模式中的一种运行每公里可以覆盖总距离。 这两种模式使用两个已排序的数组进行描述

时间: - ' 5分10秒' 6米11秒' 7米7秒' 8米11秒',' 8米11秒' #39; 9米11秒'

所需能源:-11,9,8,7,6

所以我贪婪的解决方案策略是

  1. 计算x = H / D的楼层
  2. 使用模式运行下一个km,该模式花费最少的时间并且需要能量< = x

    &安培;设置H =模式所需的H-能量

    设置D = D-1

  3. 转到第1步,直到剩余距离变为0。

  4. 每公里都会回答一些问题。
  5. 我认为这个解决方案可行,但实际上却失败了。我知道如何使用DP解决它,但我想知道它失败的地方。我尝试过很多例子但没有感觉到。我不记得上面两个数组元素,但它们必须按排序顺序。

1 个答案:

答案 0 :(得分:1)

原因很简单;您尚未证明您的算法,因此您无法声称它是正确的。就那么简单。您是否知道研究文献中有多少启发式算法"外观"没错,但他们没有正确的证明。因此,为什么他们只是启发式。

您的解决方案是启发式的。举个例子。拿H=100, D=3。同时将模式设为时间[1,2,3,4,5],将相应的能量设为[35,34,32,32,32]

您的初始xfloor(100/3)=33。能量<=33的最低时间是3。选择它。更新H和D,使H=67, D=2。我们有floor(67/2)=33。再次,选择时间3。更新H和D,使H=34, D=1。最后x=floor(34/1)=34选择时间2。因此,覆盖距离的时间列表为[3,3,2],总能量为32+32+34=98,总时间为8

然而,我能提出比你贪婪的解决方案更好的解决方案。即[1,3,4]时间8单位时间但总能量35+32+32=99。打败你贪婪的解决方案。

故事的道德?如果你不能证明你的算法,假设它是错误的,或者只是一个启发式算法。