我听不太懂,你怎么去判断这个算法的时间复杂度(用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
这个过程需要输入一个序列并作为结果返回包含起始序列的所有可能排列集合的序列序列。
例:置换([A,B,C)= [[A,B,C],[A,C,B],[B,A,C],[B,C, a],[c,a,b],[c,b,a]]
现在,为了确定复杂性,我必须编写并求解复发方程。 列表长度为0或1时,不执行任何操作。 否则,运行的Ñ迭代一个循环,其中每次迭代中被调用的函数的列表上被一个元素比(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)的>ÑT(N-1)>ñ(N-1)T(n-2)> n(n-1)*(n-2)* T(n-3)> ...> n!
即:
T(N)=Ω(!n)的
我不明白,因为它消除了(N-1)因为它已经把主要而不是等号。所以我什么都不懂。有人向我解释它会知道吗? 谢谢