一道面试题

skillart 2019-05-28 01:46:24
吃鸡游戏,给定一个圆心坐标和半径,写一个函数返回园内一个随机点,且均匀分布。
...全文
215 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
茂大叔 2019-06-07
  • 打赏
  • 举报
回复
均匀分布就不是随机的,随机是没有规律的,而均匀分布要求已产生的样本要影响未产生的样本…也就是说连开十六把豹子,第十七把开豹子的几率不变,这是随机的,而均匀分布则是需要第十七把开豹子的几率极低,因为已经开了十六把了,不均匀!
ooolinux 2019-06-03
  • 打赏
  • 举报
回复
引用 22 楼 早打大打打核战争 的回复:
只要能理解就可以~~~
也是
  • 打赏
  • 举报
回复
只要能理解就可以~~~
ooolinux 2019-05-31
  • 打赏
  • 举报
回复
他那个系数开方修正以后,同样宽度外圆环上的点比内圆环上的点多,把圆环的宽度取极限压扁成圆周,外圆周比内圆周上的点多。这样理解对不对?
ooolinux 2019-05-31
  • 打赏
  • 举报
回复
引用 18 楼 早打大打打核战争 的回复:
[quote=引用 17 楼 ooolinux 的回复:]
[quote=引用 16 楼 早打大打打核战争 的回复:]
而他的计算方法,每一个同心圆周上点的个数都相同
===============================
他只是把每个生成的随机点都沿半径方向远离圆心一点,没考虑圆周,比较圆周上的点是你的想法


他的本质还是角度随机,长度也随机,决定了同心圆周上有相同个数的点。我的理解,未必准确。[/quote]

他那个算法中r = sqrt(k)*R,相当于把随机长度放大,趋近于圆心和远离圆心的概率不一样,所以不一样多,越外圈越多
[/quote]

好像有道理,我重新理解一下~
ooolinux 2019-05-31
  • 打赏
  • 举报
回复
引用 17 楼 ooolinux 的回复:
[quote=引用 16 楼 早打大打打核战争 的回复:]
而他的计算方法,每一个同心圆周上点的个数都相同
===============================
他只是把每个生成的随机点都沿半径方向远离圆心一点,没考虑圆周,比较圆周上的点是你的想法


他的本质还是角度随机,长度也随机,决定了同心圆周上有相同个数的点。我的理解,未必准确。[/quote]

我的理解,未必对的~
  • 打赏
  • 举报
回复
引用 17 楼 ooolinux 的回复:
[quote=引用 16 楼 早打大打打核战争 的回复:]
而他的计算方法,每一个同心圆周上点的个数都相同
===============================
他只是把每个生成的随机点都沿半径方向远离圆心一点,没考虑圆周,比较圆周上的点是你的想法


他的本质还是角度随机,长度也随机,决定了同心圆周上有相同个数的点。我的理解,未必准确。[/quote]

他那个算法中r = sqrt(k)*R,相当于把随机长度放大,趋近于圆心和远离圆心的概率不一样,所以不一样多,越外圈越多
ooolinux 2019-05-31
  • 打赏
  • 举报
回复
引用 16 楼 早打大打打核战争 的回复:
而他的计算方法,每一个同心圆周上点的个数都相同
===============================
他只是把每个生成的随机点都沿半径方向远离圆心一点,没考虑圆周,比较圆周上的点是你的想法


他的本质还是角度随机,长度也随机,决定了同心圆周上有相同个数的点。我的理解,未必准确。
  • 打赏
  • 举报
回复
而他的计算方法,每一个同心圆周上点的个数都相同
===============================
他只是把每个生成的随机点都沿半径方向远离圆心一点,没考虑圆周,比较圆周上的点是你的想法
ooolinux 2019-05-31
  • 打赏
  • 举报
回复
引用 14 楼 早打大打打核战争 的回复:
这是按你的思路画的示意图:


每个圆周上的随机点都是均匀分布的(三个圆周长之比为1:2:3),但是在整个平面上点的分布并不均匀,比如中心的3x3方格内有9个点,而扩大一圈之后,5x5的方格内只有13个点,显然这样的分布还是趋向于圆心密集的,要保证平面内的点分布均匀,外圈圆周上的点密度应该高于内圈,而不是相同。


你这个图点的个数太少,不能说明问题。
我是想证明那篇博客的第一种方法得不到完全均匀的分布,如果只是角度随机,长度也随机,那么不论半径多少,每一个同心圆周上的点的个数是相同的,k开方后,把R/4圆周变换成了R/2圆周,因为R/2圆周和R圆周上的点的个数也是相同的,密度比就为两倍,分布不均匀。假设均匀分布的点是无限密集的,圆周上都布满了点,那么圆周长度为2倍,点的个数也应该为2倍。而他的计算方法,每一个同心圆周上点的个数都相同。
  • 打赏
  • 举报
