假设我们有一个元素集合,而这些元素只有等号运算符。所以,对它们进行分类是不可能的
你如何挑选出那些重复的,并将它们放入每组中,进行最少的比较?最好用C++,但算法比语言更重要。对于给定的例子{E1,E2,E3,E4,E4,E2,E6,E4,E3},我希望提取出{E2,E2},{E3,E3}、{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)==false
、P(a,b) && P(b,a)==false
、P(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
等。
对于你的答案,尽管我不能100%确定你只想要这个。
如果你想要好的算法,试试Binary search tree
创建。因为它是一个组,根据BST properties
可以轻松地对元素进行分组。
例如
BST()
{
count = 0;
if(elementinserted)
count = 1;
if(newelement == already inserted element)
{
count++;
put element in array upto count value;
}
}
我希望这个解释能对你有所帮助。
如果你所拥有的只是一个平等测试,那么你就没有希望了。
假设您有一种情况,其中每个元素都是唯一的。还有一个只有两个元素是重复的。
有第二种类型的CCD_ 12。每一种只能通过特定的比较来与第一种区分开来。这意味着在最坏的情况下,你必须进行所有的n(n+1)/2
比较:对所有配对进行激烈搜索。
你需要做的是弄清楚你还能做什么,因为只有平等是极为罕见的。