2013-06-02 42 views
2

我想知道是否有一個有效的算法來生成0和1的長度爲n的所有組合,給定最小和最大量1分的。生成給定長度的0和1的所有組合,給出最小和最大1的值

實施例:

N = 4分鐘= 2最大= 3

0011 0101 1001 0110 1010 1100 (with 2 1's) 
0111 1011 1101 1110   (with 3 1's) 

我知道我可以以二進制從第(n-分鐘)* 0(分鐘)* 1到(最大計數)* 1(n-max)* 0(例如0011到1110)並且採取所有那些滿足約束的那些,但是我想知道是否存在更有效的算法。

回答

2

有一個簡單的算法用於與k那些迭代大小n的組合:

  1. 開始與長度n的比特向量,其中最後k位是1
  2. 重複儘可能長(其中即,直到到達長度n的位矢量中的第一k位是1): 一個。查找位向量中的最後一個01序列。將其更改爲10並將以下所有1位(必須緊隨其後)移動到序列末尾。

有一個簡單的無循環位操縱hack來做到這一點。你可以在我對這個問題的回答中看到它:Find n-th set of a powerset

+0

也許我誤解了某些內容,但是如果按照您在鏈接中描述的策略獲得: – rex123

+0

@ rex123:我認爲您的評論已被截斷。 – rici

+0

'0011 - > 0101 - > 1001 - > 1010 - > 1100 - > 0111 - > 1011 - > 1101 - > 1110'這意味着我錯過了一些東西。我想我不明白如果'1'不是在'01'之後立即做什麼的。 – rex123

相關問題