2

您好,我很难找到该算法的运行时间,假设 s = O(logN) 并且 Random_Integer 的运行时间是常数时间:

  1  express N-1 as 2^t * u where u is odd:
  2  for i <-- to s do
  3    a <-- Random_Integer(2, N-2);
  4    if EuclidGCD(a, N) not equal to 1 then
  5         return false;
  6    x sub 0 <-- a^u mod N;
  7    for j <-- 1 to t do
  8        x sub j <-- x^2 sub j-1 mod N;
  9    if x sub j = 1 and x sub j-1 not equal to 1 and x sub j-1 not equal to N -1 then
  10        return false;
  11   if x sub t not equal to one then
  12        return false;
  13 return true;

从内部循环开始,指数模运算需要 n^3 时间,循环运行 n 次迭代,总共 n^4。然后按照我的方式进行外循环,我们有另一个指数模运算,它再次需要 n^3 时间,然后 EuclidGCD 也需要 n^3 时间。最后,外循环也运行 n 次迭代。我相信这些值是正确的,但是我对如何获得总运行时间感到困惑。我也很困惑这两个嵌套循环的运行时间是否应该相乘,以及外部循环中对 ExtendedEuclid 的方法调用是否应该与外部循环的运行时间相乘。我希望这很清楚,感谢您的帮助。

4

1 回答 1

1

内循环是 n^4(外循环内最慢的部分),外循环每次迭代运行一次,即 EDIT: logn 次,所以 n^4logn。

然而...

根据return false提前到达的频率,在最坏的情况下可能只有 n^5,例如,如果几乎所有时间你在第一次迭代中返回 false,那么你只花了 n^3-n^4 的工作,所以你会有一个平均 O(n^3) 或 O(n^4) (取决于return false它是)。

于 2013-02-09T08:34:56.600 回答