计算机科学中的Big-O符号有什么大不了的?

dot*_*ner 14 big-o computer-science

Big-O符号如何帮助我的日常C#编程?这只是一次学术活动吗?

Tod*_*lin 39

Big-O根据输入的大小告诉您算法的复杂性.如果您想知道算法如何扩展,这一点至关重要.如果您正在设计一个大型网站并且拥有大量用户,那么处理这些请求所需的时间非常重要.如果您有大量数据并且想要将其存储在一个结构中,那么如果要编写一些不需要一百万年运行的东西,您需要知道如何有效地执行此操作.

并不是Big-O符号本身会对你有所帮助.如果您了解Big-O表示法,您就会理解算法的最坏情况复杂性.从本质上讲,Big-O让您高度了解哪些算法速度快,速度慢,以及权衡取舍.如果您不理解这一点,我不知道如何理解.NET集合库中的任何内容的性能影响.

我不会去到更详细的在这里,因为这个问题已经被问很多次,但我只想说,这是你应该明白.这是一个相当高度投票的以前的Big-O问题,可以帮助您入门.

  • 我只想强调,花一百万年不是这里的比喻...... (19认同)
  • +1但我想补充一点,任何看过Swordfish的人都知道,当John Travolta拿到一把枪时,Big-O会走出窗外. (6认同)

Lar*_*abe 8

Big O表示法允许您根据整体效率和可扩展性分析算法.它抽象出效率的恒定顺序差异,这可能因平台,语言,操作系统而异,关注算法的固有效率以及它如何根据输入的大小而变化.


rah*_*kan 7

我正在阅读答案而我(认真地)认为大O被低估了.

作为通过编码赚钱的编码员,我们需要知道大O是什么以及我们为什么需要它.

让我解释一下我的想法:Big-O表示法是你工作的效率/表现.当输入变大时,您必须知道代码的工作速度有多快,因为在现实生活中,您无法知道确切的输入数量.此外,如果没有渐近符号,你无法比较两种不同的算法方法,所以如果你想选择更好的算法,你将把它们与big-O进行比较,看看哪一种适合你的情况.两者都可能效率低下,但你会知道哪一个更好.


mpe*_*pen 5

Naw,我也很想知道,但现在我发现自己每次使用图书馆时都会考虑大O.

Big-O让您了解任何函数的渐近运行时间,这样您就可以确定数据结构A是否比数据结构B更快.

例如,你可能会想要使用类似于ArrayList你真正需要的东西Queue.当你尝试添加一个元素时ArrayList,如果你可以看到运行时间是O(n)(因为它需要创建一个新数组并将所有元素复制到...有时)但是在Queue它的O(1)那个时候你可以很容易地看到队列会更快.这实际上是一个很糟糕的例子,因为这两个结构之间存在许多其他差异,但是你得到了这个想法;)

  • 建议一个更好的例子:假设我需要跟踪一些元素(比如说,我正在检查重复项).我应该使用HashSet还是List?两者都有Add和Contains方法,所以两者都符合我的目的.但是它们以非常不同的方式扩展,而大O符号则大致告诉我缩放是什么.(这也说明大O不是最重要的,因为较小的常数因子,List实际上可能*更快*小集合.) (3认同)