0

我有一个必须做两件事的功能:

  • 遍历n*n*n数组
  • 根据阵列状态更新引脚

此功能将重复运行。

我有两种算法来执行函数的工作:

  • 首先,它遍历整个数组并且具有复杂性Th(n**3),但它的digitalWrite操作最少,大致为 Th(n)(因为某些引脚状态取决于相邻引脚状态)。

  • 其次,它遍历数组的某些部分并且具有Th(n**2),但它具有最大digitalWrite操作数Th(n**2)

我遇到的问题:

  • 对于 small n,我采用哪种方法是否重要?

  • digitalWrite与三维数组访问操作相比,一个操作的成本是多少?(作为优化一个,会导致对另一个的调用增加。)

4

1 回答 1

0

如果不了解您的具体功能,则无法合理回答。甚至不清楚它是否重要。一般来说,对于性能问题,正确的方法是同时实施和测量。特别是对于小 n,您无法从理论中得出这样的结论。

我的建议是选择更易于实现和理解的算法。一旦它起作用,您可以尝试性能是否足够。如果这样就好了。问题解决了。否则,您可以开始调整和优化。

如果 digitalWrite 性能是一个问题,您总是可以退回到直接端口操作。但正如我已经说过的:首先让它工作。

如果数组遍历是一个问题,您始终可以将数组映射到低维数组并调整您的遍历函数。这通常也会导致性能改进。

于 2013-02-06T17:35:30.257 回答