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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于算法分析的问题,以找出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)
答案

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

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

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

以上是关于关于算法分析的问题,以找出n个元素中m个元素的所有组合的主要内容,如果未能解决你的问题,请参考以下文章

算法设计与分析: 2-8 集合划分问题

计算机算法设计与分析之递归与分治策略——二分搜索技术

全排列的非递归算法

获取所有组合算法获取全排列算法(java)

漫谈算法2优先队列与堆排序

九宫格中,从左下到右上的最短路径,共有几种走法?