首页 > 解决方案 > 关于从n个元素中找出m个元素的所有组合的算法分析问题

问题描述

我正在用 Python 编写一个算法来查找 n 个元素中的 m 个元素的所有组合。

我看过评论但没有评论,所以我很难解释这个问题。

当 n = 7 时,代码的结果是 (0,1,2,3), (0,1,2,4) ... (3,4,5,6)。

但是我对pick和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)

标签: pythonalgorithm

解决方案


picked是在当前时刻选择的有序
to_pick结果组合是进行完全组合所需的元素数

想象一下中间级别 - 例如,您有picked=[1,2]2to_pick个(还需要 2 个元素),并且您可以从范围中获取下一个元素3..7

请注意小的逻辑缺陷 - 如果您现在选择 7,您将无法进行下一步并获得完整的 4 项组合(只是过多的空调用),因此限制 for 循环的上限是明智的n - to_pick


推荐阅读