我有一个字母组合的不同列表
{{"a"}, {"b"}, {"c"}, {"a", "b"}, {"a", "c"}, {"b", "c"}}
他们没有模式-对这个问题并不重要。如果在替换下它们是相同的,我们称此列表为对称的排列,即,您可以通过将a更改为b并将b更改为c,或将b更改为a并将a更改为b来从另一个列表获取等等。例如,上面的列表与以下位置对称:
{{"b"}, {"a"}, {"c"}, {"b", "a"}, {"b", "c"}, {"a", "c"}}
因为您可以使用a=b
,b=a
从第二个开始进入第一个。
我需要做的是生成列表的所有排列,这些排列与原始列表或集合中的任何其他列表不不对称。我希望该算法尽可能快。
我知道Heap's Algorithm用于生成置换,并且可以很容易地生成置换-但是我感觉像是生成置换然后遍历每个元素,并检查它是否与其他所有元素对称是非常低效的( O (n!)+ O (n ^ 2))。
最快的方法是什么?甚至没有任何算法可以实现它?