我知道一些范围搜索数据结构,例如kd-tree,Range tree和quad-tree。 但是所有的实现都在内存中,我如何在具有高性能I / O效率的二级存储器上实现它们呢?
以下是条件:
1):二维上的一组静态点。
2):仅用于查询,无插入或删除。
3):适应二次记忆。
感谢。
答案 0 :(得分:2)
如果你可以在施工期间将树放入记忆中:
构建kd-tree。
从下到上,收集尽可能多的点,使其适合您的硬件大小。
将数据写入此块。
重复2.-3。递归地,直到您将所有数据写入磁盘。
查询时,从磁盘加载页面,处理树的这一部分,直到您到达另一页的引用。然后加载此页面并继续。
或者,您可以自上而下执行相同操作,但随后可能需要更多磁盘空间。在上面的方法中,只有根页可以接近空。