O符号? 你如何提出像O(n)这样的数字?

可能重复:
大O的纯英文解释

我可以想象这可能是课堂上教授的东西,但作为一名自学成才的程序员,我很少看到它。

我已经认识到这与时间有关,O(1)是最好的,而O(n ^ n)这样的东西非常糟糕,但是有人能指出我对它实际表现的基本解释,这些数字来自哪里?


大O指的是最糟糕的运行时顺序。 它用于显示算法如何根据数据集的大小来扩展(n - >项目数)。

由于我们只关心秩序,所以常数乘数被忽略,任何增长得比主导性项速度增加的项也被删除。 一些例子:

单个操作或一组操作是O(1),因为它需要一些恒定的时间(不会根据数据集大小而变化)。

循环是O(n)。 数据集中的每个元素都被循环。

嵌套循环是O(n ^ 2)。 嵌套的嵌套循环是O(n ^ 3),并且继续。

例如二叉树搜索是log(n),这更难以显示,但是在树的每一级,解决方案的可能数量减半,所以级数为log(n)(假设树是平衡的)。

像找到一组最接近给定值的数字的总和就是O(n!),因为需要计算每个子集的总和。 这真是太糟了。


这是一种表达时间复杂性的方式。

O(n)表示列表中的n元素,需要n计算来对列表进行排序。 这根本不坏。 n每次增加都会线性增加时间复杂度。

O(n^n)是不好的,因为执行排序所需的计算量(或者你正在做的)将随着你增加n呈指数增长。

O(1)是最好的,因为它意味着执行一个函数的1次计算,考虑哈希表,在哈希表中查找值具有O(1)时间复杂度。


适用于算法的大O符号指的是算法的运行时间如何取决于输入数据量。 例如,排序算法比小数据集要花费更长的时间才能对大数据集进行排序。 如果对于排序算法示例,可以绘制运行时间(垂直轴)与要排序的值的数量(水平轴),对于从零到大数值的数值,将生成的直线或曲线的性质取决于所使用的排序算法。 大O符号是描述直线或曲线的简写方法。

在大O表示法中,括号中的表达式是绘制的函数。 如果表达式中包含变量(如n),则此变量指的是输入数据集的大小。 你说O(1)是最好的。 这是事实,因为图f(n)= 1不随n变化。 无论输入数据集的大小如何,O(1)算法都会花费相同的时间量来完成。 相比之下,O(n ^ n)算法的运行时间随着输入数据集的大小的平方而增加。

这是基本思想,对于详细的解释,请参考维基百科页面,标题为“大O符号”。

链接地址: http://www.djcxy.com/p/6759.html

上一篇: O notation? How do you come up with figures like O(n)?

下一篇: Confused about big O of n^2 vs 2^n