擅长:python、mysql、java
<p>这里有一种方法。可以进行很多微观优化,但它们的效果将取决于所涉及的大小。</p>
<pre><code>import collections as co
import itertools as it
def unique(list_):
return len(set(list_)) == len(list_)
def get_combos(branches):
by_parent = co.defaultdict(list)
for branch in branches:
by_parent[branch.p].append(branch)
combos = it.product(*by_parent.values())
return it.ifilter(lambda x: unique([b.c for b in x]), combos)
</code></pre>
<p>我很确定这至少达到了最佳的复杂度,因为我看不出有什么方法可以避免看到父级所特有的每个组合。</p>