考慮一個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
對不起,是的,數據會發生變化 - 一旦找到一個單元格,它就會被標記爲真。 –