我正在寻找一个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))
答案 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)
。