我的功能定义如下
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。
答案 0 :(得分:1)
不考虑关于以全0开始的最后一项要求,这是一项微不足道的额外检查,算法是:
通过向后搜索,找到i
这样的最大comb[i]<i+n-k
(使用基于1的索引;如果您使用的是C,请进行调整)。如果找不到,那就是最后一个组合。
增加comb [i],然后从j = i+1
到k
工作,将comb[j]
设为comb[j-i]+1