2014-12-08 56 views
0

我知道一些范围搜索数据结构,例如kd-tree,Range树和quad-tree。 但是所有的实现都在内存中,我如何在高性能I/O效率的辅助内存上实现它们?二级存储器上的KD树?

这里是条件:

1):一组静态上的两个尺寸点。 2):仅用于查询,不插入或删除。

3):适应二级存储器。

谢谢。

回答

1

如果你能在施工期间适应树到内存:

  1. 构建kd树。

  2. 底部向上收集尽可能多的点以适合您的硬件尺寸块。

  3. 将数据写入此块。

  4. 重复2.-3。直到您将所有数据写入磁盘。

查询时,从磁盘加载页面,处理这部分树,直到您到达对另一页的引用。然后加载此页面并继续。

或者,你可以做同样的自顶向下,但是你可能需要更多的磁盘空间。在上述方法中,只有根页面可以接近空白。

+0

我知道你的意思。首先这听起来很难实现它,对吧?其次有许多细节需要关注。例如,如何维护磁盘页面中的树形状。 – 2014-12-09 03:17:58

+0

是的,这并不容易。 R树更好,因为它已经是面向磁盘页面的。 – 2014-12-09 08:57:26