贪心算法

时间:2012-03-06 18:11:23

标签: algorithm greedy

我是算法的新手,我正在学习使用你的管视频教程/讲座和书,我首先观看视频,然后阅读书籍,最后尝试书中的问题,以确保我已经学习了这个主题正确。我目前正在贪婪算法,这非常令人困惑。

在书中有各种各样的问题,但我无法理解和回答某一个问题。

首先它给出的问题是(我刚刚复制了文本)。

有一组n个大小为{x1的对象; x2; ..... xn}和一个bin 能力B.所有这些都是正整数。尝试找到这些对象的子集 这样它们的总大小小于或等于B,但尽可能接近B.

所有物体都是一维的。例如,如果对象的大小为4,7,10,12,15和 B = 20,那么我们应该选择4和15,总大小为19(或等效地,7和12)。 对于以下每种贪婪算法,通过创建表明它们不是最佳的 一个反例。试着让你的例子尽可能地糟糕,“糟糕” 通过最优和贪婪解决方案之间的比率来衡量。因此,如果最好的 解决方案的值为10,贪婪的解决方案的值为5,则比率为2。

如何执行以下操作?

1)始终选择具有最大尺寸的物体,以便这个和所有物体的总大小 已选择的其他对象不超过B.对剩余的对象重复此操作。

2 个答案:

答案 0 :(得分:1)

假设出现以下问题:

您有一个方框2n,一个大小为n+1的元素,其余大小为n

很容易看出最优是2个元素n,而贪婪会得到一个大小为n+1的元素。

由于每个n都是如此,它实际上为您提供了至少使用这种贪婪方法2所需的比例。

答案 1 :(得分:0)

这听起来类似于0-1背包问题,其中每个项目具有不同的大小但是具有相同的值,这意味着任何一个项目都没有任何偏好被放置到除了其大小之外的箱子中。在您的代码中,您需要检查每个项目并计算最大总大小,以确定是否将其放入垃圾箱而不超过垃圾箱的容量。