【发布时间】:2011-12-11 23:47:45
【问题描述】:
好的...所以我有一个棘手的问题(至少对我来说)。
我有一个简单对象的列表,我需要弄清楚如何找到利用最大数量的组合。这些对象的类中的每一个都有一个属性(字符串)作为它们的名称,一个属性(列表)用于它们喜欢与之结合的其他元素的名称,以及一个属性(列表)用于它们所使用的其他元素的名称不喜欢结交。
如果一个元素被添加到一个集合中,并且该特定元素“喜欢”该集合中已有的一个(或多个)其他元素,则添加的元素为该集合中它喜欢的每个项目返回 +1 的分数.同样,对于添加的元素不喜欢的集合中的每个其他元素,都会返回 -1 的分数。将所有元素添加到最终集合后,每个元素的分数必须 >= 0。
我将如何找到可以返回最大集合的元素组合?如果多个组合返回相同数量的元素,则应返回所有可能的组合。
我希望这是有道理的......另外,我使用的是 C# (.NET 4.0),但可以使用任何编程语言,我只需要弄清楚它背后的逻辑。
提前致谢,
桑尼
【问题讨论】:
-
您正在查看的对象是否是有限的集合或特定范围的对象?单个对象可以在集合中重复吗?
-
另外,“喜欢”和“不喜欢”列表是否已为每个项目预定义和固定,所有项目的长度是否相同?如果长度不同,您可以在添加它们之前尝试按受欢迎程度对项目进行排序。
-
关系是否对称?我的意思是如果A喜欢B,是否意味着B喜欢A,如果A不喜欢B,是否意味着B不喜欢A?
-
@jball - 集合的初始大小可以是任意的,结果列表可以根据需要使用尽可能多或尽可能少的初始元素。最终结果列表只能包含唯一元素。
-
@500 - 内部服务器错误 - 喜欢和不喜欢是静态的,并在运行前确定。
标签: algorithm combinations maximize