我编写了一个函数来计算十进制数的二进制数。如果输入为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);
}
答案 0 :(得分:3)
从纯粹算法的角度来讲,numberof_1()
的时间复杂度为O(log(n))
(其中n
为输入数字)。
数字以二进制基数表示,因此有log_2(n)
位表示它。您的算法正在迭代所有这些位。
但是,请注意,为了真正实现O(logn)
时间复杂度,您应该在break
时添加条件n==0
(以避免对已经为0的数字进行冗余迭代)。
从技术角度来看,整数由常数位表示,如果你确实将这个大小称为常数 - 算法运行时间为O(1)
,因为迭代次数有限且存在所需迭代次数的硬约束。