繁体   English   中英

比较大型数据集中的向量

[英]comparing vectors in a large data set

我有一个整数类型的二维向量,其中包含大量向量(即18000及以上),并且在此池中有大量重复向量。 我要做的是检测相似的向量并删除其中之一。 我现在正在做的是使用以下函数将每个向量与整个池进行比较:

bool compareVectors(vector<int> a, vector<int> b)
{
    if (a.size() != b.size())
    {
        return false;
    }
    sort(a.begin(), a.end());
    sort(b.begin(), b.end());
    return (a == b);
}

但是,由于我进行了大量的比较,这大概不能有效地完成该过程。 有没有可能有效的方法来做到这一点?

从(子)向量的规范化(此处为排序)版本中构建一个setunordered_set 然后,您可以在Omn log m log n )时间中找到所有重复项,其中mn分别是数据的外部和内部维度。

您可能希望使用映射来存储每个等效类的第一个代表的索引。 您可以使用reserveunordered_set运行时间中删除日志m

准备工作:

  1. 首先根据大小将向量分类到存储桶中。
  2. 仅带有一个向量的存储桶意味着该向量是唯一的,输出并删除的。
  3. 排序剩余存储桶中的所有剩余向量

从i = 0开始

递归算法:

对于每个桶:

  1. 根据v。(i)将向量分类到存储桶中
  2. 仅包含一个向量的存储桶意味着该向量是唯一的,可以输出并删除
  3. 递归到i = i + 1的每个存储桶

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM