这是将十进制数字转换为二进制表示的函数的伪代码。
问题是显示n位数的Ldiv2 [A]是O(n)。 并确定算法的运行复杂性
输入是数字X的十进制表示,由数字A [n-1],...,
数组给出以下算法使用“长除以2”过程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)因为它只有一个for循环从0到4n -1运行,虽然有点不清楚是否有证明。
答案 0 :(得分:1)
我们以4n-1
次循环运行,每次都执行一个动作,该动作在结尾处开始O(n)
和O(1)
(当A变为1时)。
所以我们得到:
(4n-1)*(n/log(n)) = O(n^2/log(n))