[英]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.