簡體   English   中英

計算算法的復雜度(Big-O)

[英]Calculating complexity of an algorithm (Big-O)

我目前正在圍繞Big-O復雜度進行一些工作,並計算算法的復雜度。

我似乎正在努力制定出計算復雜度的步驟,並正在尋求一些幫助來解決這個問題。

功能:

index = 0
    while index < len(self.items):
        if self.items[index] == item:
            self.items.pop(index)
        else:
            index += 1

實際的挑戰是重寫此函數,以使其具有O(n)最壞情況的復雜性。

我的問題是,據我所知,賦值語句和if語句的復雜度為O(1),而while循環的復雜度為(n),在最壞的情況下,while循環中的任何語句都可以執行n倍。 所以我將其計算為1 + n + 1 = 2 + n = O(n)

我認為我一定無法正確解決此問題,因為否則沒有必要重寫該函數。

任何幫助,我們將不勝感激。

如果self.items是一個列表,則彈出操作的復雜度為“ k”,其中k為索引,因此唯一不采用O(N)的方法是因為彈出操作。
為了使您可以使用其他一些迭代方法並將其從列表中刪除,練習可能已經完成。

要使其為O(N),您可以執行以下操作:

self.items = [x for x in self.items if x == item]

如果使用Python的內置列表數據結構,則pop()操作在最壞的情況下不是恆定的,而是O(N) 因此,您的總體復雜度為O(N^2) 如果您不能使用輔助空間,則需要使用其他數據結構,例如鏈表。

沒有參數彈出其O(1)

彈出一個參數:

  • 平均時間復雜度O(k)(k表示作為pop參數傳入的數字
  • 攤銷最壞情況時間復雜度O(k)
  • 最壞情況下的時間復雜度O(n)

時間復雜度-Python Wiki

因此,為使您的代碼有效,請允許用戶從列表末尾彈出:

例如:

def pop():
    list.pop(-1)

參考

既然你是路過indexself.items.pop(index) ,它不是O(1)。

暫無
暫無

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

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