如何在没有迭代的情况下计算黑色单元格(位图?)

时间:2018-03-29 11:35:31

标签: algorithm function matrix bitmap

暂时遇到问题,希望你们中有些人有想法。 给定二进制值(0/1)的矩阵大小N * M,得到一个返回1的数的方法,这比简单地迭代矩阵更有效。

我认为关键是位图。考虑分配新的N * M矩阵并操纵这两个...尚未得到解决方案。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

从理论的角度来看,除非矩阵具有特殊属性,否则必须测试所有N.M元素,这可以通过循环实现。因此,这种结构是最佳和无与伦比的。

在实践中,也许您正在寻找一种方法,从一个处理单个元素的天真实现中获得一些加速。答案将高度依赖于元素的存储格式和处理器架构。

如果每个字节打包8个位,则可以为每个可能的字节值设置一个位计数查找表。这产生了x8的潜在加速。

如果你知道黑区只是连接(没有洞),那么没有必要访问它们的内部,一个轮廓算法就足够了。但你还是要扫描白色区域。这允许打破N.M限制并减少到Nw + Lb,其中Nw是白色像素的数量,Lb是黑色轮廓的长度。

如果另外你知道有一个简单连接的黑色区域,并且你知道一个黑色轮廓像素,那么复杂度会下降到Lb,这可能比N.M小得多。