如何在Julia中生成含重复元素的排列(学生校服样本空间)
如何在Julia中生成带重复元素的排列样本空间?
你用permutations函数得不到预期结果,是因为这个函数只生成无重复选取元素的排列——你的colors只有2个元素,要生成长度为3的排列,它无法重复选取同一个元素,自然出不来8种组合。
要生成允许元素重复的全排列(也就是笛卡尔积,对应每个学生独立选颜色的所有可能),有两种简单方法:
方法一:用笛卡尔积生成(推荐)
利用Iterators.product生成所有可能的颜色组合,再整理成需要的格式:
# Julia 1.6+ 可直接用Base.Iterators,无需额外安装包 using Base.Iterators colors = ['R', 'G'] n = 3 # 生成n次颜色集合的笛卡尔积 product_result = Iterators.product(fill(colors, n)...) # 展平结果并转成字符串格式 sample_space = [join(s) for s in vec(product_result)] println(sample_space) # 输出:["RRR", "GRR", "RGR", "GGR", "RRG", "GRG", "RGG", "GGG"]
方法二:通过二进制映射生成
利用数字的二进制表示对应颜色选择,0映射到R、1映射到G(反之亦可):
colors = ['R', 'G'] n = 3 # 遍历0到2^n-1的所有数字,转成n位二进制后映射为颜色 sample_space = [join(colors[d+1] for d in digits(i, base=2, pad=n)) for i in 0:2^n-1] println(sample_space) # 输出:["RRR", "RRG", "RGR", "RGG", "GRR", "GRG", "GGR", "GGG"]
参考相关问题:
- 《如何在Julia中生成数组的所有排列?》
- 《Julia:带替换的n元素唯一集合生成》
内容的提问来源于stack exchange,提问作者Vinod
相关产品推荐
相关产品推荐

