是否可以优化这种(矩阵)算法:
// | 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/