在做一些热心的编程时遇到了这个问题。问题可以表述如下:
For a multiset A, let P(A) denote the set of all possible permutations of A. P(A) is naturally divided into disjoint subsets that are equivalence classes, with the equivalence relation being "can be related by circular shifts." Enumerate all these equivalence classes by generating exactly one member from each of them.
例如,考虑多重集 {0, 1, 1, 2}。排列“0112”和“1201”是唯一排列,但后者可以通过循环移位前者找到,反之亦然。所需的算法不应同时生成两者。
当然,一种蛮力方法是可能的:只生成排列——不管循环重复——使用任何多集排列算法,并丢弃通过与以前的结果比较发现的重复。然而,这在实践中往往效率低下。所需的算法应该需要最少的簿记,如果不是零的话。
非常感谢对此问题的任何见解。
最佳答案
关于algorithm - 是否有一种算法可以生成多重集的所有唯一循环排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3467914/