擅长:python、mysql、java
<p>也许通过降低长度顺序对集合进行排序将使每个集合中每个簇的交叉点数量减少到一个。这将取决于数据,如果没有子集也不会改善,但随着集群的扩大,情况应该会有所改善:</p>
<pre><code>setList = [{1, 2}, {1, 2, 3}, {1, 2, 4}, {1, 4}, {1}]
groups = []
for aSet in sorted(setList,key=len,reverse=True):
clusters = [g for g in groups if g[0].issuperset(aSet)]
if not clusters:
groups.append([])
clusters = groups[-1:]
for g in clusters:
g.append(aSet)
print(groups)
[[{1, 2, 3}, {1, 2}, {1}], [{1, 2, 4}, {1, 2}, {1, 4}, {1}]]
</code></pre>