问题描述
所以问题如下:给定数据库中的 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 (将#修改为@)