我想在 C ++ 中生成给定字符串的所有可能排列。
我只在StackOverflow上阅读此讨论:How to generate all permutations of an array in sorted order?
答案很好但是一旦我开始说出一串12-14个字符的字符串,该程序需要相当长的时间。
有没有更好的方法来解决这个问题,以至于它不会超过几秒钟?
鉴于我有一串10个字符。
答案 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!),所以我建议你研究一下你的实现的优化:利用并行计算,低级编程语言,编译器/架构优化等等。