高效计算大 N 的复杂限制组合

时间:2021-04-29 12:18:29

标签: python optimization vectorization combinations

我有一个包含 32 个独特元素的列表。每个元素由唯一键表示,值可以是以下 3 种类型之一:ABC

elements = {1: 'A',
            2: 'A',
            3: 'B', 
            4: 'C', 
            ...
            ...
            32: 'B'}

类型的表示并不相同,即:类型 B 可能比类型 AC 出现更多次。

我需要获得遵循这些限制的所有可能组合:

  • 必须由6个元素组成
  • 每种类型只允许有 2 个实例(不少于,不多于)
  • 没有重复的键
  • 订单无关

示例(简化符号):

  • [1A, 12A, 3B, 6B, 4C, 5C]:包含 2xA、2xB、2xC

有没有办法有效地做到这一点,使用矩阵/向量化或集合和联合/交集?

我可能可以使用 itertools.combinations(elements, r=6) 获得所有组合并稍作调整,但我不确定如何有效地执行这些规则而不必遍历所有 (906,192) 组合。

0 个答案:

没有答案