[英]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)
彈出一個參數:
因此,為使您的代碼有效,請允許用戶從列表末尾彈出:
例如:
def pop():
list.pop(-1)
既然你是路過index
以self.items.pop(index)
,它不是O(1)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.