生成对称排列

时间:2018-07-09 02:31:45

标签: algorithm permutation pseudocode

我有一个字母组合的不同列表

{{"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=bb=a从第二个开始进入第一个。

我需要做的是生成列表的所有排列,这些排列与原始列表或集合中的任何其他列表不对称。我希望该算法尽可能快。

我知道Heap's Algorithm用于生成置换,并且可以很容易地生成置换-但是我感觉像是生成置换然后遍历每个元素,并检查它是否与其他所有元素对称是非常低效的( O (n!)+ O (n ^ 2))。

最快的方法是什么?甚至没有任何算法可以实现它?

0 个答案:

没有答案