js基础算法

今天谈谈随机数,随机数就是Math.random() 生成的是 0-1取不到1的值,取0的几率也非常低,所以我们平时用它*一个值然后向下取整得到一系列随机数,随机数出现的机率是相同的,一般可以使用列表进行测试。
既然是算法,就不得不提随机数的一些简单算法:
1.二分法
2.不平均法
3.不平均平均法
先来检测一下random是否是平均的

let list = []
function x(){
	return Math.floor(Math.random()*10)+1
}
for(let i = 0;i<2000;i++){
	let k = x()
	list[k]=list[k]??0
	list[k]++
}
console.log(list)
//[空, 207, 228, 205, 196, 186, 211, 182, 186, 183, 216]

可以看出大概都在200左右,相对平均,那如何用这个能输出1-10的随机函数来输出1-8呢?
最简单的办法是这样

function x(){
	return Math.floor(Math.random()*5)+1
}

当然 算法就是有边界条件,比如上图是一个用了很久的算法,我们要在这个算法的基础上封装一个新的算法,如何解决?

let list = []
function x(){
	return Math.floor(Math.random()*10)+1;
}
function x_02(){
	let num = x()
	
	return num>5?1:0
}
function js(){
	let num01=x_02()
	let num02=x_02()<<1
	let num03=x_02()<<2
	return num01+num02+num03+1
}
for(let i = 0;i<10000;i++){
	let m = js()
	list[m]=list[m]??0
	list[m]++
}
console.log(list)
//[空, 1174, 1282, 1220, 1247, 1260, 1247, 1272, 1298]

那如果不是平均分配呢?

function x(){
	return Math.floor(Math.random()*10)+1;
}
function x_02(){
	let num = x()
	
	return num>7?1:0
}

虽然他本来是1-10 但是经过x_02 出现0和1的概率已经不是平均出现了,这时候我们该如何改变?
虽然知道0和1不是均率出现,但是我们能看到,它必然只会出现0和1,那从这方面着手,判断0和1的出现模式即可

function x_03(){
	let num1 = x_02()
	let num2 = x_02()
	while(num1==num2){
		num1 = x_02()
		num2 = x_02()
	}
	return num1==1?0:1
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自信小老头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值