递归算法的复杂度通常很难衡量,一般都认为是每次递归分支数的递归深度次方。但通常情况下没有这个大,如果我们可以保存每次子递归的结果的话,递归算法的复杂性等于不同的节点个数。这也是动态规划算法思想的由来。
看一下下面这个算法题目,据称是百度的笔试题:
简述:实现一个函数,对一个正整数n,算得到1需要的最少操作次数:
如果n为偶数...
递归算法的复杂度
求平方根倒数的算法
下面这个求的函数号称比直接调用sqrt库函数快4倍,来自游戏Quake III的源代码。
float InvSqrt (float x){
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i>>1);
y = *(float*)&i;
y = y*(1.5f - xhalf*y*y);
return x;
}
我们这里分析一下它的原理(指程序的正确性,而不是解释为何快)。
分析程序之前,我们必须解释一下float...