簡體   English   中英

為什么StringBuilder.append時間復雜度為O(1)

[英]Why StringBuilder.append time complexity is O(1)

通過攤銷分析,我們知道使用StringBuilder#append方法插入N插入需要O(N)時間。 但是,這是我迷路的地方。 考慮一下這里,其中inputString是來自用戶的輸入字符串。

for (int i = 0; i < N; i++) {
   s.append(inputString); 
   // where s is an empty StringBuilder object at the beginning 
   // and inputString is the string that is taken from the user
}

這是否應該具有O(inputString.length * N)時間復雜度,因為append()將輸入字符串復制到StringBuilder的末尾N次? 為什么我們認為append()需要O(1)時間復雜度,而應將其視為O(inputString.length)

我檢查的幾乎所有地方都將其視為O(1) ,例如https://quora.com/What-is-the-complexity-of-Java-StringBuffer-append以及此簡單代碼的復雜性是什么代碼?

由於append()將輸入字符串復制到StringBuilder的末尾N次,這是否應該具有O(inputString.length * N)的時間復雜度?

是。

為什么我們認為append()需要O(1)的時間復雜度,而應將其視為O(inputString.length)?

附加單個字符時為O(1)。 StringBuilder就像ArrayList。 當您附加單個項目時,成本為O(1)。 追加字符串就像調用addAll()一樣-開銷與字符串的長度/要添加的項數成正比。

看來您正確理解了所有內容。 問題是,人們在討論Big-O性能時通常都很草率。 這是地方性的。

暫無
暫無

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

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