[英]Understanding Time complexity of O(max(m,n))
某些机构能否给出一个简单的程序或算法,其时间复杂度为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字符串匹配算法 ,该算法接受两个字符串并返回第一个字符串是否为第二个字符串的子字符串。 运行时间为Θ(m + n)=Θ(max {m,n}),这意味着运行时间在两个字符串中较长者的长度上是线性的。
如果无法给出直观上具有运行时max {m,n}的内容,我深表歉意,但是从数学上讲,这确实可以解决。
希望这可以帮助!
我能想到的是Python的izip_longest
函数 :
创建一个迭代器,以聚合每个可迭代对象中的元素。 如果可迭代项的长度不均匀,则将缺失值填充为fillvalue。 迭代一直持续到最长的可迭代耗尽为止。
例如:
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
不会增加所需的时间。
最简单的例子是
for i=0 to max(m,n)
print 'a'
从理论上讲: O(max(m,n))
只是O(m+n)
O(max(m,n))
的“现实生活”示例可能是一种算法,该算法分别针对大小为m
和n
两个未排序的数组-找到两个数组中最大的元素
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.