伪码的算法复杂度

时间:2013-09-18 05:11:23

标签: algorithm for-loop complexity-theory

这是将十进制数字转换为二进制表示的函数的伪代码。

问题是显示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运行,虽然有点不清楚是否有证明。

1 个答案:

答案 0 :(得分:1)

我们以4n-1次循环运行,每次都执行一个动作,该动作在结尾处开始O(n)O(1)(当A变为1时)。

所以我们得到:

(4n-1)*(n/log(n)) = O(n^2/log(n))