Algorithm 理解O(max(m,n))的时间复杂度

Algorithm 理解O(max(m,n))的时间复杂度,algorithm,math,big-o,time-complexity,Algorithm,Math,Big O,Time Complexity,有人能给出一个时间复杂度为O(max(m,n))的简单程序或算法吗。我试图理解渐近符号。我遵循了一些教程,理解了他们解释的内容,即O(n)和O(n^2)。 但现在我想了解O(max(m,n))的时间复杂度,以及它是如何计算的。 请给出一个示例程序或算法来演示这一点 最简单的例子是 for i=0 to max(m,n) print 'a' 从理论上说:O(max(m,n))就是O(m+n) O(max(m,n))的“现实生活”示例可能是这样一种算法:对于大小分别为m和n的两个未排序数

有人能给出一个时间复杂度为O(max(m,n))的简单程序或算法吗。我试图理解渐近符号。我遵循了一些教程,理解了他们解释的内容,即O(n)和O(n^2)。 但现在我想了解O(max(m,n))的时间复杂度,以及它是如何计算的。
请给出一个示例程序或算法来演示这一点

最简单的例子是

for i=0 to max(m,n)
     print 'a'
从理论上说:
O(max(m,n))
就是
O(m+n)

O(max(m,n))
的“现实生活”示例可能是这样一种算法:对于大小分别为
m
n
的两个未排序数组,分别查找这两个数组的最大元素,我能想到的是:

制作一个迭代器,聚合来自每个ITerable的元素。 如果iterables的长度不均匀,则会填充缺少的值 具有填充值。迭代将继续,直到找到最长的iterable 筋疲力尽

例如:

In [1]: from itertools import zip_longest

In [2]: list(zip_longest([1, 2, 3, 4, 5, 6, 7], ['a', 'b', 'c']))
Out[2]: [(1, 'a'), (2, 'b'), (3, 'c'), (4, None), (5, None), (6, None), (7, None)]

In [3]: list(zip_longest([1, 2], ['a', 'b', 'c']))
Out[3]: [(1, 'a'), (2, 'b'), (None, 'c')]

In [4]: list(zip_longest([1, 2, 3], ['a', 'b', 'c']))
Out[4]: [(1, 'a'), (2, 'b'), (3, 'c')]

就我所知,应该很清楚为什么这是一个
O(max(m,n))
操作而不是O(m+n);因为当
m>n
时,增加
n
并不增加所需的时间。

第一次研究大O符号时,要证明的一个常见定理是

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

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

作为一个具体的例子,考虑它,它采用两个字符串,并返回第一个字符串是否是第二个字符串的子字符串。运行时是Θ(m+n)=Θ(max{m,n}),这意味着运行时在两个字符串中较长的长度上是线性的

我很抱歉,如果这没有给出直观上具有运行时max{m,n}的东西,但是从数学上来说,这是可行的


希望这有帮助

我认为最好的答案是罗伯特·哈维的评论。在我看来,使用这种边界的算法的一个很好的例子是

我希望,这将消除您的疑虑:

DFS检查图的每个顶点和每个边。设
n
表示图中的顶点数,
m
表示图中的边数

基于上述观察,您可以导出
DFS
的时间复杂度的上界为
O(max(n,m))

请注意,有些图不能仅通过
O(n)
来限制
DFS
的时间复杂度。A就是一个例子


此外,还有一些图形,您不能仅通过
O(m)
来限制
DFS
的时间复杂度。A就是一个例子。

什么是
max
?它只是m和n的较高值吗?如果是这样的话,那么如果m大于n,那么它就是
O(m)
,如果n大于m,那么它就是
O(n)
。如果
O(max(m,n))
就是
O(m+n)
,那么为什么不直接说
O(m+n)
?他们可能在强调最大部分。有很多方法可以描述给定函数的顺序。例如,添加非零常量不会改变顺序。罗伯特·阿斯·乔尔(Robert as Joel)说,最可能的原因是我们想要强调,如果我们进行严格的成本分析,那么它实际上就是最大操作,但在
O
符号中,它与max(m,n)=θ(m+n)无关(这些函数在复杂性意义上是等价的),这是1/2(m+n)的明显结果,实际上对于多变量的合理定义,Θ(m+n)与Θ(max(m,n))是相同的。如果n,m中的一个支配另一个,则通常的Θ(某些和)推理适用。如果n和m大致相似,则Θ(n+m)和Θ(max(n,m))都简化为Θ(2n)(或Θ(2m),是相同的),也就是Θ(n)。也就是说,我在其他地方论证过,带+的版本也有教育意义。@Gray是的!固定的。抢手货