簡體   English   中英

這段代碼的大符號是什么? 是 O(n^2) 還是 O(n)?

[英]What is the big o notation of this code? Is it O(n^2) or O(n)?

在這里,代碼檢查 list1 是否包含 list2 的某些元素?

result = []
    for item in list1:
        if item not in list2:
            result.append(item)

我認為復雜度將是 O(n^2) 因為 (x in s) function 被認為是內循環,對嗎?

您的時間復雜度為 O(n)。 如果您對 set2 變量使用 hashset,則“in”操作平均執行常數。

如果使用兩個列表,則時間復雜度為 O(nm) 其中 n = len(list1) 和 m = len(list2)

如果set2是一個實際的setdict它是O(len(list1))因為x in some_set將是(攤銷的) O(1)

如果list2是一個列表,那么它將是O(len(list1) * max_len(list2))因為x in some_list需要遍歷O(len(some_list))中的列表。 因此,如果兩個列表都可以達到n ,那么它將是O(n^2)

in運算符的復雜性取決於列表的類型。
如果您的列表是 python 的list類型,在這里我們可以看到 (x in s) with list in python 的復雜度為 O(n)

所以如果你的 list1 有 n 個元素,list2 有 m 個元素,你的代碼的復雜性將是 O(nm)

暫無
暫無

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

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