`Random.nextString()` 在 Scala 中需要 O(n) 时间吗?

Does `Random.nextString()` take O(n) time in Scala?

从内置的scala.util.Random库调用nextString()时,到运行需要多少时间?那是 O(n)?

无法在 Scala 文档中找到任何内容,但来自 source code:

def nextString(length: Int) = {
        def safeChar() = {
          val surrogateStart: Int = 0xD800
          val res = nextInt(surrogateStart - 1) + 1
          res.toChar
        }

        List.fill(length)(safeChar()).mkString
}

我会说 O(n),假设 nextInt() 的 O(1),关于所问字符串的长度

是的,是 O(n)。它不能再低了,因为它创建了一个新字符串并且具有 O(n) 成本。它不应该更高,因为创建一个随机数是 O(1),这足以选择一个字符或单词或其他东西。实际上它实际上是 O(n)。

不过,由于它的实现方式,常数因子非常高。如果快速生成随机字符串对您很重要,您应该获得自己的高性能随机数生成器并将字符打包到字符数组中。