免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: glq2000
打印 上一主题 下一主题

[算法] 已知一个函数f可以得到1-5间的随机数,问怎么得到1-7的随机数 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2010-07-06 19:10 |显示全部楼层
回复 6# glq2000


仔细看,人家是除以5

论坛徽章:
0
2 [报告]
发表于 2010-07-06 19:22 |显示全部楼层
回复 9# iamxmz

嗯,的确那样产生是有问题的,我想想

论坛徽章:
0
3 [报告]
发表于 2010-07-06 19:45 |显示全部楼层
本帖最后由 churchmice 于 2010-07-06 19:47 编辑

from
http://www.mitbbs.com/article_t/Quant/31188147.html

基本方法就是产生一串序列
1,4,5,3,2,4
然后前后两两划分为一组,比如(1,4),(5,3),因为总共有5X5 =25种等概率的可能,不能被7整除,可以拿掉4种,这样剩下21种,编号为#1,#2,...#21
如果出现#1,#2,#3则输出1,....如果出现#19,#20,#21则输出7,如果出现了被拿掉的那4种情况则忽略之

论坛徽章:
0
4 [报告]
发表于 2010-07-08 10:20 |显示全部楼层
回复 18# glq2000


    http://www.google.com/search?hl= ... mp;oq=&gs_rfai=

第一个就是

论坛徽章:
0
5 [报告]
发表于 2010-07-08 10:24 |显示全部楼层
http://fayaa.com/tiku/view/164/
这里还提供了其他一些方法

论坛徽章:
0
6 [报告]
发表于 2010-07-08 14:54 |显示全部楼层
回复 35# benjiam


     问题反过来很简单,1-7的等概率产生1-5的等概率,直接f()-2就可了,如果结果小于等于零则舍弃。这样产生1-5的概率每个都是1/7,加起来总共是5/7,那剩下的2/7哪去了?当然是当结果小于等于零的时候给被丢弃掉了,但是产生的1-5还是等概率的。  如果这一点理解了,那原题也不难理解,通过组合产生了25种等概率的事件,随便舍去4种,剩下的21种时间不仍然是等概率的么?每3个事件均对应产生同样的数字,所以产生的数字最后也是等概率的,为3/25,当然有4/25的概率被舍弃,需要重新生成一次

论坛徽章:
0
7 [报告]
发表于 2010-07-09 19:11 |显示全部楼层
回复 45# goubao198562

当然可以

论坛徽章:
0
8 [报告]
发表于 2010-07-10 09:30 |显示全部楼层
回复 48# klyh305

是的,只要是7的倍数个就可以了,所以要舍弃掉一些值

但是从效率方面来考虑的话还是舍弃尽可能少的值

论坛徽章:
0
9 [报告]
发表于 2010-07-10 10:40 |显示全部楼层
本帖最后由 churchmice 于 2010-07-10 10:45 编辑

回复 50# guoruimin

侬说的对,凡事讲概率,那你可以计算一下,由于是25种情况种舍弃了4种,所以舍弃的概率是4/25

那么我连续舍弃100次的概率是多少? (4/25)^100
连续舍弃1000次呢?这概率是多么的小啊, 舍弃这么多次对于现代的计算机来说只是瞬间的事情,所以不存在性能的问题
如果恰如你所说,这个算法不幸的连续舍弃了n次,导致需要运行个1万年才能出结果,你可以去算算这个时候的n值是多大,对应的概率是多小?
这世界上没有100%会发生的事情,计算机中硬盘挂掉,cpu计算出现错误都有一个概率,就连寄存器(硬件)也会有一个meantime to work,也就是能够正常工作的概率。

照你这么说密码学都不用搞了,比如密钥是128位,那我随便猜一个也有1/(2^12的概率命中
但实际中的情况时,如果一个事件发生的概率很小(究竟多小算小要根据实际应用场景确定),我们就认为它不会发生,就可以放心的去用


反观你这个算法
有 1 - 5 之间的随机数 n1, n2, ... n7
则有 1 - 35 之间的随机数 m = n1 + n2 + ... + n7
则有 1 - 7 之间的随机数 k = m % 7 + 1


要证明k是等概率的有两种情况:
1. m是等概率分布在1-35之间,这个是不可能的
   因为根本没有任何可能使得m=1
2.m在1-35之间的分布不是等概率的,但是经过m%7 + 1的操作后成为了等概率,那可以算一下
   k=1要求: m=0,7,14,21,18,35
   m=0 的概率为0
   m=35的概率为 (1/5)^7
   其余几种我没算过,但是你要这玩意加起来等于1/7,我认为很悬
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP