- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
著名的 Fisher-Yates 洗牌算法可用于随机排列长度为 N 的数组 A:
For k = 1 to N
Pick a random integer j from k to N
Swap A[k] and A[j]
有人一再告诉我不要犯的一个常见错误是:
For k = 1 to N
Pick a random integer j from 1 to N
Swap A[k] and A[j]
也就是说,您不是从 k 到 N 中随机选择一个整数,而是从 1 到 N 中随机选择一个整数。
如果你犯了这个错误会怎样?我知道生成的排列不是均匀分布的,但我不知道生成的分布有什么保证。特别是,有没有人有关于元素最终位置的概率分布的表达式?
最佳答案
实证方法。
让我们在 Mathematica 中实现错误的算法:
p = 10; (* Range *)
s = {}
For[l = 1, l <= 30000, l++, (*Iterations*)
a = Range[p];
For[k = 1, k <= p, k++,
i = RandomInteger[{1, p}];
temp = a[[k]];
a[[k]] = a[[i]];
a[[i]] = temp
];
AppendTo[s, a];
]
现在获取每个整数在每个位置出现的次数:
r = SortBy[#, #[[1]] &] & /@ Tally /@ Transpose[s]
让我们在结果数组中取三个位置,并绘制该位置每个整数的频率分布:
对于位置 1,频率分布为:
对于位置5(中间)
对于位置 10(最后一个):
在这里,您将所有位置的分布绘制在一起:
这里你有超过 8 个位置的更好的统计数据:
一些观察:
您可以想象这些属性,查看从同一点开始的所有线(第一个属性)和最后一条水平线(第三个属性)。
第二个属性可以从下面的矩阵表示例子看出,其中行是位置,列是人数,颜色代表实验概率:
对于 100x100 矩阵:
编辑
为了好玩,我计算了第二个对角线元素的精确公式(第一个是 1/n)。其余的可以完成,但是工作量很大。
h[n_] := (n-1)/n^2 + (n-1)^(n-2) n^(-n)
验证值从 n=3 到 6 ({8/27, 57/256, 564/3125, 7105/46656})
编辑
在@wnoise answer 中进行一些一般的显式计算,我们可以获得更多信息。
将 1/n 替换为 p[n],因此计算保持不变,例如我们得到矩阵的第一部分 n=7(点击查看大图):
其中,在与其他 n 值的结果进行比较之后,让我们识别矩阵中的一些已知整数序列:
{{ 1/n, 1/n , ...},
{... .., A007318, ....},
{... .., ... ..., ..},
... ....,
{A129687, ... ... ... ... ... ... ..},
{A131084, A028326 ... ... ... ... ..},
{A028326, A131084 , A129687 ... ....}}
您可能会在精彩的 http://oeis.org/ 中找到这些序列(在某些情况下具有不同的符号)
解决一般问题比较困难,但我希望这是一个开始
关于algorithm - 你从这个 splinter 的随机洗牌中得到什么分布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52325226/
所以我使用 splinter 登录到一个站点,然后我在登录后抓取 cookie,然后将其保存为 pickled 对象以备后用。 def save_cookie(username, password):
嗨,我想升级我的单声道版本,以便能够使用某些 .Net 4 功能。 我下载了 2.10 压缩包并按照我发现的说明进行了编译,这似乎进展顺利。 这是我得到的输出: $mono -V Mono JIT c
我是 Pov-Ray 的初学者,我正在尝试在 Pov-Ray 中创建一个车床对象,但它看起来有点破损。有人可以给我一些关于如何修复它的建议吗? 我用来创建的代码是 #include "colors.i
from splinter import Browser browser = Browser() browser.visit('http://www.google.com/') 直接从他们的教程开始,
最近,我注意到我的视差代码从左到右出现奇怪的抖动。代码非常简单: $(window).scroll(function(){ var body = $('body'); var top
我尝试了 overflow:hidden 解决方案来解决破坏 border-radius 的背景:http://jsfiddle.net/ypjDC/17/ test tes
当我将 Nilorea 库中的这个多行宏包含在我的 C++ 项目中时,它无法编译。它被标记为外部“C”。 尝试了 GodBolt,GCC 8.1 编译器在以下代码中的 if 语句上 barfs:htt
我在 python 上使用 splinter 模块。我需要检查一个元素在页面上是否可见,似乎唯一的判断方式是 style="display: none;"我找不到检测方法。 如何检查? 最佳答案 如果
这个问题在这里已经有了答案: left and top properties are not animated (2 个答案) 关闭 6 年前。
我需要通过传递一个字符串数组来在页面上执行 JavaScript 函数。我想避免多次调用 browser.execute_script 。 list_of_strings = ['a','b','c'
我正在尝试在以下方面进行浏览器自动化: https://play.google.com/store/apps/details?id=org.mozilla.firefox&hl=en 我可以使用以下方
鉴于此(“ sleep ”方法是为了让您可以看到我正在看的内容): from splinter import Browser import time #from selenium.webdriver.
我使用的是相对简单的组合布局,它确实有效,但在某些情况下,我的 UICollectionView 中的最后一两个单元格的宽度似乎不正确。 我的 collectionView 由具有动态宽度和静态高度的
我的对象列表是如此初始化: $( function() { var $container = $('div.hikashop_products'); $container.isotop
我正在使用jPlayer在页面中嵌入两个音频文件,基本上代码是cut'n'pasted from this page。一个是wav,另一个是mp3。在本地(mac)上一切正常,但是当我将其上传到服务器
在索引的names字段中执行术语汇总时,我得到了错误的结果。 以下是我使用的names字段的映射: { "dbnames": { "properties": { "names"
我想对视频播放(基于 AVPlayer)产生类似 splinter 的效果,它将转换到另一个视频或图像。 是否可以在 iOS5/6 中对这种视频创建这种效果? 如果不是,另一种方法是在最后播放帧的静止
我正在使用 Flask 尝试提供经过处理的图像,例如在模型处理后裁剪或将其转换给用户,但总是很短,因为它会产生一些错误。当我使用 numpy.rot90() 时,它没有按计划旋转我的图像,而是得到了这
XMFLOAT4X4 在矩阵定义中使用并内的并,但是当我尝试使用和不使用额外并的相同方法时,我会在访问模式中得到不同的结果。我不确定这是否是在 union 的初始化中,或者我在实现中可能会出错的地方。
这两条线实际上是点,但是当我运行 lineIntersects 方法时,我得到“true”作为返回值,有谁知道发生了什么或者这是一个错误?这是 documentation link这是source ,
我是一名优秀的程序员,十分优秀!