【发布时间】:2018-01-14 04:16:44
【问题描述】:
有一个循环执行蛮力算法来计算 5 * 3 而不使用算术运算符。
如果输入是 x * y,我只需要添加 5 个 3 次,这样它就需要 O(3),即 O(y)。 然而,在一本书中,它说它需要 O(2^n),其中 n 是输入中的位数。我不明白为什么它使用 O(2^n) 来表示它 O(y)。显示时间复杂度的更好方法吗?你能解释一下吗?
我不是要求其他算法来计算这个。
int result = 0
for(int i=0; i<3; i++){
result += 5
}
【问题讨论】:
-
运行时间是一个常数 (O(1)),因为这个循环的运行时间不依赖于任何外部参数。这真的是书上所说的吗?你能举出具体的措辞和它指的是什么吗?
-
您在谈论“输入中的位数”,我高度怀疑您遗漏了一些与书中内容非常相关的信息。
-
在一本书中,它说“要形成5x3,我们将从0开始并重复添加5。时间复杂度非常高,高达O(2^n),其中n是数字输入中的位数”。但是 3 是 0011。n 是位数是什么意思?为了表示 3,它只需要 2 位。 O(2^2) = O(4)。为什么作者使用 O(2^n),其中 n 是输入中的位数,而不是 O(n)?
-
@DannaDChoe 哦,那我的错。扔书。或者有一些我们不知道的背景。
-
@DannaDChoe 如果循环取决于位数,那将是这样,但在这里它是恒定的;无论如何,它将运行 3 次。即使它取决于位数,我也希望线性运行时间,而不是 2^n。