快速生成给定字符串的所有置换 我想在C++中生成给定字符串的所有可能排列。

快速生成给定字符串的所有置换 我想在C++中生成给定字符串的所有可能排列。,c++,string,algorithm,permutation,C++,String,Algorithm,Permutation,我在这里仅阅读了有关StackOverflow的讨论: 答案很好,但一旦我开始说一个12-14个字符的字符串,这个程序就需要相当长的时间 有没有更好的方法来解决这个问题,使它不超过几秒钟 假设我有一个字符串,比如说10个字符。我认为你无法实现比std::next\u置换更好的结果 如果您不需要按字典排序顺序排列,那么只需交换数组中的两个相邻元素,就可以从给定的排列中获得下一个排列。基本上,而不是在*n!使用std:next_置换,您可以遍历On!中的所有置换 这类算法称为 因为您需要所有排列,所

我在这里仅阅读了有关StackOverflow的讨论:

答案很好,但一旦我开始说一个12-14个字符的字符串,这个程序就需要相当长的时间

有没有更好的方法来解决这个问题,使它不超过几秒钟


假设我有一个字符串,比如说10个字符。

我认为你无法实现比std::next\u置换更好的结果


如果您不需要按字典排序顺序排列,那么只需交换数组中的两个相邻元素,就可以从给定的排列中获得下一个排列。基本上,而不是在*n!使用std:next_置换,您可以遍历On!中的所有置换

这类算法称为


因为您需要所有排列,所以您的输出和整个解决方案将至少处于打开状态!。所以,从算法上来说,你能得到的最好结果就是!,因此,我建议您研究实现的优化:利用并行计算、低级编程语言、编译器/体系结构优化等。

仅在链接中提到的代码中使用。我需要它处理得更快。@SanskarKatiyar:真倒霉。一个10个字符的字符串有360万个排列。无论算法如何,这都需要时间。如果没有其他的方法来分配内存和复制数据。我想如果std::next_排列可以更快,他们会这样做的。嗯,是的。当然,这需要相当长的时间。这是一个Onn!问题还有12个!超过4亿。即使找到下一个排列是神奇的O1,它仍然是一个开启!问题,是的。这是一个大问题。所以答案是否定的。速度不会太快,也许如果代码中有一个优化,你会得到一个常数因子,但当你谈到阶乘复杂性时,这个因子大部分是可以忽略的。@Sanskarkatiya:的确;如此之大以至于目前的硬件对此无能为力。如果你想生成n!序列,然后你需要做n的倍数!它们的并行程度是有限的。量子处理器或自我复制的纳米机器可能会有所帮助,但它们必须首先被发明出来。
std::sort( myString.begin(), myString.end() );

do {
  std::cout << myString;
} while ( std::next_permutation( myString.begin(), myString.end() ) );