c – 如何获得xPy的所有排列?

我想计算一组大小为X的大小Y的所有排列.即如果我有(1,2,3)并且想要所有大小为2,3P2的排列,那么它将是(1,2)( 1,3)(2,1)(2,3)(3,1)(3,2).

GSL和C STL都只提供我能看到的xPx.有人能指出我在C/C++库中可以做到这一点,还是拼出快速且内存有效的算法?

我正在尝试解决一个非常短的密码.我发现了两封信并决定进行蛮力攻击.我有“ouglg ouyakl”并正在检查每个排列对一本非常好的字典.我已经删除了2个字母,因此它的24P7或1,744,364,160种可能性并不是那么糟糕.我现在正在运行Perl程序,因此这将是对编程时间运行时间的总效率的有趣测试. 🙂

(不,我不只是想要密码的答案.)

最佳答案 我之前使用过
this库(注意它是C)需要做类似的代码.它具有排列和组合,有无重复.对于你的问题,这应该足够了(未经测试……):

std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);

std::vector<int>::iterator first = v.begin(), middle = v.begin() + 2, last = v.end();

do {
    // do stuff with elements in range first...middle (but dont change them)
} while(next_partial_permutation(first, middle, last));
点赞