【发布时间】:2010-11-07 21:07:39
【问题描述】:
我有一个数组 a[i][j]。元素是 char,解释为集合 {1,...,8} 的子集(如果第 k 位为 1,则元素 k 在子集中)。我认为这无关紧要,但每个元素都设置了 4 位。
每一行 a[1][j]..a[n][j] 是 {1,...,8} 的子集的集合。我需要删除重复的行,如果可以通过 {1,...,8} 的排列从另一行获得两行,则将两行视为重复行。
示例(0bxxxxxxxx 表示二进制数):
0b11000000, 0b01100000, 0b00110000
与
重复0b00110000, 0b00011000, 0b00100100
因为前者可以通过应用排列从后者得到
8->8, 7->7, 6->1, 5->4, 4->3, 3->2, 2->5, 1->6
并重新排序结果。
出于性能考虑,该数组包含大约 2000 行,每行最多包含 20 个元素。如果这可能有帮助,每一行都已经排序,并且这些行也是按字典顺序递增的。算法的其余部分是用 C 编写的,因此首选 C 解决方案。
感谢您的帮助。
【问题讨论】:
标签: c algorithm duplicate-removal