V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  sillydaddy  ›  全部回复第 69 页 / 共 83 页
回复总数  1646
1 ... 65  66  67  68  69  70  71  72  73  74 ... 83  
2021-01-19 15:05:17 +08:00
回复了 kaiki 创建的主题 问与答 如何把一个数字 x 随机分成 y 个数字,这些数字≥a 且≤b
@kaiki
@chengfeng1992
@XiaoxiaoPu
@JeffGe
@fbxshit

想了一下,找到了一个我认为正确的方法。
但基本原理很简单,就是类似前面提到的,在多边形内随机采样取点。

先看一下为什么发红包跟多边形取点会关联起来,举例来说,发红包的条件可以表示为:
x+y+z=11,(给 3 个人发 11 元红包)
x>=2, x<=8, y>=2, y<=8, z>=2, z<=8,
(给每个人发的红包在 2 和 8 之间)

用几何的观点来看,这几个条件表示的是,使用一个立方体(x,y, z 的范围都在 2 ~ 8 之间),去截取一个平面,平面的方程为 x+y+z=11 。平面被立方体截取的部分(在立方体内的),就是满足题目要求的解。然后求一个随机解就变成了在被截取的平面上随机采样采点。

如果把这个图形画出来,会发现平面被立方体所截得的图形是一个等边三角形。三个顶点分别是(2,2,7),(2,7,2),(7,2,2)

所以,现在的问题变成了:已知一个三角形(凸多边形),怎么才能做到均匀采样其内部的点?
这个就要感谢凸集的美好性质了:凸集内部的任何一点都可以唯一表示成凸集顶点的线性组合。
假设三角形的三个顶点分别是 P0, P1, P2,那么三角形内部的任一点,可以唯一表示为 a*P0+b*P1+c*P2,其中 a+b+c=1 。
所以要想随机采样三角形内部的点,只要随机取 a,b,c 这三个数,保证和为 1 即可。

上面是 3 维的简单情形,如果发红包给更多的人,就变成了更高维的,但原理是一样的。原来的平面变成了高维平面,原来的立方体变成了高维立方体。关键是求出立方体在平面上截得的顶点。找到所有的顶点后,对这些顶点线性组合就 ok 了。
2021-01-19 14:09:32 +08:00
回复了 kaiki 创建的主题 问与答 如何把一个数字 x 随机分成 y 个数字,这些数字≥a 且≤b
@chengfeng1992,#28,采样不均匀的话,把结果重排还是不均匀吧。


@cassyfar,#37,最小值最大值只是一个约束吧,并不一定要求一定要取到最小或最大值。
2021-01-18 17:57:45 +08:00
回复了 kaiki 创建的主题 问与答 如何把一个数字 x 随机分成 y 个数字,这些数字≥a 且≤b
@chengfeng1992
我前面说的主要不是最后一个值越界的问题,而是结果不随机的问题。
你可以运行一下自己的程序,多次运行以后,计算出各个人得到的红包平均数,看是不是相等的。如果不相等说明红包算法随机性有问题。

我可以举个肉眼可见的例子,
x=11,y=3,a=1,b=5,意思就是 11 元红包分给 3 个人,最小 1 元,最大 5 元。
简单看一下 3 个人分得的红包分布
1,5,5
2,4.5,4.5
3,4,4
4,3.5,3.5
5,3,3
可以看出来,后面抽红包的两个人,他们的平均期望值是 4,而第一个人的期望只有 3 。
这说明这种算法不是均匀随机的。
2021-01-18 15:32:03 +08:00
回复了 kaiki 创建的主题 问与答 如何把一个数字 x 随机分成 y 个数字,这些数字≥a 且≤b
@sillydaddy
@XiaoxiaoPu
好吧,那篇文章我也看不懂!!
但楼上的方法都是错的,这点我可以坚持。
2021-01-18 15:15:14 +08:00
回复了 kaiki 创建的主题 问与答 如何把一个数字 x 随机分成 y 个数字,这些数字≥a 且≤b
贴个现成的答案吧。楼上的方法都不对。

