找到最近的" true" 2D布尔矩阵中的元素?

时间:2016-11-17 15:51:31

标签: algorithm matrix language-agnostic boolean closest-points

我有一个带有布尔值的二维矩阵,它经常更新。我想在矩阵中选择一个二维索引{x,y},找到最近的元素" true"在表中,没有经过所有元素(矩阵很大)。

例如,如果我有矩阵:

0000100
0100000
0000100
0100001

我选择一个坐标{x1, y1},例如{4,3},我想要返回最近的" true"的位置。值,在这种情况下是{5,3}。使用标准的毕达哥拉斯方程测量元素之间的距离:

distance = sqrt(distX * distX + distY * distY)其中distX = x1 - xdistY = y1 - y

我可以浏览矩阵中的所有元素并保留一个" true"值并选择具有最短距离结果的值,但效率极低。我可以使用什么算法来缩短搜索时间?

详细信息:矩阵大小为1920x1080,每帧大约需要25个查询。每帧都更新整个矩阵。我试图保持合理的帧速率,超过7fps就足够了。

2 个答案:

答案 0 :(得分:1)

如果总是更新矩阵,那么就不需要建立一些辅助结构,如距离变换,Voronoy图等。

您可以执行搜索,例如从查询点传播的BFS(面包优先搜索)。与通常的BFS的唯一区别是欧几里德指标。因此,您可以按(u, v)生成(u^2+v^2)对,并检查(+-u,+-v),(+-v,+-u)组合移位的对称点(uv为零时为4分,否则为8分) )

答案 1 :(得分:0)

您可以使用四叉树之类的树数据结构(请参阅https://en.wikipedia.org/wiki/Quadtree)来存储值为" true"的所有位置。通过这种方式,应该可以快速迭代所有" true"给定位置附近的值。此外,如果位置的值发生变化,则可以在对数时间内更新树。