【发布时间】:2015-01-21 00:19:36
【问题描述】:
我有一组房间和通道,我可以将它们转换为矩形 (x,y,width,height) 或点列表 (x,y)。 Room 和 Passage 都扩展了 Pointable 接口。为 Room 类实现 getPoints() 方法
public Set<Point> getPoints() {
Set<Point> array = new HashSet<Point>();
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
array.add(new Point(x + i, y + j));
}
}
return array;
}
问题:
我必须识别给定Point 所属的Pointable。没有房间相交。我最初使用HashMap<Point,Pointable> 将每个Point 关联到Pointable,它能够在O(n) 时间内快速访问答案。但是,现在需要在一个关卡的生成中多次重新计算HashMap。
此时使用HashMap是不是更高效(考虑到生成和访问) 还是应该使用其他方法,例如一组二维区间树?
【问题讨论】:
-
您也许可以为此实现R-Tree。
-
R-Tree 的唯一问题可能是通道过长,这会增加矩形的大小并降低效率。
标签: java search optimization hashmap interval-tree