【发布时间】:2023-04-02 19:43:01
【问题描述】:
我是算法新手,目前正在使用 YouTube 视频教程/讲座和一本书进行学习,我首先观看视频,然后阅读本书,最后尝试书中的一个问题,以确保我已经学习了该主题正确。我目前正在使用贪婪算法,这非常令人困惑。
书中有各种各样的问题,但我无法理解和回答特定的问题。
首先它给出的问题是(我刚刚复制了文本)。
有一组 n 个大小为 {x1; x2;..... xn} 和一个带有 容量 B。所有这些都是正整数。尝试找到这些对象的子集 使它们的总大小小于或等于 B,但尽可能接近 B。
所有对象都是一维的。例如,如果对象的大小为 4、7、10、12、15 和 B = 20,那么我们应该选择 4 和 15,总大小为 19(或等效地,7 和 12)。 对于以下每个贪心算法,通过创建它们来证明它们不是最优的 一个反例。尝试使您的示例尽可能糟糕,其中“不良” 由最优解和贪婪解之间的比率来衡量。因此,如果最好 解的值为 10,贪心解的值为 5,则比率为 2。
我该如何做以下事情?
1) 始终选择尺寸最大的对象,以便此和所有的总尺寸 其他已选择的对象不超过 B。对其余对象重复此操作。
【问题讨论】:
-
我试图创建一个修改后的“prims 算法”来解决这个问题,但它非常混乱而且可能不正确。
-
Prim 的算法在图中构建了一个生成树。也许您想解释一下这个算法如何适用于手头的问题。