簡體   English   中英

生成大小為 1 到 n 的所有組合(位集)

[英]Generating all combinations of size 1 to n (bitsets)

有很多關於堆棧溢出的快速方法可以生成大小為 k 的位集的所有組合。

前任:

combos(4,3) = {1110,1101,1011,0111}

但是,有沒有一種快速的方法來計算尺寸 1 到 n 的所有組合?

前任:

allCombos(4) = 
{
  1: {0001, 0010, 0100, 1000}
  2: {0011, 0101, 1001, 0110, 1010, 1100}
  3: {0111, 1011, 1101, 1110}
  4: {1111}
}

當然,我可以只為從 1 到 4 的 i 調用combos(4, i) 。但是,我想利用以下事實:

對於combos(4, i)中的每個位集X ,我們可以將位集X中的一個位從 0 設置為 1。

例如, 0011combos(4,2)中,它在combos(4,3)中生成{1011, 0111} ,因為第一個和第二個最高有效位是0。

正如 Frank Yellin 指出的那樣,您的“捷徑”可能並沒有那么有用。 我認為您可以稍微縮短此計算時間的唯一方法是認識到,如果我們翻轉combos(n,i)中每個位集中的每個位,我們會得到位集combos(n,ni) 您可以創建一個非常簡單且快速的 function,它將接收一組位集並返回一個具有相反位集的集。 例如,如果給定combos(4,1){0001,0010,0100,1000} ,它將是 output {1110,1101,1011,0111}combos(4,3) 這會將您的運行時間大致減少一半。

暫無
暫無

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

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