【问题标题】:Big o notation for a while-loop which use random# generator as a conditions使用 random# 生成器作为条件的 while 循环的大符号
【发布时间】:2017-09-19 15:26:45
【问题描述】:

我们有在 [0.0,1000.0[

之间生成编号的 RNG

在一个while循环中,我们计数以找出产生一个编号需要多长时间。

代码:

n =0
while ( RNG1000() >= 1.0){
n =+
}

问题: 什么是 O(?)

【问题讨论】:

  • RNG 生成整数还是浮点数?
  • 这看起来像家庭作业。到目前为止你的想法是什么?

标签: random while-loop numbers time-complexity notation


【解决方案1】:

变量 n 的函数 f 被称为变量 n 的函数 g 的 big-Oh - 通常表示为 f(n) = O(g(n)),或 f in O(g) - 如果存在一个 n0 使得对于所有大于 n0 的 n,f(n)

假设我们算法的运行时间是 n 的某个函数 g 的大哦。然后有一个 n0 使得对于 n > n0,我们的算法的运行时间小于或等于 g(n)。让我们选择一些固定的 n' > n0 并考虑这意味着什么:这意味着在输入 n' 时,我们的算法保证在 g(n') 步内终止。我们必须让 g(n') 是某个数字;让我们称之为t'。所以对于输入 n',我们的循环不能超过 t' 步。但这显然是错误的,因为 - 假设整个循环迭代需要 1 步 - 迭代超过 t' 步的概率是有限的但非零(假设 RNG 是真正的 RNG)。这是一个矛盾,所以我们假设运行时是 g 的大哦是错误的——也就是说,运行时没有上限。

很容易说这是 n 的 O(1),因为循环条件不依赖于 n,但鉴于上述分析,这在技术上是不正确的。这里真的没有上限。

【讨论】:

    【解决方案2】:

    “大 O 表示法是一种数学表示法,它描述了当参数趋于特定值或无穷大时函数的限制行为。”

    在您的情况下,变量 n 不限制函数的上限。事实上,在这种情况下没有函数(至少没有返回可重复结果的函数。)我建议没有大 O 符号来描述这一点,它是 undefined。然而,有些人可能会争辩说,最坏的情况只是 O(∞)。这里令人困惑的是,您实际上并没有使用变量 n 来约束您的行为。

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多