解决此问题的最佳算法是什么?我花了几个小时来解决这个问题。但无法解决这个问题。
一个人购买了一条项链,并计划将其分成两块,使每件的平均亮度大于或等于原件。
分割项链的标准是
1.两颗珍珠套装珍珠数量的差异不应大于原项链中珍珠数量的10%或3,以较高者为准。
2.两条项链中珍珠数量的差异应该是最小的。
3.如果任何一条项链的平均亮度小于原始设置的平均亮度,则返回0作为输出。
4.两条项链的平均亮度应大于原始项链,两条项链的平均亮度差异最小。
5.每件的平均亮度应大于或等于原件。
答案 0 :(得分:0)
这个问题很难有效(在NP的某个地方)。
假设你的平均值为X
。也就是X = (x1 + x2 + ... + xn) / n
。
假设您将其分成平均为S
和T
的集合,每个集合中包含s
和t
个项目。
您可以在数学上证明,如果其中一个平均值S
或T
大于X
,则两者中的另一个必须小于X
。
因此,两组必须具有完全相同的亮度,因为这是您的条件可以满足的唯一方式。
知道了这一点,你最终遇到了sumset sum问题 - 你想找到一个总和恰好是整个集合总和的一半的子集。这是一个众所周知的难题。 (它被分类为NP。好吧,它与子集和问题不完全相同,但是如果从每个亮度值中减去全集的平均值,求解子集求和问题就会给你答案。(反过来看看你如何解决问题中的子集和问题。)
因此,没有快速的方法 - 只有近似值或指数运行时间......但是,也许this会有所帮助。如果您的重量(在您的情况下,亮度级别)有限,它会提到更好的运行时间。