C ++:检查向量中的元素是不是大于另一个具有相同索引的元素的有效方法?
Posted
技术标签:
【中文标题】C ++:检查向量中的元素是不是大于另一个具有相同索引的元素的有效方法?【英文标题】:C++: Efficient way to check if elements in a vector are greater than elements in another having same indices?C ++:检查向量中的元素是否大于另一个具有相同索引的元素的有效方法? 【发布时间】:2017-07-04 18:20:52 【问题描述】:我有一个像这样的vector < vector <int> >
:
v = 1,2,3, 4,2,1, 3,1,1....
v
的所有元素(如 v[0]
、v[1]
、v[2]
...)都具有相同的大小。可能有重复的元素。
我要做的是找到并删除被另一个向量(如v[1]
)“主要化”的向量(如v[2]
),即v[1]
的所有元素都大于/等于v[2]
中的各个元素(按索引顺序)。
这样做的一种天真的方法是循环遍历v
并将每个向量与另一个向量进行比较,并进一步将每个元素与另一个向量的元素进行比较。
但我觉得必须有更好的方法来做到这一点,而不会在v
中所有向量的元素数量中获得O(n^3)
。
如果多个向量相等,我只需要其中一个(即删除除一个之外的所有向量)。随机选择就足够了。
感谢任何想法或想法!
【问题讨论】:
【参考方案1】:这称为maxima of a point set。对于二维和三维,这可以在 O(n log n) 时间内解决。对于超过三个维度,这可以在 O(n(log n)^(d − 3) log log n) 时间内解决。对于随机点,可以使用线性预期时间算法。
【讨论】:
谢谢! wiki 页面上的算法有所帮助。以上是关于C ++:检查向量中的元素是不是大于另一个具有相同索引的元素的有效方法?的主要内容,如果未能解决你的问题,请参考以下文章