python - 如何返回所有具有 N 之和的唯一数字组合

标签 python

<分区>

我已经编辑了我的问题,因为我认为我没有很好地解释它。作为重复链接的 subset_sum 函数似乎是在数字列表是随机的时,但在我的情况下也可以使用。但是,对于像我下面的函数这样的大数字,它似乎效率低下。我的问题是基于 N 的值始终已知的数字列表。

如果 N 为 10,则数字列表将为 1 到 9 或范围 (1, N)。该函数应返回从 1 到 9 的所有唯一数字组合,总和为 10。在这种情况下,我下面的函数将解决此问题并返回 9,但是对于大数字,它需要很长时间。在我看来,当数字范围已知时,应该有更好的方法来解决这个问题,而不是必须遍历每个可能的组合。也许我错了。

import itertools

def counter(n):
    count = 0
    l = range(1, n)
    for i in range(1, n):
        for c in itertools.combinations(l, i):
            if sum(c) == n:
                count += 1
    return count

最佳答案

你搜索的是配分函数p。 查看https://en.m.wikipedia.org/wiki/Partition_(number_theory) 它包含递归公式,该公式仅在输入方面是线性的。

关于python - 如何返回所有具有 N 之和的唯一数字组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44424720/

相关文章:

python - 使用 Pandas 进行 bool 索引对我不起作用

python - dataframe.series 和 dataframe ['series' 之间有什么区别]?

python - Linux 上的 Django MySQLClient pip 编译失败

python - 如何从两个 DataFrame 中排序和保留公共(public)索引

建立连接后,Python TCP socket.recv() 什么都不返回

python - 如何使用json序列化对象

python - For循环跳过大部分数据集

python - 基于 aiohttp 表单的身份验证

python - CoxPHFitter 中的特征(协变量)选择,生命线生存分析

python - 从任务队列中按名称获取任务