Algorithm 关于优化和决策版本的装箱

Algorithm 关于优化和决策版本的装箱,algorithm,optimization,np-complete,np,bin-packing,Algorithm,Optimization,Np Complete,Np,Bin Packing,我正在准备考试,我们得到了一套练习题。这是我正在努力解决的一个问题,我希望有人能帮助我阐明解决这个问题的正确方法: 下面是我对这个问题的初步尝试: 决定版本: 为了使用决策版本找到最佳解决方案,我会尝试使用各种K,直到得到肯定的答案。假设优化的解决方案是7,我会尝试: k=1, no k=2, no k=3, no k=4, no k=5, no k=6, no k=7, yes. 现在我们知道了最优的解决方案是7个箱子,我们通过按大小从大到小对项目进行排序,填充箱子从大到小,然后在箱子上

我正在准备考试,我们得到了一套练习题。这是我正在努力解决的一个问题,我希望有人能帮助我阐明解决这个问题的正确方法:

下面是我对这个问题的初步尝试:

决定版本: 为了使用决策版本找到最佳解决方案,我会尝试使用各种K,直到得到肯定的答案。假设优化的解决方案是7,我会尝试:

k=1, no
k=2, no
k=3, no
k=4, no
k=5, no
k=6, no
k=7, yes. 
现在我们知道了最优的解决方案是7个箱子,我们通过按大小从大到小对项目进行排序,填充箱子从大到小,然后在箱子上循环,直到它们不再是集合中的元素

如果我们有一个最优解决方案,并且我们想要解决决策版本,我会获取最优解决方案返回的箱子数量,然后在决策版本上运行它,看看它是否返回yes

我以前从来没有见过这样的问题,所以我不确定正确的格式应该是什么


任何帮助都将不胜感激

有一种更好的方法来解决基于决策问题的优化问题,请注意,您的解决方案在输入大小上是指数的(伪多项式,但仍然是指数的),因为如果您有一个算法在决策问题上运行在
T(n)
中,建议的解决方案在
O(k*T(n))中运行
,但由于
k
实际上是输入大小的指数(您只需要
log(k)
位来表示它),因此您有一个指数级的运行时间

但是,您可以对问题应用二进制搜索,并且只需要调用决策问题的算法来解决优化问题

现在,如果p=NP,且该算法(用于解决决策问题)存在于多项式时间
O(p(n))
,则优化问题将在输入大小为多项式的
O(p(n)*log(k))
中求解

二进制搜索将进行如下操作:

k <- 1
while decision_bin_packing(G,k) == false:
    k <- k * 2
perform binary search for the smallest value t in [k/2,k] such that decision_bin_packing(G,t)==true

k感谢您的回复。我将如何在解决方案中使用我的二进制搜索语句?所以现在我知道这个解决方案有7个箱子,我会在什么列表上运行二进制搜索,寻找什么值?@KrispyK-See-edit试图对此进行详细说明。二进制搜索的实际实现相当简单。