首页 » 网站建设 » php随机json技巧_随机数生成算法科普

php随机json技巧_随机数生成算法科普

duote123 2024-12-13 0

扫一扫用手机浏览

文章目录 [+]

提要

0. 背景先容

php随机json技巧_随机数生成算法科普

1. 什么是随机数天生算法

php随机json技巧_随机数生成算法科普
(图片来自网络侵删)

2. 最大略的随机数天生算法

3. 接下来的研究

零 - 背景先容

比如吧, 最近口试就创造, 一个比较问题, 这个问题便是, 比如你问口试的人, php 数组转 json, 怎么砖.

对方就会说, echo(json_encode($data)), 这么大略都不会, 根本不是写了 25 年 php 的大神, 对不对.

那么如果我按照口试理论接着问下一个问题, 那么对方八成会哑火, 那么我下一个问题问的一定便是.

"请自行实现一个 json 解析器, 并阐述其事理, 并附上性能评估指标".

这个问题一出, 基本上百分之八十所谓的市情上的工程师就哑火了, 乃至有很多人说不清楚各种 Tree 的差异, 以及乃至有人不知道去哪里找 json 数据构造的标准. 比如我这样的伪装成大佬的 PHP 乘务员, 搜了一个小时百度才找到, 原来 json 标准在这里 https://www.json.org/json-en.html.

同时你随便找人问, 百分之八十的人不知道 RFC 文档是什么, 五成的人不知道 github 是干嘛的.

这便是现在世面上的人才分布了, 虽然说是正态分布, 不过略有担心.

以是我本日就像到一个话题, 那便是越是根本的东西, 实在理解起来越困难, 比如我们常常用到的随机数天生.

我们直接去调个函数, 调个包, 想要几位的随机书, 就出来了, 但是个中的算法鲜为人知, 让自己涉及一个随机诗人成算法, 更是困难.

为什么呢? 由于现在学界没有真正的随机数天生算法, 全部都是伪随机的算法, 那么便是说, 所有的数实在都不是均匀分布在全体区间的, 是有一定的规律的, 这些天生的数字, 都在一个序列里, 这个序列的是非, 决定了重复的周期.

随机数实在非常主要, 并且运用广泛, 最主要的是, 在信息安全领域, 密码学领域, 有广泛的运用, 不过说的都很宽泛和空洞, 没办法细说, 由于我对这个东西理解也不深刻, 大家可以等我读 10 本密码学书之后, 然后等我的运用数学专业的学位考下来了, 再给大家阐明一下, 为什么随机数天生算法如此主要.

一 - 什么是随机数天生算法

下面这段来自 chatGPT, 我也不多说了, 大存问思大家都能理解. 只是现在打算机上还无法实现真正的随机数天生算法, 当然纯挚就算法层面而言.

比如说利用了一些自然界中的数据, 放射性元素的衰变, 以及各种气压, 气温等等, 那都不是真正的随机.

为啥呢? 由于它借助了外部的东西, 一个纯粹的算法, 该当是一个完备的随机数天生算法, 不须要利用外部的东西.

不过这都是我自己理解的, 我找到了一些资料阐明为什么现在还没有真正的随机数天生算法. 很多阐明都是说打算机只能实行打算过程, 没办法进行 "think(思考)".

那么是否说往后可以利用 AI 的算法来天生随机数了呢?

如果我要本地支配一个随机数天生算法, 是否须要花好几万买英伟达的最贵最新的显卡, 推理三个小时, 耗费 200 元电费, 就为了天生一个 2 位的随机数呢?

这都是须要考虑得事情呀!

随机数天生算法是一种打算方法,可以天生一系列看似随机的数字。
这些算法用于须要随机性的各种运用程序,例如加密、仿照和游戏。

随机数天生器有几种不同类型,包括:

伪随机数天生器(PRNG):这些算法天生一个数字流,看起来很随机,但实际上由一个称为种子的固定初始值决定。
PRNG是确定性的,意味着它们始终会利用相同的种子产生相同的数字序列。

