免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
51 [报告]
发表于 2010-07-10 14:26 |只看该作者
re 楼上: 你混淆了现实中的“小概率”概念,和计算机中的“算法”概念

无论你说的概率有多小,都是一个非0的概念,那么它就违背了计算机算法的定义。

“计算机中硬盘挂掉,……” ------ 在计算机算法中对计算机的定义是运行无误的,但有时间和能量供应的限制。你不能要求一个算法可能会运行操过可接受的时间(比如到宇宙灭亡),也能要求一个算法可能会用掉可接受的能量(比如整个太阳系的能量)。
假如你还不理解,那么我给你一个 int main() {return 0; } 你认为这么代码正确吗?按照你的逻辑,那就是这么代码不能100%正确,因为运行期间可能停电,计算机中硬盘挂掉,cpu计算出现错误都有一个概率,……
而我认为的,“计算机中硬盘挂掉,……”和这段代码是否正确无关。我说的是代码正确性,不是某次程序是否能执行成功。即使某次因为硬盘挂掉而运行失败,这段代码依然是100%正确的。

“比如密钥是128位,那我随便猜一个也有1/(2^12的概率命中” ------ 你说得很正确,但我所知的所有加密算法定义都不是要求0%命中,而是要求低于某个实际的安全值。当然,如果你一定要篡改某加密算法的定义为0%命中,那么次密码算法自然是错误的。

论坛徽章:
0
52 [报告]
发表于 2010-07-10 16:30 |只看该作者
对死抠定义的表示无语。那么修改一下好了,运行10000次还没有产生要求的随机数,那么随便挑个在(1-7)之间的数。从计算机的角度来看,这会已经看不出来有什么概率上的差别了~其实随机算法之所以随机,就是因为它关注的不是最差的情况下是怎么样的,而是关心的期望的效率是怎么样的。当然如果你可以证明如果使用伪随机的一个序列可以导致这个算法无解,那么另当别论。

论坛徽章:
0
53 [报告]
发表于 2010-07-10 16:38 |只看该作者
回复 51# churchmice
我的方法只是一种思路,提出时我就指出了:可能不是真正随机的。没有时间细想了。
只是想讨论一种真正严格的算法。
或许这个题目是无解的!

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
54 [报告]
发表于 2010-07-10 17:41 |只看该作者
对死抠定义的表示无语。那么修改一下好了,运行10000次还没有产生要求的随机数,那么随便挑个在(1-7)之间的 ...
jerryz920 发表于 2010-07-10 16:30


“那么随便挑个在(1-7)之间的数” ------ 随机 和 均值 的概念不同
随机:当你抛硬币,连续10000000000000000次都是正面朝上,第10000000000000001次反面朝上的概率还是只有1/2
均值:当你第一次取得A,则第二次取得B的几率比取得A的几率高;如果第二次还是取得A,则第三次取得B的几率会更高……

“对死抠定义的表示无语” ----- 什么叫“死抠定义”?如果你连“计算机算法”这个定义都可以抛弃的话,那你不如直接将题目中“随机”的概念改为“伪随机”,这样问题变得更简单,直接用C库中的rand()函数来实现。

A: 已知一个人被雷电劈中的几率是a,一个人中六合彩的概率是b,请问即中六合彩又遭雷劈的概率是不是a*b?
B: 不是a*b,是0,因为两者概率都极低,相乘后更低,所以是0而不是a*b。
A: 我问的是数学上的几率概念
B: 对死抠定义的你表示无语:(
A: ……-_-!!……

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
55 [报告]
发表于 2010-07-10 17:46 |只看该作者
回复  churchmice
我的方法只是一种思路,提出时我就指出了:可能不是真正随机的。没有时间细想了。
只是 ...
guoruimin 发表于 2010-07-10 16:38


你的思路确实是无解的,因为每个数的出现几率的最小粒度是1/5^n,在整数范围内无解

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
56 [报告]
发表于 2010-07-10 18:04 |只看该作者
是不是一个严格的计算机算法 和 能不能在实际生活中使用 是两个不同点。
很多严格的计算机算法并不能在实际生活中使用,实际生活中使用的好多不是严格的计算机算法,比如GUID生产算法。

不能因为windows有bug,就认为windows不可以使用;不能因为windows被使用着,就认为windows无bug。两个完全不同的概念,不要混为一谈

两个概念都有其适用范围,我也可以列举一个相冲突的例子:
hash表的统计学效率比平衡二叉树高,但在要求实时的算法片段中(“实时”的概念不是要求响应速度快)从来不用hash表,因为hash表可能在某次操作时花费超额的时间。

论坛徽章:
0
57 [报告]
发表于 2010-07-10 19:56 |只看该作者
本帖最后由 gcd0318 于 2010-07-10 20:01 编辑

纯数学意义上,只要1+7*(f-1)/5就可以了,但是在计算机上实现的话,要考虑小数精度,味道就变了,这才是有必要讨论的余地所在
不知道ls的大部分人为什么把话题扯到那么远

论坛徽章:
0
58 [报告]
发表于 2010-07-10 20:11 |只看该作者
应该可以用二元一次方程解决吧,而且多解!

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
59 [报告]
发表于 2010-07-10 20:25 |只看该作者
纯数学意义上,只要1+7*(f-1)/5就可以了
不知道ls的大部分人为什么把话题扯到那么远
------ 因为他们看到的题目是“1-5间的随机数”,而你看到的是“1.0-5.0间的随机数”,讨论的题目不一样呀:)

论坛徽章:
12
CU大牛徽章
日期:2013-09-18 15:20:4815-16赛季CBA联赛之同曦
日期:2016-02-01 20:28:25IT运维版块每日发帖之星
日期:2015-11-10 06:20:00操作系统版块每日发帖之星
日期:2015-10-28 06:20:002015亚冠之塔什干棉农
日期:2015-06-04 11:41:56丑牛
日期:2014-05-10 16:11:33技术图书徽章
日期:2013-09-23 13:25:58CU大牛徽章
日期:2013-09-18 15:21:17CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:20:58数据库技术版块每日发帖之星
日期:2016-02-08 06:20:00
60 [报告]
发表于 2010-07-11 13:52 |只看该作者
连续7次调用,把所有返回值相加后模7?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP