65.9K
CodeProject 正在变化。 阅读更多。
Home

Combinatorial - 一个生成数字组合的类

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.33/5 (2投票s)

2008年10月8日

CPOL

1分钟阅读

viewsIcon

21547

downloadIcon

222

一个组合类和示例代码。

引言

这是一个生成数字组合的类。生成的数字集合可以用作应用程序中的索引。这些组合允许重复(相同的索引号可以在多个组合中找到),但组合本身是唯一的。

背景

本文中的代码基于 Phillip Fuchs 最初创建的排列代码。

我编写这个的原因是我找不到一个能够生成数字组合的类。那是一年前的事。所以,我编写了一个类来完成它。并且,我想在这里分享它。

执行排列的代码可能不太容易理解,但创建组合的代码非常简单:它接收排列数字,如果这些数字在当前的组合集合中找到,则会丢弃它们;否则,它会将组合添加到组合向量中。

简单而巧妙,但它有效。

使用代码

只需创建一个应用程序,并将这些作为参数传递:sizelencombinations,其中

  • 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。
© . All rights reserved.