簡體   English   中英

程序生成從1到n的k個數字的nCk組合

[英]Program to generate nCk combinations of k numbers varying from 1 to n

我的函數定義看起來像nxt_comb[] = Combination(comb[1:k],n)

此功能應給出輸入組合comb (數組)之后的下一個組合。 combn元素取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開始的要求(這是一個瑣碎的額外檢查)之外,算法是:

  1. 通過向后搜索,找到最大的i ,使comb[i]<i+nk (使用基於1的索引;如果使用C,請進行調整)。 如果找不到一個,那您就是最后一個組合。

  2. 遞增comb [i],然后從j = i+1k ,將comb[j]設置為comb[ji]+1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM