[唯一相等运算符]在集合中查找重复元素并将其分组的快速算法是什么



假设我们有一个元素集合,而这些元素只有等号运算符。所以,对它们进行分类是不可能的

你如何挑选出那些重复的,并将它们放入每组中,进行最少的比较?最好用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)==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等。

对于你的答案,尽管我不能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比较:对所有配对进行激烈搜索。

你需要做的是弄清楚你还能做什么,因为只有平等是极为罕见的。

相关内容

  • 没有找到相关文章

最新更新