从内置nextString()
库调用scala.util.Random
时,需要多长时间才能运行?那是 O(n)吗?
答案 0 :(得分:1)
在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),就字符串的长度而言
答案 1 :(得分:1)
是的,这是O(n)。它不能低一些,因为它会创建一个新的字符串并且具有O(n)成本。它不应该更高,因为创建一个随机数是O(1),这足以选择一个字符或单词。而在实践中,它实际上是O(n)。
但是,由于它的实现方式,常数因素相当高。如果你真的很快地创建随机字符串很重要,那么你应该得到自己的高性能随机数生成器并将字符包装成char数组。