我遇到了这个问题,我不知道如何解决:
假设A(。)是一个子程序,它将二进制数作为输入,并取线性时间(即O(n),其中n是数字的长度(以位为单位))。 请考虑以下代码,该代码以n位数x开头。
while x>1:
call A(x)
x=x-1
假设减法在n位数上花费O(n)时间。
(a)内循环迭代多少次(作为n的函数)?以大O形式留下答案。
(b)以大O形式的整体运行时间(作为n的函数)是多少?
我的猜测是(a)是O(n ^ 2),(b)是O(n ^ 3)。它是否正确?我正在考虑的方式是循环每次循环时必须计算两个步骤,并且每次从n位减去1直到x达到0时循环通过x时间。对于部分b,因为A(。)花费时间O(n)我们将它与执行循环所花费的时间相乘,然后我们就有了所有的运行时间。我的分析是否正确?
答案 0 :(得分:7)
这里可能有用的是写x = 2 n ,因为如果x有n位,则其值为O(2 n )。因此,循环将运行O(2 n )次。
循环的每次迭代都会对O(n)起作用,给出O(n·2 n )的工作的上界。这种约束最终会变得紧张。请注意,对于循环的前x / 2次迭代,x的值仍然需要n位。因此,作为完成工作的下限,我们得到x / 2 = 2 n-1 迭代,每次执行n次,得到总计Ω(n·2 n )工作。因此,完成的工作是Θ(n·2 n )。
希望这有帮助!