gpt4 book ai didi

c++ - 提高给定字符串所有排列的时间复杂度

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:14 24 4
gpt4 key购买 nike

问题通常是给定一个字符串,打印它的所有排列。例如,字符串 ABC 的排列是 ABC、ACB、BAC、BCA、CAB、CBA。

标准解决方案是递归解决方案,如下所示。

void permute(char *a, int i, int n) 
{
int j;
if (i == n)
printf("%s\n", a);
else
{
for (j = i; j <= n; j++)
{
swap((a+i), (a+j));
permute(a, i+1, n);
swap((a+i), (a+j)); //backtrack
}
}
}

这会遇到 O(n*n!)。这是我们能做的最好的,还是有什么办法可以让它更快?

最佳答案

您可以使用 std::next_permutation。请注意,它仅适用于排序数组。
这个解决方案的优点:1)是标准的2) 是非递归的

这是一个例子(http://www.cplusplus.com/reference/algorithm/next_permutation/):

// next_permutation example
#include <iostream> // std::cout
#include <algorithm> // std::next_permutation, std::sort

int main () {
int myints[] = {1, 2, 3};

std::sort (myints, myints + 3);

std::cout << "The 3! possible permutations with 3 elements:\n";
do {
std::cout << myints[0] << ' ' << myints[1] << ' ' << myints[2] << '\n';
} while (std::next_permutation (myints, myints + 3));

std::cout << "After loop: " << myints[0] << ' ' << myints[1] << ' ' << myints[2] << '\n';

return 0;
}

关于c++ - 提高给定字符串所有排列的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20991167/

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