快速生成给定字符串的所有排列

时间:2013-12-06 14:09:23

标签: c++ string algorithm permutation

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

我只在StackOverflow上阅读此讨论:How to generate all permutations of an array in sorted order?

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

有没有更好的方法来解决这个问题,以至于它不会超过几秒钟?

鉴于我有一串10个字符。

2 个答案:

答案 0 :(得分:1)

我认为你不能比std::next_permutation

更好
std::sort( myString.begin(), myString.end() );

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

答案 1 :(得分:0)

如果您不需要按字典(排序)顺序排列,那么只需交换阵列中的两个相邻元素,就可以从给定的排列中获得下一个排列。基本上,用std:next_permutation()代替O(n * n!),你可以遍历O(n!)中的所有排列。

这类算法称为Generation with minimal changes

由于您需要所有排列,因此您的输出和整个解决方案将至少为O(n!)。因此,从算法上来说,你可以得到的最好的是O(n!),所以我建议你研究一下你的实现的优化:利用并行计算,低级编程语言,编译器/架构优化等等。