c++ - 如何使用 std::next_permutation 强制跳转

标签 c++ c++11 permutation

是否可以操纵当前排列序列以跳过(在我的例子中)“无用”序列?

如果那不可能,一个排列迭代的自定义实现会和 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/

相关文章:

c++ - 为什么 unique_ptr 析构函数的异常会终止程序?

c++ - std::array 的类型特征

c++ - 遍历 QList 并在包含的对象上调用函数

c++ - 如何检查数组是否为最小堆?

arrays - 如何有效地生成一个包含 K 个介于 0 和上限 N 之间的非重复整数的列表

Haskell——映射函数到排列

C#高级排列场景

c++ - 类的私有(private)成员 - 在此上下文中

multithreading - C++11 加入第一个完成的线程

c++ - 如何保持在堆栈上分配的对象的动态类型?