使用std :: next_permutation在C ++中实现next_combination()函数

时间:2016-05-23 19:28:46

标签: c++ algorithm c++11 math permutation

我想实现一种有效的非递归算法,从C ++中的一组N大小生成大小为K的组合。所以,基本上如果我有以下数字[1,2,3,4],则N = 4且K = 2.这将给出组合{1,2},{1, 3},{1,4},{2,1},{2,2} ......等等。

我不想两次生成相同的集合,因此{1,2}和{2,1}是相同的集合。

我的想法是使用C ++中的std :: next_permutation,然后如果我只查看每个排列的前K个元素,那么我从一组大小为N的所有可能的大小为K的组合。

现在这是非常低效的,因为我生成N!大多数集合重复的排列:{1,2}由于排列的生成方式而出现不止一次。

C ++中是否有一种非常有效的方法可以迭代地从集合中生成这些数字。我不需要将数字存储在任何地方,我一次只能查看一个组合。

0 个答案:

没有答案