这个算法的大O复杂性

时间:2014-04-18 01:01:30

标签: algorithm big-o time-complexity

IsNumberPrime(int num):
if num <= 1: return False
i = 0
end = sqrt(num)
while ArrayOfPrimes[i] <= end:
  if (num % ArrayOfPrimes[i]) == 0: return False
  i = i + 1
return True

此算法检查给定的数字是否为素数.ArrayOfPrimes是包含前[000,5]的数字,如[2,3,5,7,11 ...]。根据我的方法,因为这个算法只检查给定数字的平方根,所以它不应该超过sqrt(n)/ 2所以我的理解说它应该是sqrt(n)。例如,如果数字是19,那么它只会检查直到A [i] <= 4.8,即只检查2次。

2 个答案:

答案 0 :(得分:1)

该算法的确切复杂度为O(⌊sqrt(num)⌋-1)
这是检查次数((num%ArrayOfPrimes [i])== 0)条件。
在第19号情况下,该算法将进行3次检查:2,3,4

答案 1 :(得分:0)

要获得确切的复杂性,您必须知道ArrayOfPrimes中小于sqrt(num)的托管数量。最糟糕的情况是,你必须检查所有这些。

因此如果pi(sqrt(num)) number of primes低于sqrt(num),那么复杂性就是

O(pi(sqrt(num))) = O(sqrt(num) / log(num))