有序组合生成和排名的库?

时间:2010-05-17 13:34:34

标签: c++ c combinations

我正在寻找一个可以对有序组合进行排名/排序的库,其中排名意味着它从一个组合中得到它来自格雷码或词典或其他算法的第n种组合,无需进行反转过程。 / p>

我正在寻找一个库,它可以执行许多算法,如格雷码,词典,旋转词典,enup等。

如果它只生成它,如果它也有很多算法就可以了。

我找到了FXT库,但它没有使用有序组合;它确实有成分,但似乎没有像我需要的那样做排名算法,它与排名/不排序的无序组合相当。

2 个答案:

答案 0 :(得分:2)

这不是你的问题的答案,但有一本关于这个主题的精彩书名为 Combinatorial Algorithms: Generation, Enumeration, and Search

在算法/数学方面与实际实现之间取得了很好的平衡。大多数示例都很简单,可以在很短的时间内用C语言等程序语言编写。

答案 1 :(得分:1)

你需要这样的东西:

// get a combination of a rank
// n number k choices N rank

void unrankComb(int* &K, int n, int k, int N)
{
 int e, N2, t, m, p;

 e = nCr(n,k);
 N2 = e-1-N;
 e = ((n - k)*e)/n;
 t = n - k + 1;
 m = k;
 p = n -1;
 do
 {
  if(e <= N2)
  {
   K[k-m] = n - t - m + 2;
   if(e > 0)
   {
    N2 = N2 -e;
    e = (e * m) / p;
   }
   m = m -1;
   p = p -1;
  }
  else
  {
   e = ((p - m)*e) / p;
   t = t - 1;
   p = p - 1;
  }

 }while(m != 0);
}