[英]What is the time complexity of StringBuilder.append() in java?
[英]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.