处理矩阵边的正确方法

Correct way of handling edges of a matrix

本文关键字:方法 处理      更新时间:2023-10-16

假设我们要写一个简单的变换矩阵的程序。每个元素应该是其相邻元素的和。

考虑到矩阵的边,什么是"正确的"(即最常见的,最好的可读性,最有效的)方法?

我能想到的两种明显的方法:

  1. 首先处理角(4条单独的线),使用4个循环来处理剩余的边缘,然后使用标准循环来处理其余的
  2. 使用一个循环与if的整个矩阵来检查我们是否在中间或它是一个边缘情况。

第一个更快(我猜),但对我来说它看起来有点像4行加5个循环。

有更优雅的方式吗?我将其标记为c++,因为我目前正在用c++编码,并且我感觉三元运算符?:将派上用场,可以编写一个可爱的解决方案。

如果你的解决方案可以调整为更复杂的规则(不只是查找一个上/右/左/下单元格,但如果你正在做某种递归)。但我不确定这是否会改变很多。

一种优雅的方法是使用一个更大的矩阵。如果您的矩阵有NxM元素,创建一个临时的(N+2)x(M+2)矩阵,用零填充,然后像这样复制您的值:

temp(i+1,j+1) <</p>

现在你实际上得到了原始矩阵,它周围的边为零。现在可以安全地计算临时矩阵中所有非边缘单元格的所有邻居的和。结果将是您最初寻找的矩阵。

注意-这将比你提出的直接的五循环解决方案效率低。