Author: Notus(hehe_xiao@qq.com)
Create: 2019-02-17
Update: 2019-02-17

随机数测试-续:Frequencey test(monobit test), Serial test(two-bit test), Poker test and Runs test

环境

Python version: 3.7.1

代码如下(PseudorandomTest.py)

'''Pseudorandom Sequences Tests: 1. Frequency test (monobit test)2. Serial test (two-bit test)3. Poker test4. Runs test5. Autocorrelation test@Author: Notus(hehe_xiao@qq.com)@Create: 2019-02-15@Update: 2019-02-17
'''# 1. Frequency test(monobit test)
def monobitTest(num):n = len(num)n0 = num.count('0')n1 = num.count('1')X = (n0 - n1) ** 2 / nreturn n, n0, n1, X# 2. Serial test(two-bit test)
def serialTest(num):n = len(num)n0 = num.count('0')n1 = num.count('1')n00 = n01 = n10 = n11 = 0for i in range(0, n-1):i0 = num[i]i1 = num[i+1]if i0 == '0':if i1 == '0': n00 += 1else: n01 += 1else:if i1 == '0': n10 += 1else: n11 += 1i += 1X = 4 * (n00**2 + n01**2 + n10**2 + n11**2) / (n-1) - 2 * (n0**2 + n1**2) / n + 1return n, n00, n01, n10, n11, X # 3. Poker test
def pokerTest(num, m):n = len(num)k = n // mif k < 5 * (2 ** m):raise ValueError("Error: the value of m is invalid for Poker Test!")# ni count list, 0 <= i <= 2**m - 1ni_list = [0] * (2 ** m)# counting  for b in range(0, n-m, m):index = 0for c in range(m):index = index * 2 + int(num[b + c])ni_list[index] += 1s = 0for i in range(1, 2**m + 1):s += ni_list[i - 1] ** 2X = (2 ** m) * s / k - kreturn k, ni_list, X# 4. Runs test
def runsTest(num):n = len(num)e = {}for i in range(1, n + 3):e_i = (n - i + 3) / (2 ** (i + 2))if e_i >= 5:e[i] = e_ik = max(e.keys())B = [0] * kG = [0] * kdef countBG(bit, runLength):counts = 0contNumbs = 0               # continuous number countsfor idx in range(n):if num[idx] != bit: if contNumbs == runLength:counts += 1contNumbs = 0continuecontNumbs += 1# last block or gapif contNumbs == runLength and idx == n - 1: counts += 1 return countsfor i in range(k):B[i] = countBG('1', i + 1)G[i] = countBG('0', i + 1)x1 = x2 = 0for i in range(1, k + 1):x1 += (B[i-1] - e[i]) ** 2 / e[i]x2 += (G[i-1] - e[i]) ** 2 / e[i]X = x1 + x2return e, k, B, G, X# 5. Autocorrelation test
# Todoif __name__ == '__main__':num = ('11100' + '01100' + '01000' + '10100' + '11101' + '11100' + '10010' + '01001') * 4x1 = monobitTest(num)print("frequency test: \nn = {}, n0 = {}, n1 = {}, \nX1 = {}\n".format(*x1))x2 = serialTest(num)print("serial test: \nn = {}, n00 = {}, n01 = {}, n10 = {}, n11 = {}, \nX2 = {}\n".format(*x2))try:x3 = pokerTest(num, 3)except ValueError as err:print(err.args[0])sys.exit()print("poker test: \nk = {}, ni_list = {} \nX3 = {}\n".format(*x3))x4 = runsTest(num)print("runs test: \ne = {}, k = {}, B = {}, G = {} \nX4 = {}".format(*x4))

运行结果

python PseudorandomTest.py
frequency test:
n = 160, n0 = 84, n1 = 76,
X1 = 0.4serial test:
n = 160, n00 = 44, n01 = 40, n10 = 40, n11 = 35,
X2 = 0.6251572327043959poker test:
k = 53, ni_list = [5, 10, 6, 4, 12, 3, 6, 7]
X3 = 9.641509433962263runs test:
e = {1: 20.25, 2: 10.0625, 3: 5.0}, k = 3, B = [25, 4, 5], G = [8, 20, 12]
X4 = 31.791306264856992

转载于:https://www.cnblogs.com/leo1875/p/10389966.html

