最有效的算法,找出一个数字在达到1之前可以除以2的次数[注意:如果可能的话,在O(1)时间内]

时间:2016-09-22 19:14:53

标签: algorithm numbers

我尝试使用日志,但它比迭代版本消耗的时间更多,以便找到答案。 数字是整数。

Using log:-
int ans = (log(x)/log(2));

Iterative version:-
int temp;
while(x)
{
    temp = temp/2;
    count++;
}
count--;

1 个答案:

答案 0 :(得分:1)

  1. 基本整数数据类型

    对于 x86 架构上的整数,只有一条O(1)指令:

    返回MSB设置位的位置。所以你不需要进行迭代O(log(n))分割,移位或bin搜索。为了确保符号(2' os补码)不会使负数变得混乱,请使用abs值。

  2. <强> bigints

    对于这些,您需要检查MSW非零WORD。并使用#1 。这是O(log(n))n是您要测试的数字。

  3. 浮点

    这些通常非常简单O(1)因为您只是提取指数,它直接告诉您MSB设置位的位置。

    对于大多数体系结构中的基本浮点数据类型, FPU HW 直接实现log2,但它们不会返回整数样式结果...