- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个包含约 30k 个位置的列表 L(写为经度/纬度对),以及一个包含约 1m 个事件的列表 E(包含写为经度/纬度对的位置),每个事件都发生在 L 中的一个点。我想用 L 中对应的位置标记 E 中的每个事件。但是 L 和 E 中的坐标四舍五入不同——E 到小数点后五位,L 到十三位——所以表面上相同的坐标实际上可能相差 ~10^-5 度, 或 ~1 米。 (L 中的点至少间隔 ~10 m。)
因此,我需要 L 中与 E 中每个点最近的点;明显的 O(|L||E|) 蛮力算法太慢了。与 E 相比,L 足够小,因此预处理 L 并将预处理时间分摊到 E 上的算法很好。这是一个经过充分研究的问题吗?我能找到的链接是针对相关但不同的问题,例如找到一组中一对点之间的最小距离。
可能相关:Voronoi diagrams ,尽管我看不出将 L 预处理成 Voronoi 图会如何节省我的计算时间。
最佳答案
是的,你是对的。首先,您可以使用 Furtune's Sweep Line 在 O(|L| log |L|) 时间内构建位置点集 L 的 Voronoi 图。方法。可以使用各种实现,Triangle将是最常见的。
现在你有了一个 O(|L|) 大小的平面分割。要允许 O(log |L|) 最近邻查询,您需要在 Voronoi 图顶部有一个搜索结构。一种常见的方法是使用 Dobkin-Kirkpatrick 层次结构,详细信息可以在各种 lecture notes 中找到。 .此方法支持 O(log |L|) 查询,也只需要 O(|L|) 大小。 (也在 this post 中提到。)
然后 |E|查询可以在 O(|E| log |L|) 时间内完成。
另一种方法是使用 k-d trees .从实现的角度来看,它们可能工作更少,并且提供相同的复杂性(据我所知)。快速搜索显示这两个可能值得测试的实现:C++ , Java .
关于algorithm - 寻找有限集中到另一点最近点的有效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43372780/
我有一个关于复杂性的简单问题。我在 Java 中有这段代码: pairs是 HashMap包含 Integer作为键,它的频率为 Collection作为一个值。所以: pairs = new Has
对于我的应用程序,我需要在 Coq 中使用和推理有限映射。谷歌搜索我发现 FMapAVL 似乎非常适合我的需求。问题是文档很少,我还没有弄清楚我应该如何使用它。 作为一个简单的例子,考虑以下使用对列表
我有一个主表tblAssetMaster A和一个移动表tblMovement M。 我想提取所有 Assets 及其当前位置,因此需要获取每个 Assets 的最新移动条目。 字段 A: Asset
我想让我的网站内容居中,但仅限于网页的特定宽度。所以当它超过 500px 时,我希望内容被修复,无法进一步拉伸(stretch)。无论如何都要这样做,还是我最好把所有东西都修好?希望有意义的是添加一些
我正在尝试批量删除 Backbone 模型的集合,如下所示...... collection.each(function(model, i){ model.destroy(); }); 我发现当每
我想要一个软件环境,在其中我可以在具有特定资源的硬件上测试我的软件的速度。例如,当我的主机硬件是具有 12GB RAM 的 3GHz 四核 amd64 时,该程序在具有 24 Mb RAM 的 800
在 Eclipse 中,我得到了 BigInteger.valueOf(2).pow(31093) 的值,但没有得到 BigInteger.valueOf(2).pow(31094) 的值(它是空的)
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
我想将 2 个表从本地 sql server 2000 上传到托管的 mysql。第一个表有 17 列和 680 行,其他 10 列和 8071 行。 我首先使用 xampp mysql 尝试离线,它
我在 S3 中自动生成并保存了静态 html 文件。有时文件大小达到 2mb。是否可以使用javascript来获取html文件的一部分,显示它,当用户到达页面底部时,获取下一部分等等? 最佳答案 X
我是一名优秀的程序员,十分优秀!