我有一个整数类型的二维向量,它包含大量的向量(即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);
}
但是,由于我正在做大量的比较,这并不能有效地完成这个过程。有没有可行的有效方法呢?
答案 0 :(得分:0)
从(子)向量的规范化(此处,已排序)版本中构建set
或unordered_set
。然后,您可以在 O ( mn log m log n )时间内找到所有重复项,其中 m 和 n 分别是数据的外部和内部维度。
您可能希望映射代替,例如,存储每个等价类的第一个代表的索引。您可以使用reserve
从unordered_set
运行时删除日志 m 。
答案 1 :(得分:0)
制剂
从i = 0开始
递归算法:
每个桶: