【发布时间】:2014-03-19 20:15:45
【问题描述】:
我正在开发一个简单的生态系统模拟,但我一直在为这些生物选择最佳数据结构。
我基本上拥有的是我当前世界中所有动物的列表,其中包含有关动物类型和位置的信息。此列表可能会变得非常大 - 可能接近数百万。
所以,为了实现一些简单的 AI,我需要让这个操作尽可能快: 给定地图上的一个点和一个半径,给我一个按距中心点的距离排序的半径内所有动物的列表。
世界将是二维的,因此我们仅限于平面坐标。 我还需要支持的一些操作:
- 改变动物的位置
- 创造新动物
- 移除动物
我了解了 kd 树以及它们快速计算最近邻的能力。
问题:
你认为它会在我的情况下工作吗?如果不是,我应该使用什么数据结构来满足要求?
编辑:
以下是 cmets 中要求的更多详细信息。 世界不会太大——可以容纳一个小圆圈的动物屏幕。我还应该支持世界可能变得相当密集的情况。 最后,我希望每个查询返回不超过几十个,但因为我将有大量的这些查询(每个动物一个,这应该以某种方式缓存,但为了简单起见,我们暂时忘记这一点)这是尽可能快速高效。
【问题讨论】:
-
kd 树应该可以相当容易地获得最近的动物,我认为需要进行一些修改才能获得给定半径内的所有动物......
-
您能否提供有关该问题的更多详细信息?二维平面的大小是多少?它的预期密度是多少? (您希望每次查询返回多少只动物?几只?几十只?几千只?...?)
标签: algorithm data-structures large-data