我们有一个(w次h)画布(宽度w和高度h),用作绘图区域。我们可以在绘图区域中定义“贴图”或区域,用户可以在其上单击以执行某些预定义的任务。每个区域由边界矩形定义。当用户在其中单击时,将激活图像映射。两个区域可能具有重叠的矩形。每当用户点击画布上的点时,我们都需要找到该点所属的图像映射并开始执行相应的任务。我们总是可以使用线性列表来查找图像映射。但有没有更好的方法,一种可用于存储图像映射的数据结构,以便我们可以有效地计算(在少于O(n)时间内)用户点击激活哪些图像映射?
答案 0 :(得分:3)
是 - 使用任何类型的2D空间索引。最常见的是quad-tree,它具有O(log(n))查找复杂性,并且构建起来也非常快。实施以所有主要语言提供;它广泛用于所有类型的地图应用。
答案 1 :(得分:0)
您可以创建某种优化以使平均工作时间更短,但效率仍然 O(n),因为用户点击可能会执行所有 N 可能的任务。