擅长:python、mysql、java
<p>一组N个项目的所有非空子集的列表(所有物种的集合)是2<sup>N</sup>-1</p>
<p>这是因为它就像一个由N位组成的二进制数,每个位可以是1(取子集中的物种)或0(从子集中排除该物种)。-1排除空集(所有位0)</p>
<p>因此,您可以使用一个简单的整数循环来枚举所有种类的子集:</p>
<pre><code># sample data
listOfAllSpecies = ['A', 'B', 'C']
# enumerate all subsets of listOfAllSpecies, 0 excluded (the empty set)
for bits in range(1, 2**len(listOfAllSpecies)):
# build the subset
subset = []
for n in range(len(listOfAllSpecies)):
# test if the current subset includes bit n
if bits & 2**n:
subset.append(listOfAllSpecies[n])
# see which groups contain the given subset
print "species", ",".join(subset), "are in groups TODO"
</code></pre>
<p>结果:</p>
<pre><code>species A are in groups TODO
species B are in groups TODO
species A,B are in groups TODO
species C are in groups TODO
species A,C are in groups TODO
species B,C are in groups TODO
species A,B,C are in groups TODO
</code></pre>
<p>如果还需要代码来测试组是否包含子集,则需要指定组在程序中的存储方式。你知道吗</p>
<p><strong><em>如果此帖子回答了您的问题,您应该单击绿色复选标记✔ 在左上角。</em></strong></p>