[英]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。
例如, 0011
在combos(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.