【问题标题】:Calculating time complexity for finding first 'n' prime numbers计算查找前“n”个素数的时间复杂度
【发布时间】:2015-08-28 12:00:27
【问题描述】:

寻找前'n'个素数的算法是:

while (number <= n) {
  boolean isPrime = true; 
  for (int divisor = 2; divisor <= (int)(Math.sqrt(number)); divisor++) {
    if (number % divisor == 0) {
      isPrime = false;      
      break;
    }
  }
  if(isPrime) 
    System.out.print(number + " ");
}

《Java 编程简介》一书对此算法的 big-O 计算如下:

由于在for 循环中检查数 i 是否为素数需要 √i 步,因此该算法需要 √2 + √3 + √4 + ... + √n 步才能找到所有小于的素数或等于 n。

注意,

√2 + √3 + √4 + ... + √n

因此,该算法的时间复杂度为 O(n√n)。

问:

1. 他说,“在for 循环中检查数字 i 是否为素数需要 √i 步”。

你不觉得应该是(√i-1)个步骤吗?

2.请说明方法

√2 + √3 + √4 + ... + √n

(我知道如果你只是用随机数替换'n',我知道这种关系成立。我需要解释)

【问题讨论】:

  • 它是否需要 sqrt(i) 或 sqrt(i)-1 步骤并不真正相关,这只是一个常数因素。如果你把n个常数因子加起来,你会得到所有的平方根-n,O(n*log(n))O(n*log(n) - n)一样,你只需要看最高的项。
  • 对于您的第一个答案,复杂度 √i-1 用于查找数字是否为素数。但是要找到直到 n 的所有数字,我将花费 n√n 作为 n 次循环将执行 n 次,并且每次将花费 √i-1 来检查该数字是否为素数,因此总体上将是 n√n。我希望我回答了你的疑问
  • 错了,你需要保留两个计数器来打印前n个数字。例如,第 100 个素数是 541

标签: algorithm big-o time-complexity


【解决方案1】:
  1. 就复杂性而言,减 1 无效(这是非正式介绍)。
    (实际上是floor(√n) - 1。)
  2. 您有 n - 1 个术语。 添加√n n - 1次:

    √n + √n + √n + ... + √n = (n-1)√n

由于 √2, √3, √4, ... 都小于 √n,所以

√2 + √3 + √4 + ... + √n <= √n + √n + √n + ... + √n <= n√n

【讨论】:

  • 一位谷歌面试官给了我这个确切的问题,他说 n√n 不可能是正确的答案,因为外循环不会简单地到达 n。即:如果我们需要打印前n个素数,那么外循环当然会大于n。示例打印前 100 个素数,第 100 个素数是 541,即大于 n。我们该如何解决这个问题?
  • 这里有些混乱(我一开始没有发现)。该问题询问第一个n 素数,但问题中的(损坏的)代码和书籍引用与素数&lt;= n 有关。我猜第一个n 素数是O(p(n) * √p(n)),其中p(n) 是第n 个素数。
【解决方案2】:

答案 2:

对于 0

【讨论】:

  • "1和n之间的√n之和为n√n。"请解释一下
  • n 次:sqrt(n) + ... + sqrt(n) = n*sqrt(n)。就像5次:4 + 4 + 4 + 4 + 4 = 5*4 = 20
【解决方案3】:

(请注意,这不是一个完整的答案,它只是添加到@molbdnilo 答案)

考虑一下:

1 + 2 + 3 + ... + n = n * (n+1) / 2 --> 时间复杂度是O(n*(n+1)/2) == O(n^2) 尽管(n * (n+1) / 2) &lt;= (n^2)

现在考虑以上@molbdnilo 解释的内容;

由于 √2, √3, √4, ... 都小于 √n,所以

√2 + √3 + √4 + ... + √n

希望它能消除一些疑虑

【讨论】:

    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2017-11-24
    相关资源
    最近更新 更多