已知多字段可选值集合,求总组合数计算方法及全组合生成算法
组合数计算与组合生成方案
一、组合数计算方法
你这个场景直接用乘法计数原理计算即可:
- 多个独立字段的总组合数 = 每个字段可选值数量的乘积
- 对应到你的场景:3个字段每个都有3种可选值,总组合数就是
3 * 3 * 3 = 3^3 = 27种 - 通用公式:如果有n个独立字段,第i个字段有k_i种取值,总组合数为所有k_i的乘积;如果所有字段取值数相同均为k,总组合数就是k的n次方
二、现成生成组合的实现方案
你要生成的所有组合本质就是多个集合的笛卡尔积,几乎所有主流编程语言的标准库/常用工具库都有现成实现,不需要自己手动写逻辑:
Python 实现
直接用标准库itertools的product方法:
import itertools # 单个字段的可选取值范围 value_range = [0, 1, 2] # 生成3个字段的所有组合,repeat参数对应字段数量 all_combinations = list(itertools.product(value_range, repeat=3))
Java 实现
用Guava工具库的Sets.cartesianProduct方法:
import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import java.util.List; import java.util.Set; Set<List<Integer>> allCombinations = Sets.cartesianProduct( ImmutableSet.of(0, 1, 2), ImmutableSet.of(0, 1, 2), ImmutableSet.of(0, 1, 2) );
JavaScript 实现
用Lodash工具库的product方法:
const _ = require('lodash'); const allCombinations = _.product([0,1,2], [0,1,2], [0,1,2]);
内容的提问来源于stack exchange,提问作者billybob2
相关产品推荐
相关产品推荐

