algorithm - O(n) 中的主要点集

标签 algorithm big-o time-complexity divide-and-conquer closest-points

所以,如果给定两个点 A(x1,y1) 和 B(x2,y2),并且如果 x1 <= x2 且 y1<= y2,那么我们说 B 支配 A。现在,给定很多点,我想找出所有的非支配点。简单的方法是将每个点与其他点进行比较并获得所有非支配点。但它是 O(n^2)。所以我尝试了分而治之,非常简单,我在 O(nlogn) 中找到了它。我们的教授说,它仍然可以在 O(n) 中完成。我觉得这真的不可能。我不是要你为我解决这个问题,而是想知道是否有任何“明显”的方法可以确保在任何条件下都不能在 O(n) 中完成?但是,如果真的有可能,请不要回答,也许可以提供一些线索。

最佳答案

如果点已经按其中一个坐标(例如 x 坐标)排序,则可以在 O(n) 中完成,如下所示:

  • 从最大的 x 坐标开始处理点。
    • 在浏览它们时,记录最大的 y 坐标。
    • 如果当前点的 y 坐标小于迄今为止最大的 y 坐标,则它由另一个点控制。否则,它没有被支配,所以将它添加到输出中。

如果这些点还没有排序,我认为没有 O(n) 的解决方案(但我想我们可以拭目以待)。

关于algorithm - O(n) 中的主要点集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19059878/

相关文章:

language-agnostic - 在对数时间内找到向量之间的最小角度

algorithm - MongoDB 查找和删除算法复杂性

javascript - Javascript 中的匹配算法

c++ - 为什么我们必须重载 '<' 运算符才能使用 is_permutation 并包含算法

java - 重构代码查找二叉树是否是 BST

c++ - 来自 SPOJ 的远征问题。使用堆数据结构

python - 两个递归 O(logn) 调用的大 O 运行时是多少?

算法复杂度

string - 寻求字符串处理挑战的算法(或指向文献的指针)

c++ - 提高c++中优先级队列的时间复杂度