簡體   English   中英

該算法的O復雜度很高

[英]Big O complexity of this algorithm

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是否為包含前1000個質數的數組,例如[2,3,5,7,11 ...]。 根據我的方法,由於此算法將只檢查直到給定數字的平方根,因此它的取值不應超過sqrt(n)/ 2,因此我的理解是應該為sqrt(n)。 例如,如果數字為19,則它將僅進行檢查直到A [i] <= 4.8,即僅進行2次檢查。

該算法的確切復雜度為O(⌊sqrt(num)⌋-1)
這是檢查次數(((num%ArrayOfPrimes [i]] == 0))個條件。
在第19種情況下,此算法將進行3次檢查:2、3、4

要獲得確切的復雜性,您必須知道ArrayOfPrimes中小於sqrt(num) ArrayOfPrimes數。 最壞的情況是,您必須檢查所有這些。

因此,如果pi(sqrt(num))是小於sqrt(num)素數,則復雜度為

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM