随机在圆上生成n个点,这n个点在同一半圆的概率是多少?
We randomly distribute n points on the circumference of a circle. What is the probability that they will all fall in a common semi-circle?
我们先用程序模拟一下这个过程,看看结果会是什么?
算法思想:我们先定义一个点的最大值,然后随机生成N个点,之后对这N个点进行排序,定义两点之间的最大距离为max_distance,把它的初始值设置为最小值点+最大值-最大值点,然后遍历所有点,求的相邻两点之间的最大值,如果max_distance大于半圆周长,说明这些点在同一半圆内。
代码清单:
import java.util.Arrays;
import java.util.Random;public class Npoints {/*** @param args*/public static void main(String[] args) {int m = 10000;int count;Npoints robot = new Npoints();for(int n = 1; n <= 8; n++){//一共测试n个点count = 0;for(int i = 0; i < m; i++){//每个点做m次测试if(robot.judge(n) == true){count++;}}System.out.println("n=" + n + "时,在同一半圆的概率为:" + count*1.0/m);}}private boolean judge(int n) {int points = 10000;//点的最大值int half = points >> 1;Random r = new Random();int[] array = new int[n+1];for(int i = 1; i <= n; i++)array[i] = r.nextInt(points) + 1;Arrays.sort(array);int max_distance = array[1] + points - array[n];for(int i = 1; i < n; i++){if(array[i+1] - array[i] > max_distance)max_distance = array[i+1] - array[i];}return max_distance >= half;}}
输出:
n=1时,在同一半圆的概率为:1.0
n=2时,在同一半圆的概率为:1.0
n=3时,在同一半圆的概率为:0.7517
n=4时,在同一半圆的概率为:0.4955
n=5时,在同一半圆的概率为:0.3131
n=6时,在同一半圆的概率为:0.1919
n=7时,在同一半圆的概率为:0.1095
n=8时,在同一半圆的概率为:0.0601
通过上面的模拟结果,可以看出随着n的增大,概率呈指数递减,并且通过P(1)=P(2)=1,猜测出它的结果可能为
n / 2^(n-1),通过多次验证,验证了这个结果的正确性。之后我花了一下午的时间试图对这个问题进行数学证明,不过很遗憾,几次尝试都是错误的解释或证明。
最后查到了原题作者对此问题的数学证明,见识下作者强悍的数学功力。
在求解的过程中,我还发现了一个有趣的现象:对n个点排序后,如果认为最大值点-最小值点 < 半圆周长 的话,那么它的结果将是第n+1个点的概率。
==================================================================================================
作者:nash_ 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/nash_/article/details/8547278
===================================================================================================
随机在圆上生成n个点,这n个点在同一半圆的概率是多少?相关推荐
- python随机画圆_python生成随机图形验证码详解
#导入random模块 import random #导入Image,ImageDraw,ImageFont模块 from PIL import Image,ImageDraw,ImageFont # ...
- 四只鸭子在一个水池中,分别随机出现在圆圈中任意一点,四只鸭子出现在同一个半圆的概率是多少?
上个月在网上看到一道数学题,于是写了个算法进行计算,别人和我说这叫蒙特卡罗. 题目如下: 我写的代码如下: package DuckCircle;import java.util.Random;pub ...
- Java黑皮书课后题第4章:*4.6(图上的随机点)编写一个程序,产生一个圆心位于(0,0)原点半径为40的圆上面的三个随机点,显示由这三个随机点组成的三角形的三个角的度数
*4.6(图上的随机点)编写一个程序,产生一个圆心位于(0,0)原点半径为40的圆上的三个随机点,显示由这三个随机点组成的三角形的三个角的度数 题目 题目概述 破题 代码 题目 题目概述 *4.6(图 ...
- python怎么计算圆_python根据圆的参数方程求圆上任意一点的坐标
from math import cos, sin,pi x0,y0=0,0 r=4.0 angle=-25 x1 = x0 + r * cos(angle * pi / 180) y1 = y0 + ...
- 圆上任意四点在同一个半圆上的概率
起因是看到了里神乐的微博(微博),一下激起了我的兴趣,但是作为一个已经大学毕业一年多的打工人,数学知识早还给老师了,于是就想用程序模拟点的情况,通过统计频率,来逼近概率. 代码放在这 import j ...
- vrf名称_如何使用VRF(可验证随机函数)在以太坊上生成随机数
Chainlink 如何解决以太坊"随机数问题" 随机数和区块链一直很难达到"一致"(译者注:区块链要求确定性,而随机数正相反).到目前为止,区块链上还没有可验 ...
- c++ 圆上任意点坐标计算_已知圆上任意三点坐标如何编程来计算这个圆的圆心和半径...
在过去的一周时间里一直在计算师兄交代的任务 ,啥都没学,就一直在干这活.其中呢,我想的一个算法中就用到了本文中的这个小知识(主要就是线性代数和高中的一些知识结合起来).师兄说做的这个东西的内容要保密, ...
- 小程序转盘抽奖,已知圆心、半径、角度求圆上点的坐标
因公司的需求,要在小程序语音房内部迭代一个真心话大冒险的功能,也等同于幸运转盘: 业务场景: 发送一个socket,拿到响应的结果,根据返回的数值开始启动幸运转盘,由于转盘上的人数不是固定的,所以要根 ...
- 【Unity】U3D TD游戏制作实例(四)建造防御塔:防御塔生成器、一个int代表多选框,圆上任意点位的坐标计算、制作防御塔预制件
文章目录 本章内容介绍 制作生成器 生成器Hierarchy 高亮显示生成器 制作箭塔菜单 将创建菜单对齐到选中的生成器 动态生成按钮 动态计算按钮坐标 制作预制件 最终运行效果 本章内容介绍 由于目 ...
最新文章
- OpenSSL 转换证书格式
- web相关概念回顾|| 部署项目的方式
- 妙啊,这条命令可以查出哪些端口被防火墙阻止了
- JAVA标识符中含小数点可以吗_数值类型小数点后是否可以接零问题
- 收集Redis16个最常见面试问题
- 笔记本系统恢复连载之十:系统恢复并不难
- 在中标麒麟上基于源码安装第二个gcc编译器
- CAESAR II 5.00 USB加密锁运行稳定完整功能版/
- 数据仓库的分层,你知道吗?
- 小米笔记本Air 13.3 指纹版安装黑苹果 macOS High Sierra 10.13 教程
- php龙之战争游戏搭建教程,龙之战争1.02正式版下载
- W806开发板环境搭建
- starting Intent from ProcessRecord with revoked permission android.permission.CALL_PHONE 的错误原因
- 如何评价 APICloud ?
- 输入一个数字n,输出一个n层的特定三角形
- map函数、filer函数、reduce函数的用法和区别
- 头的各个部位示意图_超全!27张高清解剖图带你认识头、面、颈部骨骼及肌肉名称!珍藏!...
- 纵观计算机简史ppt,纵观计算机简史初中信息技术新课本中国地图出社课件.ppt...
- Web前端开发技术:Vue开发基础(1)
- VS模板 孤狼优化版v1.0