用于对值进行分类的算法

时间:2012-03-30 20:05:06

标签: algorithm graph-algorithm bayesian

解决此问题的最佳算法是什么?我花了几个小时来解决这个问题。但无法解决这个问题。

一个人购买了一条项链,并计划将其分成两块,使每件的平均亮度大于或等于原件。

分割项链的标准是

1.两颗珍珠套装珍珠数量的差异不应大于原项链中珍珠数量的10%或3,以较高者为准。

2.两条项链中珍珠数量的差异应该是最小的。

3.如果任何一条项链的平均亮度小于原始设置的平均亮度,则返回0作为输出。

4.两条项链的平均亮度应大于原始项链,两条项链的平均亮度差异最小。

5.每件的平均亮度应大于或等于原件。

1 个答案:

答案 0 :(得分:0)

这个问题很难有效(在NP的某个地方)。

假设你的平均值为X。也就是X = (x1 + x2 + ... + xn) / n

假设您将其分成平均为ST的集合,每个集合中包含st个项目。

您可以在数学上证明,如果其中一个平均值ST大于X,则两者中的另一个必须小于X

因此,两组必须具有完全相同的亮度,因为这是您的条件可以满足的唯一方式。

知道了这一点,你最终遇到了sumset sum问题 - 你想找到一个总和恰好是整个集合总和的一半的子集。这是一个众所周知的难题。 (它被分类为NP。好吧,它与子集和问题不完全相同,但是如果从每个亮度值中减去全集的平均值,求解子集求和问题就会给你答案。(反过来看看你如何解决问题中的子集和问题。)

因此,没有快速的方法 - 只有近似值或指数运行时间......但是,也许this会有所帮助。如果您的重量(在您的情况下,亮度级别)有限,它会提到更好的运行时间。