生成具有每个组合的给定对象的确切数量的组合

时间:2015-08-21 15:01:40

标签: python algorithm math combinations permutation

我有10个用户:

id   type
------------
1     SP
2     KP
3     SP
4     LN
5     KP
6     KP
7     LN
8     SP
9     LN
10    SP

我需要生成5个用户的所有可能组合,但有一些限制:

1. exactly 2 users with type SP
2. exactly 2 users with type KP
3. exactly 1 user with type LN
4. No user can appear more than once in a given combination

例如,使用这些ID和类型,输出必须如下:

1 3 2 5 4
1 3 2 5 7
1 3 2 5 9
1 3 2 6 4
....

如何生成这些组合?

1 个答案:

答案 0 :(得分:0)

只有10个用户,其中一个子集的所有可能选择都是2 ^ 10,这是非常小的数字 - 1024.因此,您可以简单地生成所有子集(我会使用位掩码)并且对于每个子集检查是否全部以下是:

  • 它由5个元素组成(例如,正好5个位设置为1)
  • 正好两位对应SP
  • 正好两个位对应于KP
  • 最后一位是LN

使用这种方法,您将按照10k操作的顺序执行,这在现代计算机上将非常快速地完成。使用这种方法,易于编码并且没有太多错误的地方。