用于生成从1到n变化的k个数的nCk组合的程序

时间:2014-02-06 20:44:04

标签: c++ c algorithm matlab

我的功能定义如下  nxt_comb[] = Combination(comb[1:k],n)

此函数应提供输入组合comb(数组)之后的下一个组合。 n的{​​{1}}元素的值从1到comb

示例:

  • 如果函数被调用为n,则a = Combination([1,3,4,6],8)
  • 如果函数被调用为a = [1,3,4,7],则a = Combination([1,3,4,8],8)
  • 如果函数被调用为a = [1,3,5,6],则a = Combination([1,3,7,8],8)
  • 如果函数被调用为a = [1,4,5,6],则a = Combination([3,6,7,8],8)

输入组合永远不会是最后一个组合。也就是说,在上述情况下,输入将永远不会是a = [4,5,6,7]

此外,如果输入全为零,则该函数必须输出[5,6,7,8]的第一个组合。

编辑:我正在寻找的是逻辑。实现可以是C / C ++或MATLAB。

1 个答案:

答案 0 :(得分:1)

不考虑关于以全0开始的最后一项要求,这是一项微不足道的额外检查,算法是:

  1. 通过向后搜索,找到i这样的最大comb[i]<i+n-k(使用基于1的索引;如果您使用的是C,请进行调整)。如果找不到,那就是最后一个组合。

  2. 增加comb [i],然后从j = i+1k工作,将comb[j]设为comb[j-i]+1