所以我想编写一个小程序,可以将一组人(100-200)分成几个相等的组(10-15)并有约束。
每个人都有一个他们来自的城市(通常约有8-12个不同的城市)。 在这个新部门之前,每个人都在一群人中(10-20个不同的团体)。 这就是它的例子。
现在我想把不同群体中的人分开,以便我们努力让每个团队中来自不同城市的人数相同(所以并非所有纽约人都在同一个团队中等),并努力让那些参与其中的人同一支球队之前不会再合作。
找不到可以帮助我的算法。
答案 0 :(得分:1)
对找到绝对最佳答案有一种完全的感觉。但是你只想要一个非常好的答案,非常快,不难想出一个启发式。
设置空团队。决定最大的团队规模。按照其他人的数量对人们进行排序(相同城市或同一团队)下降。将每个人都放在非完整团队中,与你想要避免的其他人最少,打破与小团队的关系,并随机打破任何剩余的关系。
无法保证产生最佳效果。但它很简单,会产生很好的效果。