假设我们有一个元素集合,并且这些元素只有相等的运算符。因此,不可能对它们进行排序。

您如何挑选出重复项,然后以最少的比较将它们放入每个组?最好在C++中使用,但是算法比语言更重要。对于给定的示例{E1,E2,E3,E4,E4,E2,E6,E4,E3},我希望提取出{E2,E2},{E3,E3},{E4,E4,E4}。您将选择哪种数据结构和算法?

编辑

在我的场景中,如果二进制数据1等于二进制数据2,我们可以说这两个元素是相同的。但是,只有 = != 是合乎逻辑的

element 1:

4 0 obj
<< /Type /Pages /Kids 5 0 R /Count 1 >>
stream
.....binary data 1....
endstream
endobj

element 2:

5 0 obj
<< /Type /Pages /Kids 5 0 R /Count 1 >>
stream
.....binary data 2....
endstream
endobj

最佳答案

找到任意谓词P就足够了,这样P(a,a)==falseP(a,b) && P(b,a)==falseP(a,b) && P(b,c)表示P(a,c)!P(a,b) && !P(b,a)表示a == b。少则满足,然后再满足。但是它们远非唯一的可能性。

现在,您可以按谓词P对集合进行排序,所有相等的元素将相邻。根据您的情况,定义P(E1,E2)=true, P(E2,E3)=true等。

关于c++ - [仅相等运算符]在集合中查找重复元素并将其分组的快速算法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17740402/

10-11 16:13