这是我对p = B ^ E
的解决方案p,b,e:= 1,B,E
WHILE e!=0 DO
IF e is EVEN THEN
b:= b^2
e:= e/2
ELSE
p:= p*b
e:= e-1
FI
OD.
现在,在我看来,循环运行E次,复杂性是log n。我是对的吗?
以下是我如何解释复杂性:
说明:在最坏的情况下,循环将运行E次,但是对于遇到的每个偶数,e减半,从而消除了计算中的元素因子,因此当输入时计算的大小不会呈指数增长规模增长。因此,算法的复杂性为O(log(E))。
实施例: 让我们设置E = 10 然后我们将有如下计算步骤: 1. b:= b ^ 2且e = 10/2 = 5 2. p = p *(b ^ 2)且e = 5-1 = 4 3. b = b ^ 4且e = 4/2 = 2 3. b = b ^ 8且e = 1 4. p = p * b ^ 10且e = 0
让我们将E增加到100.然后我们将:
答案 0 :(得分:1)
复杂性为O(logE)
。
请注意,一个接一个地不能有两个ELSE条件,所以在最坏的情况下,最多在两次迭代之后,e
将减半,直到它变为0。
这意味着您最多需要2*log_2(E)
次迭代,这确实在O(logE)
请注意,这不包括反复平方b
的算法,这可能会增加另一个因素,因为当你完成后,b
将在O((B^2)^logE) = O(B^(2logE))
中,可能不是O(1)
来计算,具体取决于B,E
的体系结构和实际大小。