簡體   English   中英

有人能幫我算出算法的時間復雜度嗎?

[英]Can someone help me figure out the time complexity of my Algorithm?

ArrayOne 輸入示例:[-1, 5, 10, 20, 28, 3]

示例 ArrayTwo 輸入:[26, 134, 135, 15, 17]

我的猜測是 O(n^2 + m^2) 其中 n 是 ArrayOne 的長度,m 是 ArrayTwo 的長度?

在此處輸入圖片說明

假設len(arrayOne) = nlen(arrayTwo) = m

i = 0 and j = 0

從一開始,您就有一個外部 while 循環,它會運行多長時間並不是很明顯。

在 while 循環中,您會做一些持續的工作,然后檢查是否j == m 這不是真的,所以j增加了m次。

現在j == m ,您增加i並設置j = -1 這意味着j將再次增加m次。 i遞增, j重置。

j將重置n次。

所以這里的內循環可以用m表示。 和外循環n

因此該算法的運行時間復雜度為 O(n * m)

為什么哦為什么不把這段代碼寫成:

minDiff = float("inf")
for value1 in arrayOne:
    for value2 in arrayTwo:
        minDiff = min(minDiff, abs(value1 - value2))

感覺這段代碼正在竭盡全力隱藏它是一對嵌套迭代的事實,而且它的時間很明顯。

這也意味着它可以在 Python 中寫成一行:

minDiff = min(abs(value1 - value2) for value1 in arrayOne for value2 in arrayTwo)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM