【问题标题】:dynamic space partitioning tree data structures?动态空间分区树数据结构?
【发布时间】:2014-06-11 11:06:34
【问题描述】:

我有一个应用程序,我需要针对动态变化的数据(全二维)进行最近邻、矩形/多边形重叠和其他基本计算几何操作。我了解静态情况下的基本数据结构(四叉树、二维Kd-trees、R-trees、BSP 等),但我想了解动态情况下的最新技术。困难似乎在于知道何时/如何平衡插入和删除。例如,是否有一个动态数据结构可以针对 O(log n + k) 中的 n 个点回答 k-最近邻,其中插入和删除需要 O(log n)(可能摊销)?是否有标准参考资料总结了有关此问题的已知信息?

【问题讨论】:

  • 你找到合适的数据结构了吗?我很高兴听到你在这方面的进展。谢谢

标签: algorithm geometry theory computational-geometry


【解决方案1】:

说实话,我自己对动态树(大部分是静态的)并没有做太多。但我相信 Bkd-tree 论文(2000 年代早期?)是一个很好的起点。我相信从那以后它已经被引用了很多次。您可以使用 acm/citeseer 之类的资源来跟踪引用它的新论文。旁注:我认为 Bkds 有可用的公共代码,因此您可以在不投入太多时间的情况下使用它 - 看看它是否适合您。

Bkd-Tree:动态可扩展的 kd-Tree Octavian Procopiuc、Pankaj K. Agarwal、Lars Arge 和 Jeffrey Scott Vitter

【讨论】:

  • 谢谢!我实际上简要地看了那篇论文,但它没有深入挖掘,因为它解决了在外部(磁盘上)空间数据库中的搜索。 “在本文中,我们提出了 kd-tree 对外部存储器的第一个理论上和实践上有效的动态适应。”我再看看。
【解决方案2】:

你可以试试怪物曲线(空间填充曲线)。一种快速算法是简单地交错 x 和 y 坐标。 3维也可以。

【讨论】:

  • 我不明白你的第一个建议。能否详细说明或提供参考?交错 x 和 y 是标准的 kd-tree 结构。这并没有解释如何保持树的平衡。
  • 当然,但它是一棵树。我的意思是交错坐标。无论如何看这里msdn.microsoft.com/en-us/library/bb259689.aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2012-09-13
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 2010-10-30
  • 2010-10-30
相关资源
最近更新 更多