【问题标题】:BigO bound on some pseudocodeBigO 绑定在一些伪代码上
【发布时间】:2010-10-31 22:52:37
【问题描述】:
AllDistinct(a1 , . . . , an )
if (n = 1)
return True
for i := n down to 2
   begin
   if (LinearSearch(a1 , . . . , ai−1 ; ai ) != 0)
     return False
   end
return True

对 AllDistinct 的运行时间给出一个大 O 界限。要获得完整的信用,您必须出示 工作或简要解释你的答案。

所以根据这个问题的解决方案,这个问题的实际答案是 O(n^2)。但是,由于 BigO 是最坏情况下的运行时间,我可以回答 O(n^100000) 并侥幸逃脱吗?他们没有办法为此拿分,因为它在技术上是正确的答案,对吧?虽然在这个算法中更有用的 O(n^2) 是显而易见的,但我问是因为我们可能在即将到来的考试中有一个更难的算法,并且如果我无法弄清楚“紧密”的界限,我可以弥补一些非常大的值,它应该仍然是正确的,对吧?

【问题讨论】:

  • 仅仅因为一个答案在技术上是正确的并不意味着它是好的工作或有用的。更多的助教和教授根据后两个而不是第一个标准评分。如果这表明您的思维过程或个性,那么听起来您应该退出 CS 课程并进入法学院。
  • 我给出了我的推理,没必要成为一个混蛋..
  • 不要试图成为一个混蛋(也许这很自然?)。这实际上非常值得考虑。此外,我的一位教授实际上每次在决赛中看到“我不知道”字样时都会给一个人 +5 分,因为他厌倦了试图通过 BS 闯关的人。教授(和助教)也是人。
  • 我只是说如果事实证明我不知道,我宁愿写 O(n^n) 或 O(n!) 而不是我不知道..即兴创作没什么错。 .
  • 大家好,SO 是为了互相帮助,而不是为了侮辱。

标签: algorithm big-o pseudocode performance


【解决方案1】:

是的,如果一个函数在O(n^2) 中,那么它也在O(n^1000) 中。

您以这种方式回答是否会获得满分(或任何分数)当然取决于为您的考试评分的人,所以我不能告诉您(可能不会)。但是,是的,它在技术上是正确的。

如果您决定采用这种方式,您可能应该选择O(n^n)O(Ackermann(n)) 之类的东西,因为例如指数函数不在O(n^1000) 中。

另一个问题是你可能会被要求证明界限。如果您实际上不知道函数的运行时间,这将很难做到。 “n^n 真的很大,所以运行时间可能会少于那个”不是证明。尽管从好的方面来说,如果您设法正确证明该函数在 O(n^n) 中,您可能至少会获得部分功劳。

【讨论】:

    【解决方案2】:

    这个问题的答案很简单。虽然是正确的,但它什么也没告诉你,因此毫无价值。这不是关于对与错,而是关于好与坏。你的答案越好,你得到的分数就越多。这个问题并不是说你会因为糟糕的糟糕绑定而受到赞扬。不好的答案给不好的分数?

    (要求 Big Theta 会是一个更难的问题。我会玩得很好:)

    【讨论】:

    • 那么 BigTheta 会是一个严格的答案吗? n^2 是 BigTheta 唯一可接受的答案吗?如果没有,还有什么工作?我不完全理解 BigTheta 的概念
    • BigTheta 是下限和上限。这是一个严格的答案:只有一个答案是正确的(在这种情况下为 n^2)。 BigO 存在无限正确的答案。
    • @Fabio F.:实际上,我相信即使 with Θ,仍然有无数个正确答案:Θ(n²)Θ(n²+1)Θ(n²+2)Θ(2n²)Θ(23n²+42) 等等。
    • @Jörg W Mittag:只有当你说 1+1 有无限解时:2, 2.0, 2.00, 2.000 :P - 即只有不同的符号来表示相同的概念。
    【解决方案3】:

    没有。

    这可能很聪明,哈哈!我接到你了!但这不是想法。 (你知道的)

    【讨论】:

    • 既然 BigO 可以是通用的,为什么还要使用它呢?什么是 BigTheta 是一个更好的问题,它是 n^2,它是一个精确的数字,而不仅仅是一个最大值?或者我可能不理解 BigTheta..
    • bigO 通常暗示的内容(即使它不是根据定义):lim x->inf f(x)/g(x) > 0 && lim x->inf f(x)/g(x) <= 1
    【解决方案4】:

    如果教授问你BigO,你可以回答你认为的任何BigO,但你必须证明它说For full credit, you must show work or briefly explain your answer.

    BigO 不是没用的。对于问题,很容易得到上界(BigO)更大;例如
    排序问题:你有简单的冒泡排序,你可以证明它是 n^2(对吗?),所以排序问题的上限是 n^2(因为存在和解决它的算法,但是如果你继续使用数学,您会看到问题的下限为 log(n!) )。所以 n^2 是一个很好的答案,直到你证明它是 log(n!)。有很多问题我们只知道 BigO 而不是下界,所以它不是没用的。

    如果您可以说程序停止,您总是可以通过一些数学计算 BigO,但并不总是那么容易(甚至存在摊销的复杂性),但它比下界问题更简单。所以BigO在算法中不是那么重要,但也不是没用。
    重要的是你明白它的意思;那么如果你能得到那个程序的任何 BigO,你就可以把它写在试卷上,这是一个从学生到数字的函数......祝你好运。

    【讨论】:

      【解决方案5】:

      猜测一下,您可能不得不与教授交谈,并与他争论一下,甚至获得这样的答案的部分功劳。根据他对理论与实用性的重视程度,他可能会给你部分荣誉,或者他可能不给予任何荣誉——但我很难想象一个教授会在没有你明确指出它是如何的情况下给予任何荣誉(半)正确的,有些甚至可能不正确。

      【讨论】:

        【解决方案6】:

        我是教授。教授们会编出考试题,而那些可能有错误。当你不得不抛出一个问题时,这是很尴尬的,因为它有一个错误,人们可以给出微不足道的答案。在这种情况下,错误是“a big-O bound”。做考试题是很棘手的,因为你不想说太多,比如某种密不透风的律师声明,因为这会让人们更加困惑。

        毕竟,这样做的原因是希望您能学到一些有用的东西。如果您看到这样一个模棱两可的问题,如果您说“我假设您的意思是 good big-O bound。”之类的话,教授会很感激的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-01
          • 1970-01-01
          相关资源
          最近更新 更多