[英]Program to generate nCk combinations of k numbers varying from 1 to n
我的函數定義看起來像nxt_comb[] = Combination(comb[1:k],n)
此功能應給出輸入組合comb
(數組)之后的下一個組合。 comb
的n
元素取1到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]
。
另外,如果輸入全為零,則該函數必須輸出第一個組合[1,2,....,k]
。
編輯:我正在尋找的是邏輯。 可以在C / C ++或MATLAB中實現。
除了最后一個關於從全0開始的要求(這是一個瑣碎的額外檢查)之外,算法是:
通過向后搜索,找到最大的i
,使comb[i]<i+nk
(使用基於1的索引;如果使用C,請進行調整)。 如果找不到一個,那您就是最后一個組合。
遞增comb [i],然后從j = i+1
到k
,將comb[j]
設置為comb[ji]+1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.