如何使用堆数据结构解决分数背包?

时间:2015-12-13 07:18:06

标签: algorithm

如果我使用利润/权重的值并将build-Max-heap应用于这些值,那么我将按顺序(n)获得最大堆,现在混淆是如何删除 - 自从之后的最大值我删除了最大值,我将如何知道与堆中存储的节点相关的权重和利润,因为堆只存储与利润/权重相关的值。

因此,要进行进一步的计算,例如减少背包的容量并将利润值添加到已经获得的利润值,我将如何进行这些计算?

1 个答案:

答案 0 :(得分:0)

我假设您正在使用'int'类型的数组用于构建最大堆。 相反,你可以做的是使用'struct'类型的数组(如果你使用的是C),如下所示。

struct items {
   int profit_by_weight;
   int weight;
};

使用'profit_by_weight'的值构建最大堆(如果您是初学者,则有点棘手) 并在从堆中访问项目时使用权重值来执行所需的计算。