考虑一个2000 x 2000 2D布尔数组。将100,000个元素设置为true,其余为false。给定一个单元格(x1,y1),我们需要找到最接近的单元格(x2,y2)(曼哈顿距离:abs(x1-x2)+ abs(y1-y2)),这是错误的。要做到这一点最近空闲单元格的2D网格数据结构
一种方法是:
for (int dist = 0; true; dist++)
for ((x2,y2) in all cells dist away from (x1,y1))
if (!array[x2,y2])
return (x2,y2);
在最坏的情况下,我们必须找到一个免费通过前100,000个细胞进行迭代。
是否有我们可以使用的数据结构,而不是使用我们可以更快地执行此搜索的2D数组?
数组是否会被更新?你会做很多搜索吗? –
数组是否为常量,并且您有很多疑问?或者它是每个数组问题的一个查询?如果只打算使用一次,那么创建聪明的数据结构确实没有意义。 – amit
对不起,是的,数据会发生变化 - 一旦找到一个单元格,它就会被标记为真。 –