Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
此递归python k组合生成器函数的时间复杂度_Python_Algorithm_Asymptotic Complexity - Fatal编程技术网

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

此递归python k组合生成器函数的时间复杂度,python,algorithm,asymptotic-complexity,Python,Algorithm,Asymptotic Complexity,我在寻找一个python k-combination算法,并在这里发现了这一点 你知道它的Tn和/或时间复杂性吗 以下是您将在上述链接中找到的代码: def choose_iter(elements, length): for i in xrange(len(elements)): if length == 1: yield (elements[i],) else: for next in choose_it

我在寻找一个python k-combination算法,并在这里发现了这一点

你知道它的Tn和/或时间复杂性吗

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

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))

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

确实有人在开玩笑/[n-k!k!]k个组合,我们生成每个组合

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


然而,创建一个长度为k的元组是可以的,我们实际上为每个元组创建了O1+2+…+k。因为O1+2+…+k=Ok^2,我们对每个元组都这样做,我们可以得出结论,这个函数的总复杂度是开的/[n-k!k!]*k^2。

我认为您的复杂性计算可能会忽略每次递归调用中的切片成本。元素[i+1:]具有运行时OleneElements-i,但我不确定对于每个i和递归的每个级别,大量调用是如何组合的。@Blckknght每个递归调用都是O1[一些恒定数量的引用是通过的]。所以你应该加上一个加性的k因子,但那只会给你一个机会/[n-k!k!]*k^2+n/[n-k!k!]*k,它仍在运行中/[n-k!k!]*k^2。每个组合创建中的瓶颈是元素到元组的迭代concat。