【发布时间】:2013-12-23 22:09:39
【问题描述】:
我想在 C++ 中生成给定字符串的所有可能排列。
我仅在 StackOverflow 上阅读了此讨论:How to generate all permutations of an array in sorted order?
答案很好,但是一旦我开始说一串 12-14 个字符的字符串,程序就会花费大量时间。
有没有更好的方法来解决这个问题,这样它不会花费超过几秒钟?
假设我有一串 10 个字符的字符串。
【问题讨论】:
-
我认为如果 std::next_permutation 可以做得更快,他们就会这样做。
-
嗯,是的。当然,这需要相当长的时间。这是
O(n(n!))问题。而12!则超过 4 亿。即使找到下一个排列神奇的是O(1),它仍然是O(n!)的问题。 -
是的。这是个大问题。
-
所以答案只是“不”。速度不是非常快,也许如果对代码进行优化,您会获得一个常数 factor ,但是当您谈到阶乘复杂性时, factor 几乎可以忽略不计。
-
@SanskarKatiyar:确实;如此之大,以至于当前的硬件对此无能为力。如果你想生成
n!序列,那么你需要做一些n!操作的倍数,并且它们可以并行化的数量是有限制的。量子处理器或自我复制的纳米机器可能会有所帮助,但必须首先发明它们。
标签: c++ string algorithm permutation