【问题标题】:What is the efficiency of javascript .toUpperCase method?javascript .toUpperCase 方法的效率是多少?
【发布时间】:2018-06-11 22:01:34
【问题描述】:

所以这似乎是一个超级基本的问题,但我想知道 javascript 内置的 .toUpperCase() 方法 - 时间效率是 O(n) 还是 O(1)?

我一直只是假设它会是恒定的时间,但现在我想它......“在引擎盖下”这种方法不需要遍历每个字符来一个一个地检查它是否是小写的吗? (因此使其成为 O(n)

【问题讨论】:

  • 是的,内部字符串必须一次处理一个字符(实际上是一个代码点)。
  • O(n),你必须遍历字符并操作它们。还要注意 toUpperCase() 确实是不可变的,所以它返回字符串的副本......所以再次 O(n)
  • 即使它没有改变任何东西,它也必须复制一个字符串,即O(n)
  • @barmar 但是,不是因为它必须遍历每个字符才使它成为 O(n) 吗? “复制”部分不是 O(1) 吗?
  • 我做了一些性能测试。 toUpperCase 的持续时间似乎随着字符串长度线性增长,尽管它可以忽略不计。

标签: javascript algorithm performance big-o


【解决方案1】:

规范的String.prototype.toLowerCase ( )中描述的算法是O(n)。原始字符串的每个代码点(或原始对象的字符串表示形式)都被复制并转换为新的代码点。

toUpperCasetoLowerCase 返回新字符串(因为 JavaScript 字符串是不可变的)这一事实足以验证该操作需要线性时间,而不是恒定时间。

【讨论】:

    猜你喜欢
    • 2020-08-21
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多