確定,因爲這是家庭作業:
這是代碼:
def f2(L):
sum = 0
i = 1
while i < len(L):
sum = sum + L[i]
i = i * 2
return sum
這顯然是依賴於LEN(L)。
所以讓我們看看每一行,它的成本:
sum = 0
i = 1
# [...]
return sum
那些有明顯固定的時間,L. 的獨立的在循環中,我們有:
sum = sum + L[i] # time to lookup L[i] (`timelookup(L)`) plus time to add to the sum (obviously constant time)
i = i * 2 # obviously constant time
多少次循環是否執行? 它obvously依賴於L. 的大小允許呼叫loops(L)
所以我們得到的
loops(L) * (timelookup(L) + const)
的整體複雜身爲好人的我,我會告訴你該列表查找在蟒蛇恆定的,所以把它歸結爲
O(loops(L))
(忽略常數因子,如大O約定暗示)
你的循環次數是多少次,基於的L
? (a)與列表中的項目一樣,列表中的項目(b)的數量與列表中的項目數量一樣多(?)。
(c)由於列表中的項目(d)比(b)更頻繁,因此次數更少?
這功課嗎?請標記爲這樣。 – 2012-04-23 19:43:52
不知道這是一個關於Python的問題,而不是關於big-O符號的問題。此外,它聞起來很像作業。 – 2012-04-23 19:43:59
@CharlesDuffy不是* cyclomatic *複雜度是對源代碼複雜程度的測量嗎? – delnan 2012-04-23 19:45:02