比较大数据集中的向量

时间:2018-04-30 10:12:02

标签: c++ vector comparison large-data

我有一个整数类型的二维向量,它包含大量的向量(即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);
}

但是,由于我正在做大量的比较,这并不能有效地完成这个过程。有没有可行的有效方法呢?

2 个答案:

答案 0 :(得分:0)

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

您可能希望映射代替,例如,存储每个等价类的第一个代表的索引。您可以使用reserveunordered_set运行时删除日志 m

答案 1 :(得分:0)

制剂

  1. 首先根据大小将您的矢量分类到桶中。
  2. 只有一个向量的存储区意味着向量是唯一的,输出和删除。
  3. 对剩余存储桶中剩余的所有向量进行排序
  4. 从i = 0开始

    递归算法:

    每个桶:

    1. 根据v。(i)
    2. 将向量分类到桶中
    3. 只有一个向量的存储区意味着向量是唯一的,输出和删除
    4. 使用i = i + 1
    5. 递归到每个桶中