java 板


LINE

各位前辈你们好 是这样子的 目前我要去制作10%~90%的机率出来 原本的方式是这样 假设是要制作10%的机率 那就是准备一个阵列 阵列里面装有1个1、9个0 执行的时候 每次使用Math.random()的方式从阵列内取值 每次都会记录取几次才成功 然後只要一成功 就开始执行下一次 总共执行100次 但被老师打枪说这样的机率根本不是10% 就好比 硬币有50%的机率都是正面跟反面 我们要求产生50%的正面 那执行10次能保证说 正反面出现的次数一样吗? 可能刚好10次都是反面 所以要一直掷骰子 掷到正反面出现的次数一样才行 最後我们老师提出两种方式 1.增加执行次数 让他趋近於10% 也就是原本的方法 不要只执行100次 要执行到1万 10万 甚至是100万次 这个样本数才够足以证明10% 2. 增加random范围 假设java的random范围是-9999999~9999999 切个10个区域 若random出来的结果刚好就落在指定的区域 那就是算成功的10% 成功後就继续执行下一笔 然後执行100次 第一个要做比较容易 但第二个我就有问题了 我找到的资料是 Math.random()好像是0~0.9999999(无穷小数) 而Random rnd = new Random()这个方法 一般是直接喂seed 告诉random中从seed随机取一个值 但是 我找不到说 在没有喂seed情况下 Random的范围是多大 请问 有人知道怎麽算说 Random的范围是多大? 还是说Random跟Math.random()一样 范围都是无穷大? -- 作者 MicroGG (La new总冠军) 看板 Japan_Travel 标题 [问题] 温泉旅馆的儿童人头算法?
1F:→ robler:问问题然後自称拎背这样好吗 有点礼貌ok?04/11 16:32
2F:→ penan:骨科大 XD04/11 16:34
3F:→ MicroGG:你不懂,我有苦衷,我不说拎杯会被乡民骂..04/11 16:36
--



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.138.150.27
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1441783643.A.BD2.html
4F:→ cowbaying: 0.0~1.0 09/09 15:56
5F:→ ssccg: 每次都刚好一样,就不叫随机了,先确定你的需求... 09/09 16:09
听不太懂你的意思 请容许我跳针一下 目前就是client会固定一个时间(例如每5s或30s...等等)去向server做查询的动作 但是client不一定每次都会上线 所以要做一个假设说 假设10%的机率client会上线做查询 那麽须要花多久时间? 现在就是卡在说 要怎样做出那个10%的机率 才是真正符合那所谓"10%"机率的上线可能 ※ 编辑: aiweisen (140.138.150.27), 09/09/2015 16:28:13
6F:→ ssccg: 至於random的范围 09/09 16:19
7F:→ ssccg: docs.oracle.com/javase/8/docs/api/java/util/Random.html 09/09 16:20
8F:→ ssccg: Math.random就是Random.nextDouble,其他的上面都有写 09/09 16:20
9F:→ ssccg: new Random一般是"不"喂seed,上面也有写会用一个重复机率 09/09 16:22
10F:→ ssccg: 很低的seed,自己设seed是要产生重复结果时才会用 09/09 16:23
11F:→ ssccg: 范围跟seed没关系也不是无穷,数位资料值域都是有限的 09/09 16:25
一般Random好像都是搭配nextInt()来使用 那麽范围就是依照nextInt()的 2^32 是麻? ※ 编辑: aiweisen (140.138.150.27), 09/09/2015 16:34:27
12F:→ ssccg: 如果你相信java的实作,那nextInt(10)结果就是0~9机率各10% 09/09 16:43
这我就不懂了 那跟我直接在阵列里面放10个值 然後用Random去跑 去抓里面其中的特定的值 跟直接nextInt(10)会一样嘛?
13F:→ ssccg: 如果你说的是 array[new Random().nextInt(10)] 那一样 09/09 17:04
抱歉 刚打到一半同学被拖走 虽然说nextInt(10)每个出现的机率都是10% 但是这个问题後面就会跟硬币一样 硬币出现正反两面的机率是50% 但是要掷出多少次的硬币 使出现"正面" 的机率是50%? 我是要制作後面的50% 话说回到new Random() 请问他的范围是0~2^32-1吗? ※ 编辑: aiweisen (140.138.238.19), 09/09/2015 18:20:57
14F:推 LPH66: 你去把你刚才提的投硬币这个例子丢回去给你们老师 09/09 19:41
15F:→ LPH66: 说起来, 谁规定 10% 一定是每十次要有一次? 09/09 19:42
恩 所以才会说10%的机率下可能会24次才会中一次 5次才会中一次 也有可能一次就中 这些24次 5次 都是有包含前面23次的失败跟4次的失败 才会提到说 执行这10%的机率要作很多组 假设做1万组 总共花了86953次 其中一万次是成功 其他失败是76953次 那是不是就可以说成功的机率大概是 10000(成功次数)/85953(总次数)=11.5%
16F:→ LPH66: 回到你的 Random() 问题, 你把随机数引擎跟取值混在一起了 09/09 19:44
17F:→ LPH66: new Random() 是做出一个随机数引擎 09/09 19:44
18F:→ LPH66: 你要怎麽取乱数是 nextXxx() 在取的 09/09 19:44
19F:→ LPH66: 你可以 new 一个 Random 物件然後从中取整数/取浮点数/etc. 09/09 19:45
20F:→ LPH66: 所以「Random() 的范围」这问题根本问错方向了 09/09 19:46
21F:→ LPH66: 最後我觉得你找个时间跟你们老师好好谈谈他到底在讲什麽 09/09 19:50
22F:→ LPH66: 不然我们这边给了一堆建议如果又被你们老师打枪不就囧了 09/09 19:50
23F:→ LPH66: 对他提的方法有问题就去问他, 我们不可能懂他在想什麽 09/09 19:51
24F:→ lucky1lk: Random的范围多大 跟你问的问题根本不相关... 09/09 19:52
25F:→ LPH66: 多嘴一句, 你可以查查「先验机率」跟「後验机率」这两个词 09/09 19:53
好 明白了
26F:→ lucky1lk: Random的范围多大 看你的型别 09/09 19:55
所以就是看对象是 int long double 这些的范围是吗?
27F:→ ssccg: 出现正面的机率50%的情况下,出现正面的"次数"是50%的机率 09/09 20:02
28F:→ ssccg: 是C(n,n/2)0.5^n,这值不会是100% 09/09 20:06
29F:→ ssccg: 你要"次数"是50%,那根本就不需要随机,准备好结果就好啊 09/09 20:08
我不晓得有没有误会你的意思 以这个为例 你的意思是说 我就一直给他跑数据 跑到刚好出现正面的次数刚好是占所有次数的一半就可以停止了 是吗? 例如 1024(出现正面的次数)/2048(所有正反面的次数) ※ 编辑: aiweisen (140.138.238.19), 09/09/2015 21:00:57
30F:推 ooooooo: 看不懂你所谓的"成功"是什麽 不过我猜你要的是shuffle 09/09 21:35
我所谓的成功就好比是指 一直掷硬币 总共掷了几次硬币 才会出现一个正面 然後纪录次数 再做下一轮 话说 什麽是shuffle? ※ 编辑: aiweisen (140.138.238.19), 09/09/2015 22:54:17
31F:→ ooooooo: 以10%机率来说,我感觉你要的是 10次必定要出现1次 09/10 00:20
32F:→ ooooooo: 那就可以想成拿10张扑克牌洗牌 每次抽奖就是取走一张牌 09/10 00:21
33F:→ ooooooo: 这样就可以保证 10次中必定中1次 09/10 00:22
所以我不确定我原本的想法是不是正确的 拿原本的例子套用在你这 也就是说 扑克牌有A、2、3...10共10张 每张牌取的机率都一样 请问要取几次牌才会使A刚好是占全部次数的10%?
34F:推 k47100014: 假设你client有1000个,你随机挑100个不就是10%了吗 09/10 02:12
35F:推 k47100014: 不是每个client都用10%机率下去抽而是用总数的10%下去 09/10 02:15
36F:→ k47100014: 挑client,不知道这样有没有符合你的条件 09/10 02:15
应该说没以要先扩大 就一个server跟一个client 但这边也是我问题的其中之一 更原始的要求的是 「client 会固定一个时间向server查询资料,但是server有10%的机率会上线.如果查询 的时候server没上线,这个时候client就会再等待下一个固定时间,再去向servert查询, 一直重复到server开启,最後统计总共花多少时间」 所以我的演算法大致上如下 计数=0 10%阵列={1,0,0,0,0,0,0,0,0,0} for(执行100次){ 继续=true while(继续){ 乱数值=产生乱数0~9 计数加1 if(10%阵列[乱数值] is 1){ 继续=false } else{ skip }//if else end }//while end }//for end 但是最後就老师被打枪 然後举前面掷硬币的例子给我听 所以就会觉得奇怪的是 以上面的「更原始的要求」那边来看 我不知道是不是看的角度不同 那个10%的机率是指 1.假定好server上线的机率为10%,由这个机率去跑数据 (这是我最原始的作法) 2.server只有上线或不上线两种可能,client要查询多少次才发现server上线的机率为10% 但现在老师提供的第一种方式 好像是有点混合我1、2这两个角度 也就变成 假定好server上线的机率为10%,然後client要查询多少次才发现server上线的机率为10% 老师讲到这 就又开始举掷骰子的例子了== 但这样会符合上面的「更原始的要求」的题目吗? ※ 编辑: aiweisen (140.138.238.19), 09/10/2015 09:58:34
37F:推 cyclone350: 所以你做了一百次的结果是几%? 09/10 10:00
38F:推 ctrlbreak: 不讨论题目, Java的乱数是平均的乱数, random1~10 出现 09/11 18:00
39F:→ ctrlbreak: 1的机率就是10%了.. 09/11 18:01
40F:推 k47100014: 原来是server的上线机率阿...但要怎麽去定义Server机率 09/11 22:48
41F:→ k47100014: ?一天24HR,Server上线2.4小时?因为如果Server没开,所 09/11 22:49
42F:→ k47100014: 有的Client都无法查询到资料,还是你要以五分钟作时间 09/11 22:50
43F:→ k47100014: 区隔,一天就有288次测试,10%的话就是28.8次上线区段 09/11 22:50
44F:→ k47100014: 你上面那段程式码 是以程式内建的乱数去跑上线机率 09/11 22:52
45F:→ k47100014: 如果A Client在十二点的时候开始测试,他每五分钟Test 09/11 22:53
46F:→ k47100014: 一次,B Client在十二点半的时候开始测试,一样五分钟 09/11 22:53
47F:→ k47100014: Test一次,而Server在十三点整开启,所以A会测试12次 09/11 22:54
48F:→ k47100014: B会测试六次。机率之所以是机率就是因为我们不知道接下 09/11 22:55
49F:→ k47100014: 来会发生甚麽事情,没办法真的去定义玩美的10% 09/11 22:55
50F:→ realmeat: 你可以用 rand%10 .... 09/16 13:51
51F:→ realmeat: 不过你的题目我看不懂 09/16 13:53







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP