我有一个函数必须做两件事:
- 遍历
n*n*n
数组 - 根据阵列的状态更新引脚
此功能将重复运行。
我有两种算法来执行该功能:
-
首先,它遍历整个阵列,具有复杂度
Th(n**3)
,但具有最小的digitalWrite
运算,大致为Th(n)(因为某些引脚状态取决于相邻的引脚状态)。 -
其次,它遍历数组的部分并具有
Th(n**2)
,但它具有最大的digitalWrite
操作Th(n**2)
。
我的问题:
-
对于小型
n
,我采取哪种方法有关系吗? -
与三维阵列访问操作相比,
digitalWrite
操作的成本有多高?(由于优化了其中一个,导致对另一个的呼叫增加。)
如果不了解您的特定函数,这是不合理的。甚至还不清楚这是否重要。一般来说,对于性能问题,正确的方法是同时实施和测量。特别是对于小n,你不能从理论中得到这样的东西。
我的建议是选择更容易实现和理解的算法。一旦它起作用,您可以尝试性能是否足够。如果它是好的。问题解决了。否则,您可以开始调整和优化。
如果digitalWrite性能是一个问题,您总是可以求助于直接端口操作。但正如我已经说过的:首先让它发挥作用。
如果数组遍历是一个问题,您可以始终将数组映射到较低维度的数组中,并调整遍历函数。通常这也会导致性能的提高。