python - 由 n 人组成 r 组的最佳方法,但尽量减少重叠

标签 python r combinatorics

最近有人问我以下看似简单的问题:将 12 人的团队分成 3 人一组的最佳方法是什么,其中该过程要重复 6 次?该解决方案应该最大限度地减少两个人在同一团队中的次数。组合总数由下式给出:

nCr = 12!/(3! * (12-3)!) = 220

因此,手动寻找解决方案并不是一个实际的建议。我发现的最实用(也是最简单)的解决方案是对 12 个名字进行洗牌,然后从第 1、第 2、第 3 和第 4 个三元组中选择组。然后运行该过程 6 次。这确实解决了问题,但是连续跑完后两个人被放在同一组的情况太多了。一个通用的解决方案(n 中的 r 组)会很好。

我也在“计算科学”上发布了这个,但他们觉得它属于其他地方。 我看过link1link2但这些解决方案似乎并不能解决我的特定问题。

最佳答案

此问题是“社交高尔夫球手问题”的变体,“社交高尔夫球手问题”是图论中的一个开放问题。非常感谢Dave2e谁通过 Link1 提供了解决方案的线索。此链接导致该问题的两个更精彩的讨论:Link2Link3 .

关于python - 由 n 人组成 r 组的最佳方法,但尽量减少重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62149454/

相关文章:

Python:更新元组列表......最快的方法

r - 将复制元素合并到现有字符串向量

algorithm - 生成集合的所有分区

python - 双调排序,mpi4py

python - 无法运行 MySql 实用程序

r - 为什么我的标签只是上下移动,而v只是左右移动?这不是很落后吗?

c++ - 如何在不重复 C++ 中的值的情况下随机组合两个数组

c - 在 C 中生成所有可能的数组组合 - 最佳图形着色

python ctypes messagebox出现在所有程序下

r - 如何在 R 中正确过滤日期