代码优化方法系列(2)

查表优化

查表法是指将计算的结果预先存储起来,在后序重复使用到这个结果时,不需要再次进行计算,可通过查表得出,节省了重复计算的时间。
在动态规划算法中,可以采用类似的记忆化搜索的方法,将递推的中间结果存储起来,每次递归计算时,先在表中进行搜索,若已经计算过,则从表中查找返回。

斐波那契数列计算

递归计算:

long factorial(int i)
{
    if (i == 0)
        return 1;
    else
        return i * factorial(i - 1);
}

查表优化:

static long factorial_table[] = {1, 1, 2, 6, 24, 120, 720 /* etc */};

long factorial(int i)
{
    return factorial_table[i];
}

位运算优化

一般对int型变量进行位运算。

求余运算

模运算 a=a%8
位运算 a=a&7

奇偶判断

模运算 if(x % 1 == 1)
位运算 if(x & 1)

判断相等

整数比较 if(a == b)
位运算 if(!(a ^b))

交换两个整数

库函数

swap(a, b);

位运算

a=a^b;
b=a^b;
a=a^b;

判断两个数是否同号

!((a^b)>>31);

求n的绝对值

(n^(n>>31))-(n>>31); 

判断一个整数n是否为2的幂 2^n:

 ((x&(x-1))==0)&&(x!=0);

计算整数x和y的平均值,可防止溢出

int average(int x, int y) //返回X,Y 的平均值 
{ 
  return (x&y)+((x^y)>>1); 
}
原文地址:https://www.cnblogs.com/shijiashuai/p/14409250.html