计算大O运行时间

时间:2013-02-09 08:21:08

标签: algorithm big-o

您好我在找到此算法的运行时间时遇到以下假设: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时间。最后,outter循环也运行n次迭代。我相信这些值是正确的,但我对如何获得总运行时间感到困惑。我也很困惑,如果这两个嵌套的循环运行时间应该相乘,并且如果外循环中的ExtendedEuclid方法调用应该与outter循环的运行时间相乘。我希望这是明确的,谢谢你的任何帮助。

1 个答案:

答案 0 :(得分:1)

内部循环是n ^ 4(外部循环中最慢的部分),并且对于外部循环的每次迭代运行一次,即EDIT:logn times,so n ^ 4logn。

...无论其

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