微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python的2D圆形范围搜索找到圆形中的所有点库?

如何解决python的2D圆形范围搜索找到圆形中的所有点库?

所以问题如下:给定数据库中的 N 个点(编辑:暂时假设它是 2 个数组 x[] 和 y[]),每个数组的坐标为 (x[i],y[i]) ,以及格式为 (X,Y,R)查询,列出圆心为 (X,Y),半径为 R 的所有点。

编辑 - 输入约束: x=[-180,180],y=[-180,180]

哪个 Python 库可以最快的方式解决这个问题?我正在寻找每个查询O(log(N) + K) 时间复杂度和 <= O(n * log(N)^2) 空间要求,其中 K输出长度。

解决方案 0: 循环N个点,用毕达哥拉斯检查。

-> 内存:O(N)。每个查询的时间:O(N)

解决方案 0.1: 同上,但添加一些小东西,例如按 x 排序,并使用二分搜索开始仅搜索坐标为 x[i] >= X - R 的点。使用平方距离代替距离等

-> 每个查询的时间:仍然 O(N) 但更快

解决方案 1 四叉树。假设点以 (0,0) 为中心。树的根节点在 (0,0) 处,包含二维空间 (x=[-inf,inf],y=[-inf,inf])。每个节点有 4 个孩子:每个孩子包含父亲的 1/4 象限。因此,每当我们下降一个级别时,搜索空间就会减少 75%。继续往下走,直到当前节点在查询圈之外,或者不包含数据点。 -> 记忆:也许O(n * log(N)^2)? ,时间:~~O(log(N)^2)

他们是否有任何已经解决此问题的 Python 库?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?