algorithm - 理解大 O 符号

标签 algorithm big-o

<分区>

我正在阅读 Simon Harris 和 James Ross 合着的《算法入门》一书。

在前几页中,有一节是关于理解大 O 表示法的。我阅读了这一节,并重新阅读了这节大约十几遍。我仍然无法理解一些事情。感谢任何帮助我摆脱困惑的帮助。

作者/作者声明“精确的操作数实际上并不那么重要。算法的复杂性通常根据执行功能所需的操作数的数量级来定义,用大写字母表示O 表示顺序,后跟表示相对于字母 N 表示的问题规模的一些增长的表达式。”

这真的让我很头疼,不幸的是,这一段之后的其他内容对我来说毫无意义,因为这一段应该为下一篇阅读打下基础。

本书没有定义“数量级”。我在谷歌上搜索了一下,结果只是告诉我数量级是用 10 的幂定义的。但这到底是什么意思?您是否采用操作数并以 10 的幂定义该数字,这等于复杂性?另外,什么被认为是“问题的规模”?问题的大小是操作的数量吗?或者问题的大小是“执行功能所需的操作数量的数量级”。

任何实际的例子和对此的正确解释都会很有帮助。

谢谢!

最佳答案

保持简单!

只需将 Big-O 视为表达算法性能的一种方式。该性能将取决于算法处理的元素数量 = n。

举个例子,当你必须求和时。第一次加法需要一条语句,第二次加法需要一条语句,依此类推...因此性能将与元素数量成线性关系 = O(n)。

想象一个非常智能的排序算法,对于句柄的每个元素,它会自动缩短下一个元素的排序。这将与元素数量 = O(log(n)) 成对数。

或者带有参数的复杂公式,每增加一个参数,执行时间就会成倍增加。这将是指数 = O(10^n)。

关于algorithm - 理解大 O 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25494524/

相关文章:

algorithm - 在已经指定运行时间的情况下解决算法中的问题,例如 theta(nlogn)

algorithm - 您如何构建评级实现?

algorithm - 四组合时间复杂度

algorithm - 如何使用最坏情况 O(n^2) 来搜索 2 个列表并将公共(public)值添加到第 3 个列表?

c# - 3SUM - O(n^2 * log n) 比 O(n^2) 慢?

.net - 可以处理机器生成的正则表达式 : *non-backtracking*, O(n) 的正则表达式实现?

java - 如何通过网格中的 block 找到路径

javascript - 压平数组元素(不是整个数组)javascript的有效方法

ruby - 硬币变化递归哈希(解释)?

algorithm - 双连通分量