求log2(n)的整数部分的快速算法
2018-01-25 22:02
681 查看
求log2(n)的整数部分的快速算法
先看一下朴素算法:O(lgn)
inline int log2_int(register int x){ register int ans = 0; while((x >>= 1)) ++ ans; return ans; }
再看一下快速算法:
O(lglgn)
const unsigned int tabel[32] = {0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3}; inline unsigned int log2_int_test(register unsigned int x){ register unsigned int ans = 0; if(x >= 65536){ans += 16;x >>= 16;} if(x >= 256 ){ans += 8 ;x >>= 8 ;} if(x >= 16 ){ans += 4 ;x >>= 4 ;} return ans + tabel[x]; }
再看一下内嵌汇编算法:
O(1)
unsigned int LOG2(unsigned int x){ unsigned int ret; __asm__ __volatile__ ("bsrl %1, %%eax":"=a"(ret):"m"(x)); return ret; }
细节下回补充。
相关文章推荐
- 从大整数乘法的实现到 Karatsuba 快速算法
- 快速log2整数计算
- 快速和改进的二维凸包算法及其在O(n log h)中的实现(实现部分)
- 算法的强大——快速计算一个正二进制整数中包含多少个1
- 快速的 log2的算法。
- 算法习题54:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分
- 整数快速开平方算法
- 整数快速开平方算法
- 算法的强大——快速计算一个正二进制整数中包含多少个1
- 算法 - 快速求一个整数的7倍
- 整数划分部分问题和算法
- 快速幂算法和大整数求模
- 快速和改进的二维凸包算法及其在O(n log h)中的实现(理论部分)
- Java常用算法之整数均分
- 图像处理之积分图应用二(快速边缘保留滤波算法)
- A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效
- 第十六周项目1-验证算法(4)快速排序
- 史上最全 求一个整数二进制形式中 1 的个数所有算法---未完待续
- 第十六周项目2——算法验证快速排序
- 排序算法之快速排序、归并排序(java实现)