首页 > 其他分享 >伪随机数和真随机数

伪随机数和真随机数

时间:2022-12-25 21:56:17浏览次数:36  
标签:几率 40 玩家 中奖 随机 随机数

真伪随机其实分别指的是几率和概率

很久以前流传着这样一则笑话:一个身患重病的人决定去动手术。在手术之前,他问医生:“这起手术的成功率是多少?”医生回答他:“只有1%。”他很惊慌,但是医生说:“没事的,在你之前我已经治死过99个人了。”

这是一则嘲笑那些不懂“概率”的人的笑话,却讲出了“真随机”和“伪随机”之间的区别。

1.随机性:完全紊乱;
2.不可预测性:从现有号码,无法推断下一个数字;
3.不可重复性:随机数之间没有重复。

真随机数是伴随物理实验,例如:掷硬币、掷骰子、电子元件噪声、核裂变等,其结果符合三个特点。

伪随机数是通过某种算法,获取随机值,不是真的很随机。
伪随机数分为强伪随机数和弱伪随机数。
1.强伪随机数:接近真实随机数,令人满意的特性。随机性与不可预测性,不可预知的。
2.弱伪随机数:满足随机性,可预测的。

在游戏当中我们一直提到的“真随机”和“伪随机”,到底是什么意思?

我们通常说的真随机又名“纯随机”(True Random Distribution),就是我们平常一直说的那种、一般意义上的“随机”。

在真随机中,每一个事件都是相互独立、服从真随机分布的,不受其他事件的发生而改变。比方说某款游戏为了吸引用户,拥有这么一个随机抽卡系统:每次抽卡时,都有1%的几率抽出SSR卡片,这个概率服从真随机分布。

回到我们最开始说的那个“治死99个”的笑话:我们一眼就能看出这个笑话的不合理性。但在抽卡游戏中,我们的大脑瞬间失去理智。有相当一部分玩家认为:我连抽100次,总能抽到这张卡吧!

实际上,连抽100次却抽不出1%的SSR卡的几率是为(1-0.01)^100=36.6%,甚至还稍稍超过了1/3。将连抽数字上升至300,也仍有4.9%的几率。

换句话说,假设有10000个玩家连抽100次,就有约3660个玩家抽不出这张SSR;10000个玩家连抽300次,也仍有约490个玩家抽不出这张SSR——这对玩家的游戏体验来说可以说是毁灭性的打击。

设计者们提出了“伪随机”的概念:在不确定性的随机事件当中,通过一系列算法使随机事件均匀分布在多次事件当中,尽可能减少或消除极端情况的发生,以提高玩家的游戏体验。

制造“伪随机”的方法有很多,

N表示当前攻击的次数,P(N)表示当前攻击的暴击率,C为概率增量。如果我们这次攻击产生了暴击,则需要将 N 重置为 1,如果这次攻击没有产生暴击,则 N + 1。

为了便于理解,这里直接给出一个具体例子:

设我们当前玩家角色暴击率还是0.5,那么对于 PRD算法,此时的 C = 0.3

可以看到,使用 PRD 算法,对于攻击是否会暴击这一问题,仍然是存在着随机性即玩家的运气因素的,但即使是运气最差的玩家,仍然也会在第四次攻击时产生暴击,因此PRD算法可以在保存随机性的同时,减少玩家运气因素对游戏结果的影响。

真随机: 有一天,小明在的班级上举办了一次抽奖活动。这个班级有40个学生,所以为了公平起见,保证每个学生都有1/40的几率中奖,老师准备了40个相同的纸盒,每个纸盒中都有40张纸条,有1张纸条是中奖纸条。这样一来,每个学生都有1/40的几率中奖,但每个学生是否中奖并不受其他学生的影响。在极端情况下,这个班上可能40个学生都能中奖。这就是真随机。

伪随机: 小明班上举办了抽奖活动。为了公平起见,老师准备了1个纸盒,纸盒中有40张纸条,只有1张纸条是中奖纸条。这样一来,每个学生都有1/40的几率中奖——但是显而易见,这个班上有且仅有一名学生能够中奖。一名学生在中奖后,余下的所有学生中奖几率都会减少至0。这就是伪随机。

标签:几率,40,玩家,中奖,随机,随机数
From: https://www.cnblogs.com/yangjialong/p/17004665.html

相关文章

  • QT实现随机数
    关于随机数,在Qt中是使用qrand()和qsrand()两个函数实现的。在前面的程序中已经看到了qrand()函数的使用,其可以产生随机数,qrand()%10可以产生0-9之间的随机数。要想产生100以......
  • 时间和随机数函数
    相关函数:ctime头文件 :#include<time.h>函数原型:char*ctime(consttime_t*timeptr);函数说明:将参数timeptr所指向的time_t结构中的信息转换成时间日期表示方法......
  • 启科 QuSaaS 真随机数解决方案与 Amazon Braket 结合实践
    作者:1.丘秉宜,2.邵伟,3.黄文,4.郭梦杰1.亚马逊云科技HERO;2.开发者生态负责人;3.DEVOPS工程师;4.资深研发工程师1、概述随机性(Randomness)是偶然性的一种形式,具有某一概率的......
  • random 产生随机数
    console.info(_.random(0,5));//=>anintegerbetween0and5console.info(_.random(5));//=>alsoanintegerbetween0and5console.info(_.random(5,t......
  • C++ 随机数生成器 mt19937
    一下代码来自官方示例//mersenne_twister_engineconstructor#include<iostream>#include<chrono>#include<random>intmain(){//obtainaseedfromthe......
  • 生成n个不重复的随机数 不包括最大值
    /**** *生成n个不重复的随机数 *@parammin *@parammax *@paramn *@return */ publicstaticvoidrandomSet(intmin,intmax,intn,HashSet<Int......
  • linux多线程随机数,随机数SecureRandom在Linux下阻塞
    https://blog.csdn.net/weixin_35973521/article/details/116813890-Djava.security.egd=file:/dev/./urandomhttps://blog.csdn.net/weixin_32159771/article/details/1......
  • [编程基础] Python随机数生成模块总结
    date:2020-06-2421:05:32+0800tags:-编程基础-PythonPython随机数生成模块教程演示如何在Python中生成伪随机数。1介绍1.1随机数字生成器随机数生成器(......
  • [编程基础] Python随机数生成模块总结
    Python随机数生成模块教程演示如何在Python中生成伪随机数。文章目录​​1介绍​​​​1.1随机数字生成器​​​​1.2Pythonrandom模块​​​​1.3随机种子​​​​2......
  • JAVA中生成随机数Random VS ThreadLocalRandom性能比较
    前言大家项目中如果有生成随机数的需求,我想大多都会选择使用Random来实现,它内部使用了CAS来实现。实际上,JDK1.7之后,提供了另外一个生成随机数的类ThreadLocalRandom,那么......