Combinatorial - 一个生成数字组合的类
一个组合类和示例代码。
引言
这是一个生成数字组合的类。生成的数字集合可以用作应用程序中的索引。这些组合允许重复(相同的索引号可以在多个组合中找到),但组合本身是唯一的。
背景
本文中的代码基于 Phillip Fuchs 最初创建的排列代码。
我编写这个的原因是我找不到一个能够生成数字组合的类。那是一年前的事。所以,我编写了一个类来完成它。并且,我想在这里分享它。
执行排列的代码可能不太容易理解,但创建组合的代码非常简单:它接收排列数字,如果这些数字在当前的组合集合中找到,则会丢弃它们;否则,它会将组合添加到组合向量中。
简单而巧妙,但它有效。
使用代码
只需创建一个应用程序,并将这些作为参数传递:size
、len
和 combinations
,其中
size
:要组合的数字集合的大小len
:生成的组合集合的长度combinations
:我们想要生成的集合数量
生成的组合集合可以用作应用程序中的索引。
示例
#include "combinatorial.h" #include <iterator> // for the copy on ostream int main(int argc, char* argv[]) { ComboVector cv; if (argc != 4) return -1; int size = atoi(argv[1]); int len = atoi(argv[2]); int combin = atoi(argv[3]); if (len >= size) { cerr << " len cannot be >= size, exiting"; return -2; } Comb::Combinations(size,len,combin,cv); copy(cv.begin(), cv.end(), ostream_iterator<string>(cout, "\n" ) ); return 0; }
关注点
一个有趣的点(除了组合之外)是使用迭代器(复制)的算法打印向量的值。
历史
- 2008年10月8日 - 版本 1。