最近有人问我以下看似简单的问题:将 12 人的团队分成 3 人一组的最佳方法是什么,其中该过程要重复 6 次?该解决方案应该最大限度地减少两个人在同一团队中的次数。组合总数由下式给出:
nCr = 12!/(3! * (12-3)!) = 220
因此,手动寻找解决方案并不是一个实际的建议。我发现的最实用(也是最简单)的解决方案是对 12 个名字进行洗牌,然后从第 1、第 2、第 3 和第 4 个三元组中选择组。然后运行该过程 6 次。这确实解决了问题,但是连续跑完后两个人被放在同一组的情况太多了。一个通用的解决方案(n 中的 r 组)会很好。
我也在“计算科学”上发布了这个,但他们觉得它属于其他地方。 我看过link1和 link2但这些解决方案似乎并不能解决我的特定问题。
最佳答案
此问题是“社交高尔夫球手问题”的变体,“社交高尔夫球手问题”是图论中的一个开放问题。非常感谢Dave2e谁通过 Link1 提供了解决方案的线索。此链接导致该问题的两个更精彩的讨论:Link2和 Link3 .
关于python - 由 n 人组成 r 组的最佳方法,但尽量减少重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62149454/