博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
概率面试题
阅读量:4347 次
发布时间:2019-06-07

本文共 1287 字,大约阅读时间需要 4 分钟。

 

1、给你一个数组,设计一个既高效又公平的方法随机打乱这个数组(此题和洗牌算法的思想一致)

方法比较简单,基本思想是每次随机取一个数,然后把它交换到最后的位置。然后对前(n-1)个数使用递归的。

递归实现:

void suffle_dfs(int ar[], int n)  {      if(n<=1)return;      swap(ar[n-1], ar[rand()%n]);      shuffle_dfs(ar,n-1);  }

 

非递归实现

void suffle(int ar[], int n)  {      while(n>1){          swap(ar[n-1], ar[rand()%n]);          n--;      }  }

2、有一苹果,两个人抛硬币来决定谁吃这个苹果,先抛到正面者吃。问先抛这吃到苹果的概率是多少?

这种题目一看似乎答案就是1/2,但其实认真细想并没有那么简单。

给所有的抛硬币操作从1开始编号,显然先手者只可能在奇数(1,3,5,7…)次抛硬币得到苹果,而后手只可能在偶数次(2,4,6,8…)抛硬币得到苹果。设先手者得到苹果的概率为p,第1次抛硬币得到苹果的概率为1/2,在第3次(3,5,7…)以后得到苹果的概率为p/4(这是因为这种只有在第1次和第2次抛硬币都没有抛到正面(概率为1/4=1/2*1/2)的时候才有可能发生,而且此时先手者在此面临和开始相同的局面)。所以可以列出等式p=1/2+p/4,p=2/3。

现在答案已经很明确了,所以大家平时要注意不要这样被人骗了,当然也不能去骗别人,哈哈~

3、一条长度为l的线段,随机在其上选2个点,将线段分为3段,问这3个子段能组成一个三角形的概率是多少?设随机选取的两个数为x,y,并令y>x,则把长度为1的线段截得的三段长度为x, y-x ,1-y,根据三角形两边和大于第三边以及两边之差小于第三边的定理,可以列出方程组
y>1-y; x<1-x; x+(1-y)>y-x;
即x<1/2; y>1/2; y<x+1/2;
画图可以算得概率为1/8;(线性规划的思想)

 

 

假设我们选择的两个点的坐标是x和y(先假设x < y): 

那么由三角形两边和大于第三边的性质,有: 
x+y-x>1-y 
x+1-y>y-x 
1-y+y-x>x

由上述不等式得到:x < 0.5, 0.5 < y < x+0.5 

然后画个图就能得到联合概率为1/8,不要忘了这个结果是在假设x < y时得来的,所以再乘以2,得到1/4。

4、一个面试题:快速生成10亿个不重复的18位随机数的算法(从n个数中生成m个不重复的随机数)

//假设从-n这n个数中生成m个不重复的数,且n小于int的表示范围

//总体思想是一开始每个数被选中的概率是m/n,于是随机一个数模n如果余数小于m则输出该数,同时m减

//否则继续扫描,以后的每个数被选中的概率都是m/(n-i)

 

转载于:https://www.cnblogs.com/xianbin7/p/10715032.html

你可能感兴趣的文章
C# 创建 读取 更新 XML文件
查看>>
KD树
查看>>
VsVim - Shortcut Key (快捷键)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
CMU Bomblab 答案
查看>>
技术分析淘宝的超卖宝贝
查看>>
Azure云服务托管恶意软件
查看>>
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
自定义滚动条
查看>>
APP开发手记01(app与web的困惑)
查看>>