回复
这是按你的思路画的示意图:


每个圆周上的随机点都是均匀分布的(三个圆周长之比为1:2:3),但是在整个平面上点的分布并不均匀,比如中心的3x3方格内有9个点,而扩大一圈之后,5x5的方格内只有13个点,显然这样的分布还是趋向于圆心密集的,要保证平面内的点分布均匀,外圈圆周上的点密度应该高于内圈,而不是相同。
  • 打赏
  • 举报
回复
我画个图...
ooolinux 2019-05-30
  • 打赏
  • 举报
回复
引用 11 楼 早打大打打核战争 的回复:
因为修正后每个生成的随机点都沿半径方向远离圆心一点,所以需要考虑一定面积内的随机点
你的想法的问题在于,均匀分布实际是在单位面积内的均匀,不是若干同心圆环上等弧长的均匀分布,那样从单位面积来看是不均匀的,你画一下就知道了


一时没有完全理解,我再想一下。
  • 打赏
  • 举报
回复
因为修正后每个生成的随机点都沿半径方向远离圆心一点,所以需要考虑一定面积内的随机点
你的想法的问题在于,均匀分布实际是在单位面积内的均匀,不是若干同心圆环上等弧长的均匀分布,那样从单位面积来看是不均匀的,你画一下就知道了
ooolinux 2019-05-30
  • 打赏
  • 举报
回复
引用 9 楼 早打大打打核战争 的回复:
是一个意思,他的算法取随机极坐标长度r = sqrt(k)*R,其中R是圆半径,k∈[0, 1]内分布的随机数

设圆半径为1,取随机极坐标长度ρ∈[0, 1],然后使用r=sqrt(ρ)是一回事


你的想法是把一个较小的圆面分散到一个较大的圆面,而他的计算是把一个较小的圆周变换到一个较大的圆周,感觉有点不同亚?
我6楼的那个想法错在哪里?
  • 打赏
  • 举报
回复
是一个意思,他的算法取随机极坐标长度r = sqrt(k)*R,其中R是圆半径,k∈[0, 1]内分布的随机数

设圆半径为1,取随机极坐标长度ρ∈[0, 1],然后使用r=sqrt(ρ)是一回事
ooolinux 2019-05-30
  • 打赏
  • 举报
回复
你这个想法我理解了,那篇博客那个计算是同一个意思吗?
  • 打赏
  • 举报
回复
我想了一下,这题其实可以简单证明:
假设圆半径为1,以圆内任一点ρ到圆心为半径做一小圆,如果随机点均匀分布的话,落在小圆内的点和整个圆内的点之比应该是ρ^2 : 1,而以极坐标角度长度随机生成的点,其分布则是ρ:1(考虑落在任一半径上的随机点即可),显然更密集(因为ρ<=1),所以,如果把落在以ρ^2为半径圆内的随机点分散在以ρ为半径的圆内,则刚好符合均匀分布的要求。
ooolinux 2019-05-29
  • 打赏
  • 举报
回复
引用 5 楼 早打大打打核战争 的回复:
如果 极坐标,角度随机值,长度随机值,结果肯定不是均匀分布的,而是趋向于圆心分布,因为极坐标转化为直角坐标
x=ρ*cosθ
y=p*sinθ
而cosθ/sinθ的值不是随着θ线性变化的。
他那个算法中r = sqrt(k)*R,k∈[0, 1],实际上是改变了ρ的分布,抵消了cosθ/sinθ的非线性分布,不过具体证明我也不了解,网上应该能找到相关资料


我有一个简单的想法,如果只是角度随机、长度也随机,R/4处的圆周和R处的圆周上分布的点是一样多的,但是密度比为4倍。
如果把k开方,变成R/2处的圆周和R处的圆周上分布的点是一样多的,但是密度比为2倍,仍然是不均匀的。
这个想法有没有问题?
  • 打赏
  • 举报
回复
如果 极坐标,角度随机值,长度随机值,结果肯定不是均匀分布的,而是趋向于圆心分布,因为极坐标转化为直角坐标
x=ρ*cosθ
y=p*sinθ
而cosθ/sinθ的值不是随着θ线性变化的。
他那个算法中r = sqrt(k)*R,k∈[0, 1],实际上是改变了ρ的分布,抵消了cosθ/sinθ的非线性分布,不过具体证明我也不了解,网上应该能找到相关资料
加载更多回复(4)

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