algorithm - 如何优化多(矩阵)开关/案例算法?

标签 algorithm matrix switch-statement

是否可以优化这种(矩阵)算法:

//        | case 1 | case 2 | case 3 |
//  ------|--------|--------|--------|
//        |        |        |        |
//  case a|   a1   |   a2   |   a3   |
//        |        |        |        |
//  case b|   b1   |   b2   |   b3   |
//        |        |        |        |
//  case c|   c1   |   c2   |   c3   |
//        |        |        |        |

switch (var)
    {
      case 1:
      switch (subvar)
      {
        case a:
          process a1;
        case b:
          process b1;    
        case c:
          process c1;
      }
      case 2:
      switch (subvar)
      {
        case a:
          process a2;
        case b:
          process b2;    
        case c:
          process c2;
      }
      case 3:
      switch (subvar)
      {
        case a:
          process a3;
        case b:
          process b3;    
        case c:
          process c3;
      }
    }

代码相当简单,但您必须想象有更多“switch/case”的更复杂的代码。

我使用 3 个变量。根据他们取值1、2、3或a、b、c或alpha、beta,charlie有不同的过程来实现。除了通过一系列“开关/案例”之外,是否有可能以任何其他方式对其进行优化?

(问题已经用法语提出 here )。

编辑:(来自 Dran Dane 对以下评论的回复。这些也可能在这个更显眼的地方!)
优化”可以理解为编写更少的代码,更少的“switch/case”。这个想法是提高可读性和可维护性不是性能。

也许有一种方法可以通过“责任链”来编写更少的代码,但这种解决方案并不是在所有方面都是最佳的,因为它需要在内存中创建许多对象。

最佳答案

听起来你想要的是 'Finite State Machine'在使用这些案例的地方,您可以激活不同的流程或“状态”。在 C 语言中,这通常使用函数指针数组(矩阵)完成。

因此,您实际上创建了一个数组,并将正确的函数指针放在正确的索引处,然后使用“var”作为正确“进程”的索引,然后调用它。您可以使用大多数语言执行此操作。这样,机器的不同输入会激活不同的过程并使其进入不同的状态。这对于许多应用程序非常有用;我自己在 MCU 开发中一直使用它。

编辑:Valya 指出我可能应该展示一个基本模型:

stateMachine[var1][var2]();   // calls the right 'process' for input var1, var2

关于algorithm - 如何优化多(矩阵)开关/案例算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1652923/

相关文章:

c - 我用于打印最长回文子序列的程序无法正常工作,当我运行它时,控制台窗口在接受输入后停止工作

r - 将 R 中的矩阵转换为具有相应条目的上三角/下三角矩阵

arrays - 如何从R中的高维数组创建低维矩阵?

php - 使用模数排序

c - 没有标签的 switch 语句代码

algorithm - 平滑 Kinect Facetracking 数据

c - kruskal 在 c 中实现邻接表或邻接矩阵

c++ - 如何在该程序中将if else语句转换为switch语句? Visual Studio 2019 C++

algorithm - 删除无效括号 - Leetcode 时间复杂度

c++ - 在 switch 和 c++ 内部打印,但在案例之外?