我正在努力解决以下问题:
给定n
个整数,将它们放入m
个bin中,以便最小化所有bin中的总和。诀窍是,一旦将数字放入垃圾箱,垃圾箱的总重量/成本/总和将以非标准方式计算:
weight_of_bin = Sigma - k * X
其中Sigma
是bin中整数的总和
k
是bin中的整数数
X
是位于bin中的整数具有共同点的素数的除数。
换句话说,通过将具有许多主要除数的数字组合在一起,并通过在不同的区间中放置不同数量的数字,我们可以在总和中实现一些“节省”。
我使用bin-packing配方,因为我怀疑问题是NPhard但我找不到证据。我不是一个数论理论家,并且对于箱子的重量取决于箱子中物品的事实感到困惑。
此类问题是否有硬度结果?
P.S。我只知道数字是整数。对问题中涉及的最大整数没有明确的限制。
感谢您提供的任何指示。
答案 0 :(得分:0)
这不是一个完整的答案,但希望它能给你一些思考的东西。
首先,通过澄清:你对整数的主要除数有什么了解?找到问题输入中整数的所有主要除数很难实现。因素分解不是NP完全的,但它也不知道在P中。如果你还不知道输入的分解,那可能足以使这个问题变得“难”。
一般来说,我认为这个问题至少和装箱一样困难。显示这一点的一个简单参数是,给定的整数都不可能具有任何公共的除数(例如,如果给出一组不同的素数)。在这种情况下,由于箱的重量仅为标准重量,因此问题减少到标准箱装箱。如果你能保证可能有多少常见的除数,你可能会做得更好,但可能不是一般的。
有一种bin打包的变体,称为VM packing(基于根据内存要求打包虚拟机的想法),允许对象共享空间(例如共享虚拟内存页)。你的目标函数,你根据“共享”素数除数减去一个术语,这让我想起了这一点。即使在VM包装的情况下,问题也是NP难的。如果共享具有良好的层次结构,则存在良好的近似算法,但它们仍然只是近似值。