c - if-else 或 switch-case 的最快替代方案

标签 c algorithm

我有以下定义:

typedef enum
{
    def   = 0,
    m1    = 1,
    m2    = 2,
    m3    = 4,
    m4    = 6,
    m5    = 17,
    m6    = 33,
    m7    = 41,
    m8    = 47,
    m9    = 50,
    m10   = 51,
    m11   = 58,
    m12   = 89,
    m13   = 132,
    m14   = 135
} my_enums;

我正在寻找一种最快的方法来检查函数的参数是否属于这些值之一,m1..m14。显而易见的实现是 if (p == m1 || p == m2 ...) 或 switch-case 替代方案。

有没有更快的东西? m1~m14的值是固定的,不能连续。

谢谢。

最佳答案

switch 语句是更好的选择。它有助于了解编译器可以用来使 switch 语句非常优化(在大多数情况下)的技巧。很多时候,比您自己想出的要好。

如果值不连续,编译器可以求助于具有 O(log(n)) 性能的静态二叉决策树。对于一个连续的值列表,它会构造一个跳转表,其复杂度为O(1)。相比之下,if-else 结构的复杂度为 O(n)。

我建议您在求助于其他方法之前充分了解可以从 switch 语句中得到什么。

关于c - if-else 或 switch-case 的最快替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18643319/

相关文章:

c - 临时 C 字符串具有相同的地址

c - 为什么我得到两个不同的结果? ( boolean 值问题)

c - GPS 模块与 MSP430 的连接

algorithm - 洗牌数组的最佳算法

php - 难以理解简单的算法

c - OpenGL 2 和 Primusrun 在单个缓冲区上无显示(透明窗口)

c - 如何修复不需要的诅咒输出缩进

java - 具有高效查询算法的层次数据结构

arrays - 最大子串的长度加起来为 S

java - 我无法在二维数组中获取数字以添加数独求解器