`Random.nextString()`在Scala中花费O(n)时间吗?

时间:2016-04-03 22:17:58

标签: scala random time-complexity big-o

从内置nextString()库调用scala.util.Random时,需要多长时间才能运行?那是 O(n)吗?

2 个答案:

答案 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数组。