[英]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.