首页 >后端开发 >C++ >如何检索背包算法最优解中包含的具体项?

如何检索背包算法最优解中包含的具体项?

Barbara Streisand
Barbara Streisand原创
2025-01-01 12:03:11154浏览

How Can I Retrieve the Specific Items Included in the Optimal Solution of the Knapsack Algorithm?

从背包算法中检索元素

背包算法有效地确定从一组具有约束的项目中可实现的最佳值。但是,它只提供总值,而没有指定哪些项目对其有贡献。

要获取最佳解决方案中包含的特定元素,请按照算法中的以下步骤操作:

for (size_t j = 1; j <= n; j++)
{
    for ( int w = 1; w <= W; w++)
    {
        ...
        if (dp[w][j] != dp[w][j-1] && dp[w][j] == dp[w - items[j-1].getWeight()][j-1] + items[j-1].getWeight())
        {
            // Mark element 'j' as included in the solution
        }
    }
}

此步骤将当前值与之前的值进行比较,确定项目何时添加到解决方案中。所选元素使连续值之间的差等于其权重。

或者,执行算法后,您可以反向遍历矩阵以确定所选项目:

int line = W;
int i = n;
while (i > 0):
    if (dp[line][i] - dp[line - weight(i)][i-1] == item[i].getValue()):
        // Item 'i' is in the solution
        i--;
        line -= weight(i);
    else:
        i--;

这种方法有效地检索有助于最佳解决方案的元素,从而提供对问题解决方案的更全面的了解。

以上是如何检索背包算法最优解中包含的具体项?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn