【问题标题】:Order of magnitude of few statements in apriori analysis先验分析中少数语句的数量级
【发布时间】:2017-05-28 01:57:43
【问题描述】:

如果我们在循环中有以下语句,

  1. n = n/3

  2. n = n-1

  3. n = n-2

我想知道我们是否有上述语句它们的数量级是多少,然后如何编写它们的大 O 符号?

我在 Google 上搜索了这些语句,但没有得到任何好的结果。如果您有任何链接,请参考我。

【问题讨论】:

  • bigO@wiki 的定义就是你所需要的。我只是这么说,因为这里所有询问 bigO 的人似乎都跳过了这个。
  • 这些应该是递归关系吗?如果是这样,您有 1. log3(n) => O(log(n)) 2. O(n) 和 3. O(n)。
  • @rationalcoder 我已经编辑了我的问题。请看。
  • 看起来你没有改变任何重要的东西。将这些语句放在循环中并没有多大意义。它们是重复关系吗?或者,您是否有三个具有这些运行时间的嵌套循环?
  • 其实只要加上伪代码就行了,不用猜了。

标签: algorithm time-complexity space-complexity


【解决方案1】:

我。有点心灵感应

让我们假设所有循环都是这样的:

n = <initial value>;
while (n >= 1) {
    <insert statement here>;
}

二。空间复杂度

所有这些循环的空间复杂度为O(1)

为什么?因为这些循环在执行时占用的 RAM 和磁盘空间都不取决于 n 的值。

三。时间复杂度

1。 n = n / 3

很明显,在k-th 循环迭代k ≥ 1,结果值n' 将变为n' = n / 3^k。 所以要找到k,我们要解方程:

1 = n / 3^k    =>
3^k = n        =>
k = log3(n) = log(n) / log(3)

只要1 / log(3)是一个有限常数,最终的答案就是O(log(n))

2。 n = n – 1

这是三个中最简单的情况。

对于n = 1,只有 1 个循环迭代,对于 n = 2,有两个,依此类推。 O(n).

3。 n = n – 2

对于n = 1n = 2,迭代次数为1,对于n = 3n = 4,它等于2,依此类推。因此,k = ⌈ n / 2 ⌉

O(⌈ n / 2 ⌉) = O(n / 2) = O(n).

【讨论】:

    【解决方案2】:

    这三个语句是 O(1),因为它们只是对标量变量的算术运算。

    【讨论】:

    • 由于答案的琐碎性,很可能原始问题的表述不正确。
    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2018-01-16
    • 2014-04-18
    • 2021-02-05
    相关资源
    最近更新 更多