如何计算我的C函数的时间复杂度

时间:2016-09-02 15:55:18

标签: c time-complexity complexity-theory

我编写了一个函数来计算十进制数的二进制数。如果输入为3,则其二进制将为0011,并且应将输出打印为2。因为二进制数中有两个1。如何计算此函数的时间复杂度?

    #include<stdio.h>
    void main()
    {
    void numberof_1(int n)
      {
        int i,count=0;
        if ((n & 1)== 1)
        count=count+1;
        printf("%d",count);
        for(i=0;i<32;i++)
         {
           n= n >> 1;
           if ((n & 1)==1)
            {
              count=count+1;
            }
          }
    printf("\nthe number of ones =%d\n",count);

      }
    numberof_1(10);
    }

1 个答案:

答案 0 :(得分:3)

从纯粹算法的角度来讲,numberof_1()的时间复杂度为O(log(n))(其中n为输入数字)。

数字以二进制基数表示,因此有log_2(n)位表示它。您的算法正在迭代所有这些位。
但是,请注意,为了真正实现O(logn)时间复杂度,您应该在break时添加条件n==0(以避免对已经为0的数字进行冗余迭代)。

从技术角度来看,整数由常数位表示,如果你确实将这个大小称为常数 - 算法运行时间为O(1),因为迭代次数有限且存在所需迭代次数的硬约束。