如何测试某些数字是否沿区间均匀分布?
How to test if some numbers are uniformly distributed along an interval?
我正在寻找一种算法(最好使用 c++ 中的库)或一些想法来告诉我某些数字在统计上是否以统一的方式分布在一个区间内。 想象一下,我有两个字符串:第一个没有错误,第二个在某些点上有一些错误。我想检查字符串中错误的位置是否具有统计意义。
请考虑以下示例。在第一种情况下,错误是均匀分布的,在第二种情况下,它们都位于字符串的末尾,我的算法应该对此发出一些警报。
error-free string: 0110110101010110101 (3 errors occur at pos:5,12,15 )
erroneous string : 0110010101000100101
塞顿示例:
error-free string: 0110110101010110101 (3 errors occur at pos:17,18,19 )
erroneous string : 0110110101010110010
我可以说第一个数据中的错误是正常的,但在第二个数据中不是。
到目前为止,我最终得出了这个想法:我想将字符串拆分为相等的 bin,假设字符串长度为 100。我选择 10 个垃圾箱大小为 10。然后我查看字符串中的错误总数,我们可以假设为 10。我希望在每个垃圾箱中看到 1 个错误。现在我计算我的观察在统计上与我的预期有多远。有人知道这种方法是否正确吗? 如果它有效,每个垃圾箱应该有多大。是否也应该取决于错误的数量?
您建议的方法,将字符串拆分为箱,期望看到错误数或多或少均匀分布在箱中,对诸如"每十分之一的位置都有一个错误"之类的模式是盲目的。我认为您需要一种更通用的方法来区分错误发生对位置无动于衷的情况与对发生错误的位置存在某种模式的情况
。换句话说,我认为您实际上正在寻找一种方法来衡量二进制字符串的随机程度,或者更准确地说,无模式的程度。字符串无模式的最终数学定义是字符串的柯尔莫果洛夫复杂度,定义为输出字符串的最短程序的长度。可悲的是,柯尔莫果洛夫的复杂性是不可计算的。
计算二进制字符串无模式的一种可行方法是使用线性哈达玛光谱测试。可以使用快速傅立叶变换实现测试,以便在O(n logn)
n
是字符串的长度时运行。但是,在我看来,C++ 年没有现成的测试实现。
假设你愿意为了便于实现而在测试的健壮性上做出一点妥协,你可以使用以下方法:要测量字符串的无模式性,只需 gzip 一个内容为字符串的文件,然后检查压缩率。压缩越差,字符串就越无图案。该方法依赖于这样一个事实,即gzip包含了柯尔莫果洛夫复杂性的某些方面。特别是,存在一些易于检测的模式提高了压缩率。
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 是否有更有效的方法来检查元素是否在给定的区间内
- C++显示两个区间之间的数字的程序检查一个数字是否可以表示为两个素数的总和
- 如何测试某些数字是否沿区间均匀分布?
- 如何查找点是否在一组区间内