【问题标题】:Counting Operations of String Concatenation in JavaJava中字符串连接的计数操作
【发布时间】:2021-02-04 01:47:48
【问题描述】:

我试图理解为什么字符串连接在 Java 中是 O(n) 时间复杂度。 我们被告知s1 + s2 将创建一个长度为s1.length() + s2.length() 的新字符串,并将s1s2 复制到该新字符串中。 因此(由他们)计算了以下成本2 + 2(n+1) + 1 => (5 + 2n)

我不确定我是否理解我的讲师是如何计算出来的。有人介意向我解释字符串连接的操作以证明上述成本是合理的吗?

【问题讨论】:

  • 您认为5+2n 的复杂性是什么?
  • @Naman 我知道5 + 2n = O(n),但我不明白他们是如何到达5 + 2n 的。字符串s1s2 是否被循环分配给一个新字符串?
  • so if 两个字符串的长度都是n,你会有n 字符演练每个字符串,意思是2n,关于那些恒定的操作,也许找到他们的长度是其他人可能称为2 的内容,然后对于3 的其余部分类似的内容。显示代码可能是值得的。
  • 实际的实现可能会使用低级操作一次复制多个字符,但原则上是的,它必须从两个字符串中复制每个字符。
  • 谢谢你们,这很有帮助。

标签: java time-complexity


【解决方案1】:

我会小心地对 Java 中字符串连接期间发生的情况做出假设,因为它从 Java 9 开始在内部发生了变化。

可以在此处找到有关此主题的良好演示:https://www.javaspecialists.eu/talks/pdfs/2018%20Voxxed%20in%20Thessaloniki,%20Greece%20-%20%22Enough%20java.lang.String%20to%20Hang%20Ourselves%20...%22%20by%20Heinz%20Kabutz.pdf

也值得一读:https://dzone.com/articles/jdk-9jep-280-string-concatenations-will-never-be-t

而且已经有点老了,但可能与你有关:https://stackoverflow.com/a/15401136/875083

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2014-03-21
    • 2012-08-28
    相关资源
    最近更新 更多