p = B ^ E的复杂性是多少?

时间:2015-03-08 09:37:21

标签: algorithm time-complexity

这是我对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.然后我们将:

  1. b:= b ^ 2且e = 100/2 = 50
  2. b:= b ^ 4且e = 25
  3. p:= p * b ^ 4且e = 24
  4. b:= b ^ 8且e = 12
  5. b:= b ^ 16且e = 6
  6. b:= b ^ 32和e = 3
  7. p:= p * b ^ 36且e = 2
  8. b:= b * b ^ 32且e = 1
  9. b:= p * b ^ 34且e = 0 因此,我们看到将E的大小从10增加到100(十倍)并不会使迭代次数增加到5次。因此,复杂性被证明为O(log E)

1 个答案:

答案 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的体系结构和实际大小。