【发布时间】:2011-03-28 22:19:29
【问题描述】:
我在做一些热心的编程时遇到了这个问题。问题可以表述如下:
对于多重集 A,令 P(A) 表示 A 的所有可能排列的集合。 P(A) 自然分为 等价的不相交子集 类,具有等价关系 “可以通过循环移位相关联”。枚举所有 这些等价类通过生成 他们每个人中只有一个成员。
例如,考虑多重集 {0, 1, 1, 2}。排列“0112”和“1201”是唯一排列,但后者可以通过循环移动前者找到,反之亦然。所需的算法不应同时生成两者。
当然,蛮力方法是可能的:只需使用任何多集排列算法生成排列(无论循环重复如何),并丢弃通过与先前结果比较发现的重复。然而,这在实践中往往效率低下。所需的算法应该需要最少的簿记,如果不是零的话。
非常感谢您对此问题的任何见解。
【问题讨论】:
标签: algorithm permutation multiset necklaces