Engee 文档
Notebook

与重复的组合

此示例演示使用库从项列表中生成具有重复项的组合 Combinatorics 在朱莉娅。

导言

"与重复组合"算法允许您获得给定大小的所有可能子集,其中元素可以重复。 这是有用的,例如,当计算选择项目的方式的数量时,如果您可以多次选择相同的项目(例如,从几种类型的馅饼中选择2个馅饼)。

这种方法用于组合学和概率论问题。

In [ ]:
# 如果尚未安装Combinatorics包,请运行该行:
import Pkg; Pkg.add("Combinatorics")
In [ ]:
# 导入组合函数库以使用组合函数
using Combinatorics

将其与字符串数组一起使用的示例

创建行列表并显示其内容。 接下来,我们生成长度为2的重复的所有可能组合。 这种组合也被称为"multicombinations"

In [ ]:
# 我们定义一个字符串数组—这些将是我们的源元素。
l = ["卷心菜", "马铃薯", "果酱"] # 馅饼的种类

# 印刷标题
println("名单: ", l)
println("组合:")

# 我们通过长度为2的重复的所有组合
for c in with_replacement_combinations(l, 2)
    println(c) # 我们输出每个组合
end
Список: ["капуста", "картошка", "повидло"]
Комбинации:
["капуста", "капуста"]
["капуста", "картошка"]
["капуста", "повидло"]
["картошка", "картошка"]
["картошка", "повидло"]
["повидло", "повидло"]

计算组合的数目

功能 with_replacement_combinations() 它也可以与 ranges (范围)。 我们计算从1到10的数字重复的三元素组合的数量。 这对应于具有重复的组合的公式:

哪里 -不同元素的数量,

-组合的大小。

将是 .

In [ ]:
# 我们从范围1计算具有重复的三元素组合的总数。.10
length_combs = length(with_replacement_combinations(1:10, 3))
Out[0]:
220

结论

我们已经审查了图书馆的使用情况 Combinatorics 在Julia编程语言中,用于生成具有重复的组合。 我们创建了一个包含饼图名称列表的示例,显示了所有可能的重复对,并计算了从1到10的整数中此类三元组的总数。

这使您可以高效地执行组合计算,而无需自己实现算法。

该示例是使用[罗塞塔代码]的材料开发的(https://rosettacode.org/wiki/Combinations_with_repetitions