好的......所以我有点棘手(对我来说,至少)。
我有一个简单对象列表,我需要弄清楚如何找到一个使用最大数字的组合。这些对象的每个类都有一个属性(字符串)作为其名称,一个属性(List)用于其他元素的名称,他们喜欢用它们键合,一个属性(List)用于其他元素的名称,用于它们不喜欢结合。
如果元素被添加到集合中,其中该特定元素“喜欢”集合中已有的其他元素中的一个(或多个),则添加的元素将为其喜欢的集合中的每个项目返回+1分数。同样,对于添加的元素不喜欢的集合中的每个其他元素,返回-1的分数。将所有元素添加到最终集合后,每个元素的分数必须为> = 0。
我如何找到可以使用的元素组合将返回最大的集合?如果多个组合返回相同数量的元素,则应返回所有可能的组合。
我希望这是有道理的......另外,我使用的是C#(.NET 4.0),但可以使用任何编程语言,我只需要弄清楚它背后的逻辑。
提前致谢,
桑尼
答案 0 :(得分:2)
我认为你说这是一个棘手的问题是正确的。我认为对象是图形中的节点,而类似/不喜欢信息为节点之间的链接赋予权重。忽略“喜欢”字段并给出所有链接权重0或权重-1。在这种情况下,您的问题是找到最大节点数,使得它们之间的所有链接都具有权重0,并且它们都没有权重-1。假设您有一个程序来有效地执行此操作。
现在看看问题http://en.wikipedia.org/wiki/Clique_problem,这是一个已知的难题。如果您遇到max clique问题,请在所有节点之间创建链接。如果两个节点在max clique中链接,则权重为0.如果链接不存在,则使权重为-1。现在运行一个程序来解决你的问题,你已经解决了max clique。所以我认为你的问题是NP-Complete,并且不太可能成为一个有效的解决方案。