C ++:检查向量中的元素是否大于另一个具有相同索引的元素的有效方法?

时间:2017-07-04 18:20:53

标签: c++ vector comparison

我有vector < vector <int> >这样:

v = {{1,2,3}, {4,2,1}, {3,1,1}....}}

vv[0]v[1]等所有v[2]个元素都具有相同的大小。可能存在重复的元素。

我要做的是查找和删除被另一个向量“重要”的向量(如v[2]),如v[1]),即v[1]的所有元素都是大于/等于v[2]中各个元素(按索引的顺序)。

这样做的一种天真的方法是循环通过v并将每个向量与另一个向量进行比较,并进一步将每个元素与另一个向量的元素进行比较。

但是我认为必须有一个更好的方法来实现这一点,而不会在O(n^3)中的所有向量的元素数量中获得v

如果多个向量相等,我只需要其中一个(即删除除一个之外的所有向量)。随机选择就足够了。

感谢任何想法或想法!

1 个答案:

答案 0 :(得分:1)

这称为maxima of a point set。对于二维和三维,这可以在O(n log n)时间内求解。对于三维以上,这可以在O(n(log n)^(d - 3)log log n)时间内求解。对于随机点,可以使用线性预期时间算法。