这种递归python k组合生成器函数的时间复杂度

时间:2014-04-28 21:57:43

标签: python algorithm asymptotic-complexity

我正在寻找一个python k-combination算法,并在https://stackoverflow.com/a/2837693/553383

找到了这个小美女

有关其T(n)和/或时间复杂度的任何想法?

以下是您在上述链接中找到的代码:

def choose_iter(elements, length):
    for i in xrange(len(elements)):
        if length == 1:
            yield (elements[i],)
        else:
            for next in choose_iter(elements[i+1:len(elements)], length-1):
                yield (elements[i],) + next
def choose(l, k):
    return list(choose_iter(l, k))

1 个答案:

答案 0 :(得分:0)

假设此函数确实生成了长度为k的所有可能组合,则此函数的时间复杂度为O(n!/[(n-k)!k!] * k^2)

正好有O(n!/[(n-k)!k!])个k组合,我们会生成每个组合。

让我们看看每个人的geration。它是通过迭代创建元组来完成的。首先添加第一个元素,然后是第二个元素,然后是第三个元素,依此类推。

但是,创建长度为k的元组为O(k),我们实际上为每个元组创建获得O(1+2+...+k)。自O(1+2+...+k)=O(k^2)以来,我们为每个元组执行此操作,我们可以得出结论,此函数的总复杂度为O(n!/[(n-k)!k!] * k^2)