- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
或多或少与this question相同但是如果要选择的容器尽可能通用(即只有一个 Forward Container 或什至可能只是一个简单的 Container ),则不应假设容器有一个 .size() 并走两次(一次)计算大小并再次获取结果集)是 Not Acceptable 。
我有一个解决方案,它比我想要的稍微复杂一点,依赖性也更多,所以我希望能有 3-5 行范围内的东西。
最佳答案
我假设“随机元素”是指均匀分布的元素。
由于您不知道序列的长度,也无法事先计算它,因此您必须逐步构建随机序列。因此,让我们这样做吧,希望我们使用的所有概率都能很好地相加,从而最终得到我们最初想要的结果。
我们将分两步进行。首先,决定抽取哪些序列号,然后我们可以根据需要为它们选择一个随机顺序(问题中并不清楚)。我会称你的 N 为“K”,因为这对我来说更容易。
首先我们创建一个K元素数组,用来存放K个绘制的元素。我们遍历序列的前 K 个元素并将它们复制到数组中。如果序列没有 K 个元素,我们说“不行”。
现在我们知道我们有来自 K 大小序列的 K 个随机元素。如果我们在序列的末尾,我们就完成了。如果不是,我们知道我们有一个 K+1 大小的序列。这里有两个选项,要么选择第 K+1 个项目,要么不选择。
第K+1项被选中的概率是多少?我发现计算第 K+1 个项目未被选中的概率更容易。从 K+1 中选择 K 个元素有 (K+1 over K) 种方法,如果 K+1 的元素没有出现,则只有 (K over K) 种方法选择 K 元素。所以 (K over K)/(K+1 over K) 是第 K+1 项未被选中的概率。
因此,选择一个介于 0 和 1 之间的随机数,如果它小于 1/(K+1),则第 K+1 个元素不会出现在序列中。如果随机数大于该数,则第 K+1 个元素确实出现在序列中。从1到K中随机选择一个元素,替换为第K+1个元素。
现在我们移至下一项,即第 K+2 项。我们再次做同样的事情。第 K+2 个项目不出现在序列中的概率是 (K+1 over K)/(K+2 over K)。
这样做直到序列用完。然后你有一个从序列中随机选择的 K 元素的列表。
请注意,它们不是随机排序的(至少对于短序列而言不是),因此您可能希望为此选择一个随机的 K 大小排列。
免责声明:概率是一个婊子,虽然这对我来说似乎是正确的,但我有可能错过了一些东西,最终结果不会平均分布。其他人很快就会说出来。
关于c++ - 从 STL 容器中抽取 n 个随机元素(无替换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17509898/
我想对一个字符串执行搜索和替换,比如 password。 正如您从问题中了解到的那样,替换后的字符串应变为 sdvvzrug。 但不幸的是,下面的代码输出bbbbcaab: $search = ran
我正在使用 futurize --stage2它应用了许多源代码转换以使代码 python2 和 python3 兼容。其中一个修复是所有分区 a/b 都替换为 old_div(a/b),我想避免这种
我正在使用 RStudio,但我在控制台上的输出被截断了。我找不到如何停止截断(我尝试搜索 ?options 以及在谷歌上搜索的时间比我想承认的要长)。 编辑:我向大家道歉!我最初的长名称为“This
我有一个 fragment 堆栈,我在其中使用替换和相加。添加或替换我的 fragment 的代码(在我的 Activity 中)如下 private fun addFragment(fragment
我在一个数组中插入了一些字符串,但在我这样做之前,我想按照主题所说的去做。只用 %20 替换空格,我这样做: Name.push(linkText.replace(" ", "%20")); 但是我如
我正在尝试编译和测试我在网上看到的代码 Expanding an IP add 。但是,当我尝试编译它时,我收到有关 StringBuilder 替换方法的错误。它说: IPadd.java:52:
我正在尝试使用 dplyr 的最新功能重写我的部分代码,方法是将 data.frame() 替换为 data_frame() 和 cbind() 与 bind_cols(): library(rgeo
我最近偶然发现了 replace()和 "[ x.tst s.tst s.tst [,1] [,2] [,3] [1,] 0 0 0
我一直想知道,如何在给定的参数内进行替换。 如果你有这样的一行: 123,Hello,World,(I am, here), unknown 你想更换 World与 Foobar那么这是一个简单的任务
如何转义字符串中的双引号?例如, input: "Nobody" output: \"Nobody\" 我尝试过这样的操作,但不起作用: String name = "Nobody"; name.r
我正在做类似的事情: SQL sql sQl SqL var ps = document.getElementsByTagName('p'); for(var i = 0; i 但它不会替换文本。
我正在尝试用 \" 替换所有 " 并用 JSON 解析字符串,但浏览器抛出错误 SyntaxError: JSON Parse error: Unrecognized token '\'. 下面是代码
大家好,在这里挣扎...... 是否可以将第一个正斜杠之间的任何内容替换为“”,但保留其余部分? 例如var 将是 string "/anything-here-this-needs-to-be-re
在下面的代码中,JavaScript 替换函数中的 alert(a) 将提醒匹配的字符串,在本例中,将是 {name} 和 {place}。 这按照文档 javascript docs 的描述工作,即
+-----------------------------+ | tables | +-------------------
我正在尝试用\"替换包含 "的字符串,下面是我尝试过的程序 String s="\"/test /string\""; s = s.replaceAll("\"", "\\\"");
var text = "a's ..a's ...\"... "; text = convert(text); function convert( text ) { var n = text
我正在尝试使用 JavaScript 中的替换函数,但有一个问题。 strNewDdlVolCannRegion = strNewDdlVolCannRegion.replace(/_existing
好吧,首先我对我的上一篇文章感到非常抱歉,但我真的需要帮助,我会把我真正想要的东西放在一个更清晰的代码中。我不擅长 javascript,所以希望你能帮助我。
我正在写一张纸条,遇到了障碍。可能有更有效的方法来执行此操作,但我对 Python 还很陌生。我正在尝试创建用户生成的 IP 地址列表。我正在使用 print 来查看生成的值是否正确。当我运行此代码时
我是一名优秀的程序员,十分优秀!