我的问题类似于这个关于寻找漏洞的问题。
但是,我还想加入孔以形成一个连续的区域。连接两个孔的“桥”的“伸展”应该是最小的。什么是最健壮和最快的算法?
我尝试解决的问题如下:
for each row in matrix :
for each element in row :
e = element
d = a large number
for each row in matrix :
for each element in row :
f = element
if ( f != e && f != background && e != background) :
d_temp = calculate distance between e & f
if (d_temp < d) :
d = dtemp;
mark location of e & f
join the marked locations
很明显,给定大小为 N×M 的矩阵,该算法的复杂度为 O(N²M²)。
有没有更好的办法?谢谢你。
请注意,我希望算法首先是健壮的(即永远不会失败或退化) - 当满足该条件时,我希望它很快。
PS:如果相关的话,我正在使用 D。