查找创建M大小数组的可能方法的总数



假设我有M = 2N = 5K = 2,其中
M=数组的大小
N=可以作为数组元素存在的最大数
K=可以作为数组单元存在的最小数
那么,如何找到使用上述条件创建数组的多种可能方法呢。此外,当前数字不应大于前一个元素。

使用上述条件创建的数组为[5,5],[5,4],[5,3],[5,2],[4,4],[4,3],[4,2],[3,3],[3,2],[2,2]即CCD_ 5阵列可以根据上述条件创建。

我试着用组合和阶乘来做,但没有得到想要的输出。如有任何帮助,我们将不胜感激。

假设您只对组合的数量感兴趣,则公式为-

(N-K+M)!/(M!(N-K+1)!)

点击此处查看更多

这被称为combinations_with_replacement:组合,因为顺序无关紧要(或者它将是一个排列(,而替换是因为元素可以重复,比如[5, 5]

list(itertools.combinations_with_replacement(range(2, 6), 2))
# [(2, 2), (2, 3), (2, 4), (2, 5), (3, 3), (3, 4), (3, 5), (4, 4), (4, 5), (5, 5)]

如果你想要列出的那些元素,你必须颠倒每个元素和列表本身。

list(reversed([tuple(reversed(element)) for element in itertools.combinations_with_replacement(range(2,6), 2)]))

最新更新