这是将十进制数字转换为二进制表示的函数的伪代码。
问题是,一个n位数的ldiv2[a]是o(n)。
并确定算法的运行复杂度。
输入是数字X的十进制表示,由数字数组a[n-1]…,
下面的算法使用“long division by two”过程ldiv2将十进制数除以2。下面的二进制转换算法将十进制数字数组a[0..n-1]转换为位数组b[0,..4n-1]如下:
Initialize B[0, ..4n-1] array of bits,
For i = 0 to 4n-1 do:
Begin
B[i]= A[0] %2; // % is the mod;
A = Ldiv2[A];
End;
Return B (possibly removing initial 0’s)
所以对于上面的例子X=169,n=2,B[0]=A[0]%2=9%2=1,然后A=Ldiv2[A]=84,B[1]=A[0]%2=4%2=0,等等。
对于ldiv2[a],我把4n-1设为n>1,因此根据定义应该是o(n)
对于算法的运行复杂性,我提出它是O(n),因为它只有一个循环运行从0到4N - 1,虽然位不清楚,如果有证据证明这一点。
最佳答案
我们循环运行4n-1
次,每次执行一个开始O(n)
和结束O(1)
的动作(当a变为1时)。
所以我们得到:
(4n-1)*(n/log(n)) = O(n^2/log(n))