首页 > 解决方案 > 算法咨询:方格检查条件

问题描述

假设我有一张看起来像

x x x x
x x x x
x x x x

尺寸可能会发生变化,但请大致了解一下。

我很好奇是否有一种算法可以帮助我快速检查我正在查看的当前点是否是一个角/四个边之一上的点/正方形本身,以及帮助我​​检查该点周围的所有点我目前正在看。

我目前的方法就像编写一些辅助函数,分别检查当前坐标是否是角/四个边之一上的点/正方形本身?在每个辅助函数中,我使用几个循环来检查我当前正在查看的点周围的所有相邻点。但是我觉得这种方法非常无效,我相信一定有更高级的方法可以做到这一点,如果您以前遇到过这种问题,有人可以帮助我吗?

谢谢。

标签: algorithmloopsif-statement

解决方案


很大程度上你是正确的,但应该不需要使用循环。您可以通过使用一些索引计算和直接访问一维数组来提高函数的效率。

想象一下,您的图像存储在一维数组 D 中。图像是size (m,n). 因此数组的大小为m x n。每个数据点都有其 ID 作为数组 D 的索引。

要访问 ID = a 的邻居,请使用以下偏移量: a-1, a+1左右邻居 a-m, a+m底部和顶部邻居 a-m+1, a-m-1, a+m+1, a+m-1对角线邻居

每次偏移后,您需要检查以下内容:

  1. 数组 D 的邻居索引是否超出范围?

  2. 邻居索引是否环绕 x 边界,即断言

abs((neighbor_id % m)-(a%m)) <= 1,否则neighbor_id不是我的邻居。

当然,第二个测试假设您的图像足够大(也许m > 3)。


推荐阅读