【问题标题】:What is the complexity o(1) or o(n)? [duplicate]o(1) 或 o(n) 的复杂度是多少? [复制]
【发布时间】:2019-07-27 06:27:04
【问题描述】:

在下面的循环中,复杂度是 O(1) 还是 O(n)?

for(int j = 0; j < Math.random() * 1000 + 1; j++)

我不知道它会通过循环运行的次数,所以不应该是 O(n) 吗?

【问题讨论】:

  • 请格式化您的代码
  • 它的 o(1) 因为 n 是输入的数量。没有输入。您的代码将针对 1000 的函数运行,即 O(1)
  • 在考虑 O(n) 方面的复杂性之前,您需要先定义 n 是什么...
  • 真正的问题是:为什么重要?这似乎是一个非常愚蠢的渐近分析函数。有许多(无限多!)O(1) 操作比 O(N) 操作,至少对于您选择的任意 N 而言。因此,不要盲目地使用 Big O 表示法:弄清楚您实际上要解决什么问题,然后看看 Big O 如何帮助您解决它 - 或者没有。

标签: java


【解决方案1】:

它的 O(1) 因为 n 是输入。代码中没有输入

for(int j =0 ;j<(Math.random()*1000+1);j++)

您的代码将运行迭代次数,它是 1000 的函数,因此 O(1)

【讨论】:

  • 我们不要忘记说 无论Math.random() 返回的值如何,循环最多运行 1001 次,这正是 O(1) 的含义。无论输入是什么,即使在最坏的情况下,程序也需要恒定的时间来执行。
【解决方案2】:

由于它是一个随机数生成器,因此复杂度为 n*1000+1,因此为 O(n)。如果它是像 1000+1 这样的静态值,那么复杂度将是 O(1)。其中 n 是函数 Math.Random() 可以输出的可能结果的范围

【讨论】:

  • Math.random 输出一个介于 0 和 1 之间的双精度数,因此循环最多执行 1000 次。
  • @assylias 今天我学到了,你说得对,谢谢。
猜你喜欢
  • 2011-06-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 2017-07-10
  • 2015-05-25
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
相关资源
最近更新 更多