与重复的组合
此示例演示使用库从项列表中生成具有重复项的组合 Combinatorics 在朱莉娅。
导言
"与重复组合"算法允许您获得给定大小的所有可能子集,其中元素可以重复。 这是有用的,例如,当计算选择项目的方式的数量时,如果您可以多次选择相同的项目(例如,从几种类型的馅饼中选择2个馅饼)。
这种方法用于组合学和概率论问题。
    In [ ]:
# Если пакет Combinatorics ещё не установлен, выполним строку:
import Pkg; Pkg.add("Combinatorics")
    In [ ]:
# Импорт библиотеки Combinatorics для работы с комбинаторными функциями
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]:
结论
我们已经审查了图书馆的使用情况 Combinatorics 在Julia编程语言中,用于生成具有重复的组合。 我们创建了一个包含饼图名称列表的示例,显示了所有可能的重复对,并计算了从1到10的整数中此类三元组的总数。
这使您可以高效地执行组合计算,而无需自己实现算法。
该示例是使用[Rosetta代码]的材料开发的(https://rosettacode.org/wiki/Combinations_with_repetitions )