algorithm - 是否有一种算法可以生成多重集的所有唯一循环排列?

标签 algorithm permutation multiset necklaces

在做一些热心的编程时遇到了这个问题。问题可以表述如下:

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/

相关文章:

python - Networkx 哈密顿循环

algorithm - Matlab 中的排列函数

python - 过滤一组以匹配字符串排列

list - Guava Multiset 和 Multimap

c++ - 这段代码是如何工作的? (多集排序)

arrays - 计算导航 2d map (数组)的方向(向量)

algorithm - 非二进制字母表的哈夫曼树?

c++ - 有序元素的最佳容器

c++ - 如何从大文本文件中选择行数?

javascript - 在 Javascript 中有效地计算 Josephus 排列