1
10進数のバイナリで1の数を計算する関数を書いた。入力が3の場合、バイナリは0011になり、出力は2として出力されます。バイナリ数には2つの1があるため、この関数の時間複雑度はどのように計算できますか?私のC関数の時間複雑度を計算する方法
#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);
}
ループ反復回数は入力の何かに依存していますか?そうでない場合、複雑さはO(1)である。 – Barmar
アルゴリズムは入力のサイズに依存しません(常に1つの32ビット整数を処理しているため)。時間複雑度はO(1)である。 –
サイドノート:あなたがやろうとしていることは、「人口数」または「popcnt」と呼ばれています。いくつかのアーキテクチャにはこれを行うための専用の指示があります。他の人には、[Bit Twiddling Hacks](https://graphics.stanford.edu/~seander/bithacks.html#)にあるポータブルCソリューションを見てみてください。 CountBitsSetNaive)。 – ShadowRanger