簡體   English   中英

如何計算這個基本求和算法的時間復雜度?

[英]How to calculate the time complexity of this basic summing algorithm?

我想了解以下偽代碼中給出的算法的時間復雜度是什么以及如何計算。 我懷疑 TC 是 O(n) 因為有一個循環遍歷整個列表但我不確定還是 O(n^2) 因為在每個循環中列表的search功能也被調用? 但一般來說如何計算給定算法的時間復雜度。 先感謝您。

for i = 0 to n-1
    Add the numbers A[0] thru A[i]
    Store the result in B[i]

您擁有的算法的運行時間是 O(n^2)。 在第二行中,您將 A[0] 與 A[i] 相加。 所以循環迭代 n 次。 在第一次迭代中,您將添加 A[0],然后是 A[0] + A[1],然后是 A[0] + A[1] + A[2],依此類推。

所以一般來說,在迭代 i 中,您將添加 i 個數字。 所以運行時間將是:

1 + 2 + 3 + ... + n

這是評估為n(n+1)/2的前 n 個數字的總和: https : //brilliant.org/wiki/sum-of-n-n2-or-n3/

通常,並非循環內的每一行都是恆定時間。 嘗試查看在循環的幾次不同迭代中每一行發生了什么,以了解發生了什么。 如果它在每次迭代中都發生變化,那么它就不是恆定的。

然而,有一個 O(n) 算法,您只需增加一個 sum 變量:

sum = 0
for i = 0 to n - 1:
    sum += A[i]
    B[i] = sum

在這種情況下,在迭代 i 開始時,sum 已經存儲了 A[0] 到 A[i-1] 的總和,因此要獲得 A[0] 到 A[i] 的總和,只需添加 A[i]

暫無
暫無

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

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