簡體   English   中英

python powerset中的子集鏈

[英]Subset chains within powerset in python

如果我列舉了字母的冪集,例如,為0,...,1 << 26-1。

對於該范圍內的給定數字,我想知道其所有子集是什么。 我可以做一些效率低下的事情,例如:

def find_subset_chain(subset):
    return [i for i in subset if i & subset == i]

如果我要對冪集的每個元素執行此操作,則可以從有問題的元素向后進行操作,直到找到一個子集,然后附加已經確定的內容,但是碰巧是這種情況我想對電源集的某些選擇元素而不是全部選擇這樣做。

也許有更多的理論方法可以生成冪集的給定元素a的子集列表,而不必遍歷每個元素直到a?

我們可以找到一個數字的最低有效位:

n & -n

並且我們可以通過重復清除最低有效位並從原始數字恢復所有較低有效位來“倒計數”表示為位掩碼的一組子集:

def subsets(bitmask):
    current = bitmask
    while current:
        yield current
        lssb = current & -current        # find least significant set bit
        current &= ~lssb                 # clear least significant set bit
        current |= bitmask & (lssb - 1)  # restore less significant bits from original
    yield current

暫無
暫無

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

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