关于算法分析的问题,以找出n个元素中m个元素的所有组合

问题描述 投票:0回答:1

我正在用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)
python algorithm
1个回答
0
投票

picked是当前选择的有序结果组合 to_pick是完全组合所需的元素数量

想象一下中级 - 例如,你有picked=[1,2],所以to_pick是2(需要2个元素),你可以从3..7范围内的下一个元素

注意小逻辑缺陷 - 如果你现在选择7,你不能进行下一步并得到完整的4项组合(只是过多的空调用),所以明智的做法是限制for循环的上限n - to_pick

© www.soinside.com 2019 - 2024. All rights reserved.