algorithm - 了解 O(max(m,n)) 的时间复杂度

标签 algorithm math big-o time-complexity

有人能给出一个时间复杂度为 O(max(m,n)) 的简单程序或算法吗?我试图理解渐近符号。我遵循了一些教程并理解了他们所解释的内容,即 O(n) 和 O(n^2)。

但现在我想了解 O(max(m,n)) 的时间复杂度及其计算方式。 请给出一个示例程序或算法来证明这一点。

最佳答案

第一次学习大O符号时要证明的一个常见定理是

Θ(max{m, n}) = Θ(m + n)

换句话说,任何运行时间为 O(max{m, n}) 的算法也有运行时间 O(m + n),因此具有此时间复杂度的任何算法都符合要求。

作为这方面的具体示例,请考虑 Knuth-Morris-Pratt string-matching algorithm , 它接受两个字符串并返回第一个字符串是否是第二个字符串的子字符串。运行时间为 Θ(m + n) = Θ(max{m, n}),这意味着运行时间与两个字符串中较长字符串的长度成线性关系。

如果这没有给出直观具有运行时 max{m, n} 的东西,我深表歉意,但从数学上讲这确实可行。

希望这对您有所帮助!

关于algorithm - 了解 O(max(m,n)) 的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19455942/

相关文章:

c - 按特定顺序对矩阵中的行重新排序

带有十进制数字的javascript数学

java - 随机梯度下降未能在我的神经网络实现中收敛

algorithm - 计算鼠标与文本输入算法的 Big O 时间复杂度

algorithm - 带有 Θ( log n) 的 java 递归算法示例

python - 二进制搜索传递列表切片而不是整个列表

c++ - 如何替换字符串中所有出现的字符?

performance - 划分数字的算法

java - 打印数学随机生成的数字的最大数字

java - 这两种基于字符串的算法的复杂度是多少?