我正在用 Python 编写一个算法,从 n 个元素中找出 m 个元素的所有组合。
我看过评论但没有评论,所以我很难理解这个问题。
当 n = 7 时,代码的结果是 (0,1,2,3), (0,1,2,4) ... (3,4,5,6)。
但是我对 picked 和 to_pick 在代码中的作用有歧义。
代码
def pick(n, picked, to_pick):
if to_pick is 0:
return print(picked)
if len(picked) is 0:
smallest = 0
else:
smallest = picked[-1] + 1
for next in range(smallest, n):
picked.append(next)
pick(n, picked, to_pick - 1)
picked.pop()
if __name__ == '__main__':
result = list()
pick(7, result, 4)
最佳答案
picked
是当前选择的有序结果组合
to_pick
是进行完全组合所需的元素数
想象一下中间级别 - 例如,您有 picked=[1,2]
,所以 to_pick
是 2(还需要 2 个元素),您可以从 3..7
范围中获取下一个元素
注意小的逻辑缺陷——如果你现在选择 7,你无法进行下一步并获得完整的 4 项组合(只是过多的空调用),因此将 for 循环的上限限制为 n - to_pick
关于python - 关于从n个元素中找出m个元素的所有组合的算法分析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55368464/