我有vector < vector <int> >
这样:
v = {{1,2,3}, {4,2,1}, {3,1,1}....}}
v
,v[0]
,v[1]
等所有v[2]
个元素都具有相同的大小。可能存在重复的元素。
我要做的是查找和删除被另一个向量“重要”的向量(如v[2]
),如v[1]
),即v[1]
的所有元素都是大于/等于v[2]
中各个元素(按索引的顺序)。
这样做的一种天真的方法是循环通过v
并将每个向量与另一个向量进行比较,并进一步将每个元素与另一个向量的元素进行比较。
但是我认为必须有一个更好的方法来实现这一点,而不会在O(n^3)
中的所有向量的元素数量中获得v
。
如果多个向量相等,我只需要其中一个(即删除除一个之外的所有向量)。随机选择就足够了。
感谢任何想法或想法!
答案 0 :(得分:1)
这称为maxima of a point set。对于二维和三维,这可以在O(n log n)时间内求解。对于三维以上,这可以在O(n(log n)^(d - 3)log log n)时间内求解。对于随机点,可以使用线性预期时间算法。