gpt4 book ai didi

javascript - 给定字符串的所有排列 - 复杂性

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:42 26 4
gpt4 key购买 nike

我写了这个字符串所有排列的解决方案。我对这个解决方案的时间和空间复杂性有疑问。我假设时间复杂度为 O(n³),因为嵌套循环和递归以及空间复杂度为 O(n),因为递归。

我的假设是否正确?如果可以,有没有更好的性能解决方案?

https://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/

输入:“ABC”

输出:['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']

谢谢!

function permutation(string) {
// Basecase
if (string.length < 2) {
return string;
}

var permutations = []; // This array will hold our permutations

for (var i = 0; i < string.length; i++) {
var char = string[i];

// Cause we don't want any duplicates:
// if char is not matched, skip it this time
// otherwise it will generate duplicated string

if (string.indexOf(char) != i) {
continue;
}

var remainingString = string.slice(0,i) + string.slice(i+1,string.length);
var tempResult = permutation(remainingString)
for (var subPermutation of tempResult) {
var result = char + subPermutation
permutations.push(result)
}
}

return permutations;
}

console.log(permutation('ABC'))

最佳答案

长度为 n 的字符串存在 O(n!) 个排列。

在生成排列中的每个字符串时,您通过 O(string.length) = O(n) 的 for 循环执行 O(n) 操作

为什么有 n! 可能不是很明显,但是您正在递归调用 permutation(..) 函数并保留剩余的字符串,因此字符串长度将为 n * (n - 1) * (n - 2) * (n - 3) * ... * 1。

因此,您的算法的时间复杂度为 O(n * n!)

其他流行的已知解决方案(基于交换,与您的类似,以及基于下一个排列)具有相同的时间复杂度。

关于javascript - 给定字符串的所有排列 - 复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49544791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com