如何从2D数组中提取丛集数据?

时间:2015-01-04 11:17:03

标签: arrays algorithm

我有一个1024x1024阵列,二进制值0或1,由噪声算法生成1s总是成组聚集。 可视化它,就像一个0s的平面,岛屿为1s。

我想将1个岛中的任何一个岛提取到一个新的列表中(我碰巧使用的是C#,但任何容器都可以)。如果一个岛屿的3x3邻居没有与另一个岛屿重叠,则该岛屿被认为是独立的。

听起来这可能是一个常见问题,但我不知道要搜索的任何候选算法的名称。

我现在通过检查触摸的每个点及其邻居来做暴力。

有更快的方法吗?

由于

1 个答案:

答案 0 :(得分:1)

Flood-Fill每个“1”获得它所属的“岛屿”。重复所有1。复杂性与矩阵的大小呈线性关系。

高效的伪代码可以是:

 1. set <- new Set
 2. for each cell (i,j) in matrix, if matrix[i][j] == 1:
     2.1. set.add(i,j)
 3. while set is not empty:
   3.1. island <- floodFill(i,j) // start flood fill from i,j
   3.2. set.removeAll(island) //remove already found 1's
   3.3. yield island