【发布时间】:2013-09-18 05:11:23
【问题描述】:
这是一个将十进制数字转换为二进制表示的函数的伪代码。
问题是证明一个 n 位数的 Ldiv2[A] 是 O(n)。 并确定算法的运行复杂度
输入是数字 X 的十进制表示,由数字数组 A[n-1],...,
以下算法使用“长除以二”过程 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 运行的 for 循环,虽然有点不清楚是否有证据。
【问题讨论】:
-
A未在任何地方定义... -
这就是作为伪代码提供的全部内容。
-
Ldiv2到底是什么?
-
那么提供的问题缺少重要的输入!
-
我编辑了问题以包含更多给定的信息
标签: algorithm for-loop complexity-theory