这是将十进制数字转换为二进制表示的函数的伪代码。
问题是,一个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))

10-06 10:52