[出题]求56以内和为60的5个随机数

24game
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

Re: 一、 Re: [出题]求56以内和为60的5个随机数

帖子 24game »

523066680 写了:我先抛个砖头,随机取n次,逐次缩减范围。
缺点:由于范围逐次递减,会呈现越往后数值越小的趋势。
our $R = 56; our $n = 5; # the number you need our $m = 60; grep { test() } (1 .. 10); sub test { my $get; my $left = $m; my @poss; for ( my $t = $n; $t > 1; $t-- ) { $get = int(rand($left-$t))+1; push @poss, $get; $left -= $get; } push @poss, $left; printf "%s\n", join(",", @poss); }
输出示例:
29,9,15,1,6
32,16,3,4,5
51,2,2,3,2
29,6,13,8,4
38,17,2,1,2
23,13,18,3,3
35,6,1,12,6
45,9,3,1,2
54,1,2,1,2
40,16,1,1,2
可以看到每一个都有明显特征
显然, 解组合中数值的分布频率肯定不是每个数都一样的, 比如 56, 只在一个解组合 {56,1,1,1,1} 里出现, 而 55 只在 {55,2,1,1,1} 中出现, 粗略地, 偏离频率分布最高的数值越大的数出现的可能性越低, 频率分布的高峰猜测为12

如何判断一个算法是否足够随机, 最自然的方式显然是所有解组合都有一样的概率出现, 而不是每种数值都是均等概率出现.

此算法输出示例中, 每轮第1次生成的随机数最小都是 23, 不知更大的样本中, 是否小数也一样均等的在第1次出现(第1次生成的随机数不同于后面生成的随机数被前面出现的随机数进一步减小数值可能性范围)
zzz19760225
一代宗师
一代宗师
帖子: 930
注册时间: 2017年12月25日 11:12
联系:

Re: [出题]求56以内和为60的5个随机数

帖子 zzz19760225 »

绝对随机

相对随机
极限边缘的随机程度
平常需求使用量大的随机范围
个别特殊的随机

随机是否有规律和规则?(性格即命运,命运是偶然还是必然。马列的历史必然趋势,和时代需求内的小偶然)
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

Re: [出题]求56以内和为60的5个随机数

帖子 523066680 »

24game 写了:一个环周长为60, 其上分布60个位置, 且为位置分布定义一个正方向, 在正方向上位置标号依次为0到59, 两个位置间的距离以标号按负方向来计算, 位置A到位置B的距离以位置B的标号减去位置A的标号来计算, 结果必须为非负数, 如果计算结果为负数, 就加上一个周长成为正数.
感谢分享,大概明白了,有点像切蛋糕,随机从中点往不同方向切向外缘。切割五次,得到五块随机的蛋糕。
切割法.png
(27.07 KiB) 已下载 476 次
这种切割法和之前“逐次缩减范围取随机数”的方法最大的不同,就是没有定向,每一步都面向整个蛋糕的范围(只要边界不重合),曾经划分出来的蛋糕,可能再次被划分。
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

Re: [出题]求56以内和为60的5个随机数

帖子 523066680 »

基于切蛋糕的方案,我想,也许不需要首尾相连。

假设有60个方块组成一排,我们随机划分(切割),第一个方块左边为0,右边为1,最后一个方块右边为60。
切割规则是,切割线不能在0和60的位置,只能在1到59的位置,每一次切割都面向1-59的范围,割线不能重复。
Split_MultiBlock.png
(7 KiB) 已下载 468 次
如果要获取5个结果,切割4次。
24game
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

Re: [出题]求56以内和为60的5个随机数

帖子 24game »

523066680 写了:
24game 写了:一个环周长为60, 其上分布60个位置, 且为位置分布定义一个正方向, 在正方向上位置标号依次为0到59, 两个位置间的距离以标号按负方向来计算, 位置A到位置B的距离以位置B的标号减去位置A的标号来计算, 结果必须为非负数, 如果计算结果为负数, 就加上一个周长成为正数.
感谢分享,大概明白了,有点像切蛋糕,随机从中点往不同方向切向外缘。切割五次,得到五块随机的蛋糕。

切割法.png
这种切割法和之前“逐次缩减范围取随机数”的方法最大的不同,就是没有定向,每一步都面向整个蛋糕的范围(只要边界不重合),曾经划分出来的蛋糕,可能再次被划分。
假设生成随机数的基本函数在数值范围(a..b 共 b-a+1 个整数)内每一个整数生成的概率都是 1/(b-a+1), 我认为 “逐次缩减范围取随机数” 和我提出的分割法 没有本质不同, 在任意一个 5元组 的解出现的概率上会是一样的, 我不能深入解析说明我的观点, 可以用统计方式来做一些验证: 在数倍于 所有 5元组解 总数的运行次数的结果上对每一个 5元组 出现的频率做统计, 比较频率分布究竟如何.

“逐次缩减范围取随机数” 是边分割边取出 5元组 中的一元, 我提出的分割法 是全部5个分割点随机选定后, 5元组的全部5元才最终确定, 在分割点完全确定之前, 临时的结果只是有可能成为 5元组中 的一元, 也可能会被下一次分割切分
24game
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

Re: [出题]求56以内和为60的5个随机数

帖子 24game »

523066680 写了:基于切蛋糕的方案,我想,也许不需要首尾相连。

假设有60个方块组成一排,我们随机划分(切割),第一个方块左边为0,右边为1,最后一个方块右边为60。
切割规则是,切割线不能在0和60的位置,只能在1到59的位置,每一次切割都面向1-59的范围,割线不能重复。

Split_MultiBlock.png

如果要获取5个结果,切割4次。
最左(等同最右)的边界线 相当于 "环" 理解方式中第1个分割点, 1个分割点不能把环分成两部分, 只能切断环, 那么第1个分割点取一个固定位置就并不影响分割的随机性, 这第1个分割点可以固定在 0(等同于60) 的位置, 也可以固定在[1..59] 范围内任意的位置, 后4个分割点的随机性决定分割的随机性

"环" 的理解方式让所有分割点 在思维直觉上 都显得 没有 特殊性, 有首尾的线 造成了 思维上 首与尾 较于中间部分特殊, 只要算法保证在 "首尾" 无特殊性, 是否看成 "环" 都不重要.
zzz19760225
一代宗师
一代宗师
帖子: 930
注册时间: 2017年12月25日 11:12
联系:

Re: [出题]求56以内和为60的5个随机数

帖子 zzz19760225 »

随机脱离已有规则去随意理解
有没有重复的可能,如彩票两期都是一个号?
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

Re: [出题]求56以内和为60的5个随机数

帖子 523066680 »

zzz19760225 写了:随机脱离已有规则去随意理解
有没有重复的可能,如彩票两期都是一个号?
次数多了就有的哦。
头像
rubyish
渐入佳境
渐入佳境
帖子: 52
注册时间: 2018年04月23日 09:58
联系:

Re: [出题]求56以内和为60的5个随机数

帖子 rubyish »

我很好奇。你學習的是那個版本的perl? our 顯然是非常古老年代的用法。 :grimace :grimace :grimace
$_
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

Re: [出题]求56以内和为60的5个随机数

帖子 523066680 »

rubyish 写了:我很好奇。你學習的是那個版本的perl? our 顯然是非常古老年代的用法。 :grimace :grimace :grimace
只是提醒自己这个是全局啦。
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 2 访客