【发布时间】:2015-04-07 16:57:55
【问题描述】:
我很难理解如何确定该算法的时间复杂度(用 Python 编写,但适用于任何语言):
def permutazioni(list):
n = len(list)
if n == 1 or n == 0:
return [list]
else:
risult = []
for i in range(n):
primo = list[i]
listaDegliAltri = list[:i] + list[i + 1:]
perms = permutazioni(listaDegliAltri)
for perm in perms:
risult.append([primo] + perm)
return risult
此过程将一个序列作为输入,并作为结果返回一个序列序列,该序列包含起始序列的所有可能排列的集合。
例子:permutations([a, b, c]) = [[a, b, c], [a, c, b], [b, a, c], [b, c, a], [c, a , b], [c, b, a]]
现在,要确定复杂性,我必须编写并求解递推方程。 当列表长为 0 或 1 时,不进行任何操作。 否则,您将运行 n 次迭代循环,其中每次迭代都会在一个元素短于 (n-1) 的列表上调用函数,然后运行内部长n-1。
教授接着写道:
T(0) = T(1) = 1(1为什么?是退货的成本还是其他?)
T(n) = n*(T(n-1) + (n-1)) 对于 n>1
然后他说选择下界然后写(以后什么都不懂):
T(n) > n*T(n-1)
来自:
T(n) > nT(n-1) > n(n-1)T(n-2) > n(n- 1)*(n-2)*T(n-3)> ... > n!
即:
T(n) = Ω(n!)
我不明白,因为它消除了 (n-1) 并且因为它使用了大调而不是等号。所以我什么都不懂。 有人给我解释一下就知道了? 谢谢
【问题讨论】:
标签: algorithm time-complexity permutation