這是我的功能:
private def generateOneThousandRandomNumbers(listOfNumbers: List[String] = List.empty): List[String] = {
if (listOfNumbers.size == 1000) {
listOfNumbers
} else {
val nextNumber: String = Random.nextInt(10000000).toString
if (listOfNumbers.contains(nextNumber)) {
println("DUPLICATE NUMBER GENERATED: " nextNumber)
}
generateOneThousandRandomNumbers(listOfNumbers List(nextNumber))
}
}
我有十個完全一樣的測驗:
"areUnique1" in {
val x = generateOneThousandRandomNumbers()
x.size shouldBe x.distinct.size
}
因此,根據我的計算,一次測驗應該只會創建重復的 1/10,000 次運行,而如果進行 10 次測驗,它應該只會創建重復的 1/1,000 次運行。但是,它會在大約 50% 的運行中創建重復項,我不知道為什么。
uj5u.com熱心網友回復:
根據生日悖論,你只需要 23 個人在一個房間里,就有 50% 的機會讓其中 2 人共享一個生日,盡管事實上有 365 個不同的可能生日。
您的代碼也是如此:您有 10,000,000 個不同的可能值,但如果您將多個值放入~sqrt(10,000,000) ~= 3162容器中,則其中兩個相同的可能性 >50%。
你只在你的容器里放了 1000 個,所以發生碰撞的幾率不是 50%,但它仍然會很高。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532052.html
標籤:爪哇斯卡拉随机的