真随机数天生器(TRNG):这些算法利用物理过程(如大气噪声或放射性衰变)天生真正的随机数。
TRNG是非确定性的,意味着每次利用时都会产生一个新的随机数序列。

加密安全随机数天生器(CSPRNG):这些算法旨在为加密运用程序供应高质量的随机数。
它们利用来自PRNG和TRNG的技能组合来天生既不可预测又具有统计随机性的随机数。

选择利用哪种类型的算法取决于运用程序的特定哀求。

常见的伪随机数天生算法大概有下面的几种

1. 线性同余法:这是最常见的随机数天生算法之一。
公式为Xn+1 = (aXn + c) mod m,个中a、c、m和X0是任意给定的常数,Xn是当前的随机数,Xn+1是下一个随机数。

2. 梅森旋转算法(Mersenne Twister):这个算法可以天生高质量的随机数,并且周期非常长。
它采取了大量的位运算和移位操作,具有高效率和较好的随机性。

3. 哈希算法:这个算法将输入的数据通过哈希函数转换为一段固定长度的随机数字串。
由于哈希函数的特性,输出结果与输入数据之间的关系非常繁芜,因此可以天生高质量的随机数。

4. 递推算法:这个算法利用已知的前几个随机数通过某种递推公式来打算下一个随机数。
递推算法的随机性取决于初始值和递推公式的选择

二 最大略的随机数天生算法

上面列举了一些随机数的天生算法, 但是都不足大略, 我这里为相识释例子, 以是就选取了由冯诺依曼大神再 1949 年提出的一个非常大略的, 在埃尼阿克上运行的一个随机数天生算法.

这个算法便是 平方取中法(Middle-square method).

就和它的名字一样, 这个算法和平方有关, 详细的算法非常大略, 乃至不须要描述直接上代码大家也能看懂.

乃至比冒泡排序还大略.

详细的逻辑便是, 比如要天生一个 2 位的随机数, 那么我们须要先选取一个种子, 比如 25, 然后给 25 求平方, 如果求得的数的位数, 不知足 2m (m为要生产的数的位数, 这里是 2), 那么在数的左侧补零, 然后取天生的数的中间的两位作为天生的随机数, 并且保存起来, 作为下一次打算的种子.

这便是全体的算法过程, 全体打算过程, 只有一个乘法, 而乘法在 cpu 上实在是加法, 以是全体的算法的打算效率, 集中在要天生的数有多大上.

由于要天生的数的位数越多, 那么乘法就越耗时, 不过证题的算法效率是可以接管的.

这个算法的问题在于很随意马虎涌现循环, 以是没有得到广泛的运用. 本来打算贴一段代码, 但是逻辑太大略, 就不贴代码了.

三 接下来的技能研究

实在我对诺伊曼的这段算法的阐述不足好, 为啥呢? 由于我没有办法瞬间想到这个 loop, 也便是随机数的分布循环到底是什么样的概率, 以及如何去优化, 这些我都没有想到.

我虽然把算法给说出来了, 由于算法本身比较大略, 但是就随机数本身, 实在所有随机数都在一个序列里, 这个序列便是某个函数上的取值.

以是这些算法根本不能算上随机算法, 乃至伪随机都有现勉强.

在统计学上更是站不住脚的, 以是这个算法作为菜鸟学算法的入门还是不错的, 大概著名的随机数的天生算法有十来种.

我们可以做一个专题, 专门从科普加少量数学理论的角度去研究这些算法. 同时随机数的分布该当是均匀的.

那么我们还可以通过散点图的形式去研究不同算法随机数的分布, 实在如果可以看到很短的 loop, 那么这种算法就比较不好了.

本日就写到这里吧, 加油!

相关文章

全局彩色文字php技巧_PHPcli 彩色日志

怎么样?我们平常在cli下写脚本,便于记录反馈,加上这么个东西,是不是瞬间觉得清晰多了呢?代码:颜色殊效掌握:颜色如下:none...

网站建设 2024-12-15 阅读0 评论0