簡體   English   中英

用Python計算數組的冪集最快的方法是什么?

[英]What is the fastest way of computing powerset of an array in Python?

給定一個數字列表,例如x = [1,2,3,4,5]我需要計算其冪集(該列表的所有子集的集合)。 現在,我正在使用以下代碼來計算功率集,但是當我有大量此類列表時(例如此類數組的40K),它的運行速度非常慢。 因此,我想知道是否有任何方法可以加快速度。

superset = [sorted(x[:i]+x[i+s:]) for i in range(len(x)) for s in range(len(x))]

我也嘗試了以下代碼,但是它比上面的代碼慢得多。

from itertools import chain, combinations

def powerset(x):
    xx = list(x)
    return chain.from_iterable(combinations(xx, i) for i in range(len(xx)+1))

通過讓所有子集將原始集合作為列表引用,並使每個子集包含一個數字,這些數字的位指示其包含在集合中,可以更有效地表示功率集。 因此,您可以通過計算元素的數量,然后迭代具有這么多位數的整數來枚舉功率集。 但是,正如注釋中所指出的那樣,功率集的增長非常快,因此,如果您可以避免必須對功率集進行計算或迭代,則應盡可能這樣做。

暫無
暫無

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

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