每日一程-10.五种基本随机数测试-续相关推荐

  1. Unity 之 关于停止协程的五种方式解析

    Unity 之 关于停止协程的五种方式解析 前言:了解协程 方式一:函数的方式 方式二:函数名的方式 方式三:接收返回值 方式四:StopAllCoroutines 方式五:禁用/销毁游戏对象 本文小 ...

  2. 常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序

    冒泡排序 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地跑过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)那么它就会按照大到小的 ...

  3. PHP生成订单号的五种方法:时间拼接随机数 混拼字母 减年份转十六进制 雪花算法 拼接时间戳与随机数

    第一种:年月日时分秒+拼接随机数   危险 稍微体量一大这种肯定有重复 $danhao = date('YmdHis') . str_pad(mt_rand(1, 99999), 5, '0', ST ...

  4. php随机数字不重复使等式成立_php随机数不重复生成的五种方式

    在前一篇文章中我介绍了php随机数的生成方法,我们都知道php随机数不管是在开发中,还是在移动应用中,都是不可少的一部分,平时日常开发中经常会跟php随机数打交道,那么今天就给大家介绍php随机数不重 ...

  5. 升级Windows 10 22H2的五种方法

    微软预计于10月推出Windows 10 22H2,无论是21H2.21H1.20H2还是旧版本的用户,都可以手动升级.那么要如何手动升级呢?下面小编就给大家整理了五种方法分享给大家. 重要提示:无论 ...

  6. Win7 10安装Office2010提示让安装MSXML组件的五种解决方法

    在安装office2010的的时候,有时候会提示"安装错误.若要安装Microsoft office2010 需要在计算机上安装 MSXML版本6.10.1129.0.请安装此组件,然后重新 ...

  7. Java代码实现负载均衡五种算法

    前言: 负载均衡是为了解决并发情况下,多个请求访问,把请求通过提前约定好的规则转发给各个server.其中有好几个种经典的算法.在用java代码编写这几种算法之前,先来了解一下负载均衡这个概念. 1. ...

  8. formdata.append加多个值_redis的五种数据结构和应用场景:微博微信点赞+加购物车等...

    Redis五种数据结构如下: 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value. String类型是二进制安全的,意思是 redis 的 string 可以包 ...

  9. socket编程五种模型

    客户端:创建套接字,连接服务器,然后不停的发送和接收数据. 比较容易想到的一种服务器模型就是采用一个主线程,负责监听客户端的连接请求,当接收到某个客户端的连接请求后,创建一个专门用于和该客户端通信的套 ...

最新文章

  1. poj 3740 Easy Finding
  2. linux内核 RCU机制概述
  3. SAP Spartacus HTTP请求的错误处理机制
  4. etmvc mysql乱码_etmvc中集成spring使用druid连接池
  5. 记一次FFMPEG转avi视频保存到ftp服务器的失败尝试
  6. 关于Websockets问题:
  7. python贴吧评论没有权限怎么回事_女朋友总是问我谁好看,只好用python整个评分来回答灵魂拷问!出事就让百度背锅吧!...
  8. 移动边缘计算——MEC
  9. Linux的远程传输文件scp及出现Permission denied (publickey).lost connection问题解决方法
  10. [密码学复习]Cryptography
  11. 【个人】当我秀智商的时候我秀什么
  12. Nginx负载均衡探活max_fails和fail_timeout的设置、根据参数转发upstream
  13. Metrics 使用
  14. 类加载器(ClassLoader)
  15. 【电脑讲解】amd主板pbo是什么?微星技嘉主板如何设置pbo?
  16. google常用语法
  17. 初识 OKR/OKR是什么
  18. H.264编码器基本原理
  19. 贝叶斯网络结构学习(基于BDAGL工具箱的MATLAB实现)
  20. 【opencv的学习】播放avi视频和视频播放控制

热门文章

  1. 【转载】2009年.NET技术大会讲义(上)——PDF分享
  2. C++ 最大公约数排序
  3. php在线读取pdf文件大小_南公子私藏PDF神器曝光
  4. 怎么看rabbitmq的浏览器信息_没用过消息队列?一文带你体验RabbitMQ收发消息
  5. python扩展库安装
  6. 点按钮ajax get方法修改0或1状态封装成函数
  7. HTML 5常用的交互元素————内容交互元素(2)
  8. 2017年如何在移动端优雅的使用flex
  9. Hadoop 之Pig的安装的与配置之遇到的问题---待解决
  10. Linux 访问权限