考虑一个 2000 x 2000 2D 布尔数组。100,000 个元素设置为 true,其余为 false。
给定一个单元格 (x1,y1),我们需要找到最近的错误单元格 (x2,y2)(按曼哈顿距离:abs(x1-x2) + abs(y1-y2))。
一种方法是:
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 个单元格才能找到空闲的单元格。
有没有我们可以使用的数据结构而不是二维数组来让我们更快地执行这个搜索?