result = False
def permute(a,l,r,b):
global result
if l==r:
if a==b:
result = True
else:
for i in range(l, r+1):
a[l], a[i] = a[i], a[l]
permute(a, l+1, r, b)
a[l], a[i] = a[i], a[l]
string1 = list("abc")
string2 = list("ggg")
permute(string1, 0, len(string1)-1, string2)
因此,基本上我认为找到每个排列需要n ^ 2步(有时是一个常数),而找到所有排列应花费n!脚步。那么这是否使其成为O(n ^ 2 * n!)?如果是这样的话!接管,使其变为O(n!)?
谢谢
edit:仅查找排列,此算法似乎很奇怪,这是因为我还使用它来测试两个字符串之间的字谜。我只是还没有重命名方法,对不起
答案 0 :(得分:8)
查找每个排列不需要O(N^2)
。创建每个排列的时间为O(N)
,因为要构建每个排列,您需要为每个索引分配一个新元素,并且此分配每个排列发生n
次。
这为您提供N!
的排列时间O(N)
,每个排列的总时间复杂度为O(N!) * O(N)
= O(N * N!)
您的最终时间复杂度不会降低到O(N!)
,因为O(N * N!)
仍然比O(N!)
大一个数量级,并且仅删除常数项({{ 1}})。