代码的时间复杂度是多少(生成排列)

时间:2016-05-04 18:48:42

标签: java algorithm recursion complexity-theory

请参阅以下链接中的代码: https://stackoverflow.com/a/20614037/1676147

我的想法:

这里的时间复杂性取决于两个因素: 1)递归调用的数量:O(n)其中n是原始输入字符串中的字符数

2)两个for循环中涉及的工作:O(n!)?

基本上,第一个for循环是迭代set'permSet'中的每个字符串    n个字符串的排列数可以是n!。    因此,这个集合将包含n!字符串。正确的吗?

第二个for循环在每个循环中放置一个字符(代码中的变量'a')    每个字符串中的潜在位置。

我很困惑这一步。

1 个答案:

答案 0 :(得分:0)

您的分析是正确的。对于长度 N 的字符串,您有N-1次递归,字符串长度 M ,长度 1 各一次N-1 即可。每个递归处理一个大小(M-1)!列表,并在每个 M 位置(0到M-1)插入下一个字符。

每次通话都有时间M *(M-1)!或M!在M = 1到N之间求和。

1! + 2! + 3! + ... + N!

此总和 O(n!)

相关问题