是否可以操纵当前排列序列以跳过(在我的例子中)“无用”序列?
如果那不可能,一个排列迭代的自定义实现会和 std::next_permutation 一样快吗?
一个例子:
1 2 3 4 5 6 7 ...
1 3 2 4 5 6 7 ...
检测到第二个位置的“2”无效,会导致跳过以“1, 2”开头的每个排列。
最佳答案
您必须为此编写一些自定义规则。一个聪明的方法是编写一个代码,只要你有一组无效的排列,你就跳到下一个你可以获得的有效排列。
例如,在上面的例子中,知道第 2 个位置的 2 是无效的,你可以编写代码来交换 2 和 3,并确保随后实现的排列是 3 在该位置可能的最小排列,并且等等。
此外,如果您正在编写自己的 next_permuation 实现,请确保内部功能与 next_permutation 的功能尽可能接近。您可以在这里阅读:std::next_permutation Implementation Explanation
关于c++ - 如何使用 std::next_permutation 强制跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31509911/