代码的时间复杂度是多少(生成排列)
What is the time complexity of the code (generating permutations)
请参阅下面 link 处的代码:
我的想法:
这里的时间复杂度取决于两个因素:
1)递归调用次数:O(n) 其中n是原始输入字符串中的字符数
2) 两个for循环涉及的工作:O(n!)?
基本上,第一个 for 循环迭代集合中的每个字符串 'permSet'
n 个字符串的排列数可以是 n!。
因此,这个集合将包含 n!字符串。正确吗?
第二个for循环在每个位置放置一个字符(代码中的变量'a')
每个字符串中的潜在位置。
我在这一步很困惑。
您的分析是正确的。对于长度为 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!)。
请参阅下面 link 处的代码:
我的想法:
这里的时间复杂度取决于两个因素: 1)递归调用次数:O(n) 其中n是原始输入字符串中的字符数
2) 两个for循环涉及的工作:O(n!)?
基本上,第一个 for 循环迭代集合中的每个字符串 'permSet' n 个字符串的排列数可以是 n!。 因此,这个集合将包含 n!字符串。正确吗?
第二个for循环在每个位置放置一个字符(代码中的变量'a') 每个字符串中的潜在位置。
我在这一步很困惑。
您的分析是正确的。对于长度为 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!)。