`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)。
不过,由于它的实现方式,常数因子非常高。如果快速生成随机字符串对您很重要,您应该获得自己的高性能随机数生成器并将字符打包到字符数组中。
从内置的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)。
不过,由于它的实现方式,常数因子非常高。如果快速生成随机字符串对您很重要,您应该获得自己的高性能随机数生成器并将字符打包到字符数组中。