“生成满足约束的随机数的方法”
https://blog.csdn.net/maintony/article/details/88540320
2021-01-18 14:59:36 +08:00
回复了 kaiki 创建的主题 问与答 如何把一个数字 x 随机分成 y 个数字,这些数字≥a 且≤b
@chengfeng1992 取 max 的过程有点问题吧,感觉这样的话算法不是随机的了。类比我上面举的例子,给定一个 2d 上的多边形,要求在内部随机取点。这时如果先随机取 x,再根据 x 的值,在 x 对应的 y 范围内随机取 y,会导致结果不随机。
2021-01-18 14:55:28 +08:00
回复了 kaiki 创建的主题 问与答 如何把一个数字 x 随机分成 y 个数字,这些数字≥a 且≤b
想了下,感觉这道题目应该叫,"约束空间范围的随机采样",就类似于要求在一个多边形内部,随机取一个点。

坐等高手。
2021-01-18 14:43:10 +08:00
回复了 kaiki 创建的主题 问与答 如何把一个数字 x 随机分成 y 个数字,这些数字≥a 且≤b
@sillydaddy 我说的好像有问题。。不能保证所有段的和等于总和
2021-01-18 14:39:52 +08:00
回复了 kaiki 创建的主题 问与答 如何把一个数字 x 随机分成 y 个数字,这些数字≥a 且≤b
在 0 ~ x 范围内,取 y-1 个随机数,将 x 划分成 y 段,从中取出一段,该段长度符合大于等于 0 小于等于 d ;
从 x 中减去已经取的段,迭代上面的过程,每次迭代时分段数目要减 1 。

把 a ~ b 的范围,转换成上面算法要求的 0 ~ d 即可。
2021-01-15 17:06:17 +08:00
回复了 YadongZhang 创建的主题 职场话题 955 也没法 WLB
说缩写有理的,拜托去 Google 上面,以关键词 “how to make a WLB” “how to maitain WLB” 搜索一下,看看结果里面哪怕有**一个**只写缩写的吗?都是写的 work-life balance 。

国外的网站尚且如此,中文里面有什么理由装外宾(ZWB)呢?
2021-01-14 12:57:23 +08:00
回复了 john990 创建的主题 设计 求设计大佬帮我重新设计个 App
友情提醒一下:AppStore 里面( https://apps.apple.com/cn/app/mockup-app-screenshot-design/id1541634188 ) 效果图内的英文拼写还有问题。而 GooglePlay 里面的没问题。
2021-01-14 12:38:06 +08:00
回复了 sillydaddy 创建的主题 React react 怎样处理父元素的 blur 事件啊??
@hjylxmhzq
@baxtergu
谢谢。感觉 relatedTarget 这个更好用。
2021-01-14 10:55:33 +08:00
回复了 odi 创建的主题 问与答 来点"正"能量,求写一两句祝福公司的话...
“千秋万载,一统江湖。 ... 但愿千秋万载,永如今——”
2021-01-13 19:13:57 +08:00
回复了 gushu 创建的主题 问与答 有什么行为能让自己快速感觉到生活的气息感
. 偶尔起的很早,外面的天刚蒙蒙亮。
. 行走在夏日的黄昏,夕阳将隐落。
. 回老家。
. 偶尔做饭,看着手里拿着的菜,有种(类似祈祷时)感恩的感觉。但最近一直做饭,反而没这种感觉了。:(
. 。。
2021-01-13 18:19:40 +08:00
回复了 retaci2292 创建的主题 奇思妙想 想做一个可以直观展示应聘者作品经历的招聘系统
有点像 Jupyter Notebook,不知道你了解过没有? 可以参考一下啊。我感觉理念挺相近的。
1 ... 65  66  67  68  69  70  71  72  73  74 ... 83  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2347 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 02:39 · PVG 10:39 · LAX 19:39 · JFK 22:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.