基于值确定人员分组的C#算法

基于值确定人员分组的C#算法,c#,grouping,C#,Grouping,我正试图写一个算法,根据他们的“分数”创建一组人。 一个人有两个参数,一个名字和一个分数。(分数的范围在-10到10之间,但这并不相关)我希望创建人数相等的小组(如果可能的话,以人数为基础),小组成员的平均分数相同(或非常接近相同) 例如: 第1组(平均得分=2) --无名氏,得分2 --无名氏,得7分 --杰克·布莱克,比分为-3 第2组(平均得分=2) --鲍比·弗莱,得4分 --卡里·佩奇,得分-3分 --Linus Tarval,得分5分这闻起来像是经典的变体,虽然存在一些启发式,但它是

我正试图写一个算法,根据他们的“分数”创建一组人。 一个人有两个参数,一个名字和一个分数。(分数的范围在-10到10之间,但这并不相关)我希望创建人数相等的小组(如果可能的话,以人数为基础),小组成员的平均分数相同(或非常接近相同)

例如:

第1组(平均得分=2) --无名氏,得分2 --无名氏,得7分 --杰克·布莱克,比分为-3

第2组(平均得分=2) --鲍比·弗莱,得4分 --卡里·佩奇,得分-3分
--Linus Tarval,得分5分

这闻起来像是经典的变体,虽然存在一些启发式,但它是NP难的。你可以在维基百科页面上获得一个战利品。。也许贪婪的方法在你的情况下会奏效


你应该试着通过选择合适的小组来安排一个特定的人来填充你的小组,可能是从按分数排序开始。

这是一个棘手的问题。你可能会做的最好的是启发式,但k-means是一个很好的方法:

有多少组?另外,您将有多少人?组的数量是无限的,但用户将始终选择人数。每个组的人数也将由用户提供。谢谢Jack,“贪婪方法”在这个应用程序中运行得很好。