今天的Java上机练习有一道非常有意思的题:

使用贝叶斯公式求解,随机点名多少次,学生的可信度降到了0.01以下,该同学需要经过多少次,可信度才能上升到0.85。 假定初始同学可信的概率是0.8,可信同学上课的概率是0.8,不可信同学上课的概率是0.4,请编写程序求解上述问题。

  贝叶斯分析作为一个统计学的基本流派,通过先验和条件概率的结合,可以综合已有过往人类对一个领域的知识和更新的数据,来不停改进人类的认知。即一个人的行为会不断修正其他人对其的看法。
  相信大家都听过“狼来了”的故事,而这道题和“狼来了”非常类似。在这道题目的背景下,学生有两种行为,即去上课和不去上课;老师也有两种行为,即信任这个学生或不信任这个学生。我们不妨设事件AAA表示学生不来上课,事件BBB表示学生可信。那么根据题意,有P(B)=0.8,P(Bˉ)=0.2.P(B)=0.8,P(\bar B)=0.2.P(B)=0.8,P(Bˉ)=0.2.在计算修正后的学生可信度时,我们需要知道可信的学生不来上课的概率,以及不可信的学生不来上课的概率,即P(A∣B)=0.2,P(A∣Bˉ)=0.6.P(A|B)=0.2,P(A|\bar B)=0.6.P(A∣B)=0.2,P(A∣Bˉ)=0.6.那么,当可信的学生第一次不来上课时,他的可信度修正为P(B∣A)=P(B)P(A∣B)P(B)P(A∣B)+P(Bˉ)P(A∣Bˉ)=0.8×0.20.8×0.2+0.2×0.6=47.P(B|A)=\frac{P(B)P(A|B)}{P(B)P(A|B)+P(\bar B)P(A|\bar B)}=\frac{0.8\times0.2}{0.8\times0.2+0.2\times0.6}=\frac{4}{7}.P(B∣A)=P(B)P(A∣B)+P(Bˉ)P(A∣Bˉ)P(B)P(A∣B)​=0.8×0.2+0.2×0.60.8×0.2​=74​.
也就是说,可信的学生第一次不来上课,他的可信度就会从原先的0.8下降到0.57左右。当他后续多次不来上课时,他的可信度就会越来越低。

double b = 0.8;        // 学生可信
double b_ = 0.2;       // 学生不可信
double ab = 0.2;       // 学生可信但未上课
double ab_ = 0.6;      // 学生不可信且未上课
double a_b = 0.8;      // 学生可信且上课
double a_b_ = 0.4;     // 学生不可信但上课// 随机点名多少次,学生的可信度降到了0.01以下
int cnt1 = 0;
while (b >= 0.01) {b = (b * ab) / (b * ab + b_ * ab_);b_ = 1 - b;cnt1++;
}
System.out.println("随机点名" + cnt1 + "次,学生的可信度降到了0.01以下");
System.out.println("此时学生的可信度为" + b);

  通过编写程序,我们可以得知,当学生连续6次不来上课时,他的可信度就会从0.8降到0.01以下。

  同样的道理,如果他后续来上课,那么老师对他的可信度就会不断提高。下面是解决本道题目后半个问题的代码:

// 该同学需要经过多少次,可信度才能上升到0.85
int cnt2 = 0;
while (b < 0.85) {b = (b * a_b) / (b * a_b + b_ * a_b_);b_ = 1 - b;cnt2++;
}
System.out.println("该同学需要经过" + cnt2 + "次,可信度才能上升到0.85");
System.out.println("此时学生的可信度为" + b);

  下面是解决本题的完整代码:

package JavaProgramming_B;public class Experiment_2_4 {public static void main(String[] args) {double b = 0.8;        // 学生可信double b_ = 0.2;       // 学生不可信double ab = 0.2;       // 学生可信但未上课double ab_ = 0.6;      // 学生不可信且未上课double a_b = 0.8;      // 学生可信且上课double a_b_ = 0.4;     // 学生不可信但上课// 随机点名多少次,学生的可信度降到了0.01以下int cnt1 = 0;while (b >= 0.01) {b = (b * ab) / (b * ab + b_ * ab_);b_ = 1 - b;cnt1++;}System.out.println("随机点名" + cnt1 + "次,学生的可信度降到了0.01以下");System.out.println("此时学生的可信度为" + b);// 该同学需要经过多少次,可信度才能上升到0.85int cnt2 = 0;while (b < 0.85) {b = (b * a_b) / (b * a_b + b_ * a_b_);b_ = 1 - b;cnt2++;}System.out.println("该同学需要经过" + cnt2 + "次,可信度才能上升到0.85");System.out.println("此时学生的可信度为" + b);}
}

  运行结果如下:

  由此可见,一个人的行为确实会不断修正其他人对其的看法。


参考文章:如何用贝叶斯公式计算“狼来了”中村民对小孩的信任程度
如发现本文中的问题,请联系我,我将不胜感激,并将问题加以改正。

贝叶斯公式与随机点名中的学生可信度相关推荐

  1. * 完成随机点名案例;学生姓名都提前写在文件中;:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;

    import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOExce ...

  2. Python——课堂随机点名

    最近为了在课堂中提高学生的兴趣,使用python写了一个随机点名的小程序,正好python也是学生以后要学习的知识. 首先需要每个班级学生的名单(直接找班主任要),复制到保存到txt文件里即可.命名建 ...

  3. 课堂随机点名神器,超简单快捷设置教程

    [点名精灵]点名软件是一款课堂随机点名神器,老师可以通过此软件轻松实现随机点名,有效的保证公平公正的点名服务. 软件使用教程: ①:先导入班级花名册,通过excel表格一键导入(可查看导入示例) ②: ...

  4. html中自动随机点名的程序,JavaScript实现随机点名程序

    本文实例为大家分享了js实现随机点名程序的具体代码,供大家参考,具体内容如下 效果: 录制的gif效果图没那么理想,其实速度是比这个快的 思路: 1.定义一个数组,存放名单 2.启动定时器,设定间隔时 ...

  5. html中自动随机点名的程序,html实现随机点名器的示例代码

    此点名器开始点名后需点击停止按钮完成点名,因为是精简版没有考虑自动停止需求.姓名数据以字符串形式储存,适合小范围点名使用,有大量需求可自己适当改进. 随机点名生成 /* 页面css样式 */ .wra ...

  6. 学生随机点名PHP,JS实现课堂随机点名和顺序点名

    1. 效果: 2. Html代码: 随机点名区域 3. JavaScript代码: var i = 0; //t用来接收setTimeOut()的返回值 var t; var st = ['张三',' ...

  7. [Electron]仿写一个课堂随机点名小项目

    自从前几个月下了抖音,无聊闲暇时就打会打开抖音,因为打开它有种莫名其妙打开了全世界的感觉... 无意中看到这个小视频:随机点名 于是仿写了一个课堂点名小项目,算是对Electron的一个简单的认识,有 ...

  8. matlab运用函数随机点名,matlab随机点名程序

    思路: 总共n个学生(对应学号从1到n):每次抽查m个学生的作业: 输入n和m.得到每次抽查的学号: 而每次抽查的学号分为两部分:一部分是上次抽查过的人中随机30%的学号:另一部分是为抽查过的人中70 ...

  9. 我写了个随机点名系统,非常好用~ 我给它取名叫做——随机点名系统

    快开学了吧?作为课代表或者班长的你肯定需要一个随机点名系统.所以我做了一个可以通过导入Excel录入学生信息的随机点名系统.真的方便好用!!! 一.如何使用 点名系统的使用 和 把大象放进冰箱的步骤类 ...

最新文章

  1. [文档].JLINK挂了怎么办?自己修![转载].JLINK_V8固件烧录和固件升级指导.pdf
  2. linux配置python_Linux--linux下配置安装python3
  3. fedora21 mysql_在fedora21 上的php+mysql+apache环境搭建
  4. 计算机鼠标装有,计算机鼠标装有传感器来监视鼠标的移动情况,如图
  5. 设计灵感|清爽直观的仪表盘设计,转化繁杂数据
  6. Android SQLite用法
  7. 判断 Map 中是否包含指定的 key 和 value
  8. 【Git入门之二】基本术语
  9. 网页360浏览器极速模式能打开,兼容模式打不开
  10. 栈的应用(三)之C语言实现逆波兰表达式
  11. linux live cd哪个好,最佳的 Linux LiveCD
  12. 下载scikit_learn
  13. 代码的坏味道之七 :Feature Envy(依恋情结)
  14. 旷视2022:以产品之能加速行业发展,以生态之力开拓AIoT蓝海
  15. Py之toad:toad的简介、安装、使用方法之详细攻略
  16. Python排列函数和组合函数
  17. 包裹侠查快递单号_菜鸟驿站官网 官方网站 包裹侠快递单号查询
  18. 《REWORK》启示录 招聘笔杆子——程序员为什么值得写博客
  19. php 二维数组中去重,[转]PHP二维数组去重数组去重
  20. Linux系统调用四、lseek()函数详解

热门文章

  1. 计算机主机故障排除,常见的电脑硬件故障排除
  2. ublox TMOD2
  3. 第三章 事物的联系,发展及其规律
  4. Vimium:全程使用键盘来操作浏览器的插件,脱离鼠标点击浏览器的限制,与Vim类似
  5. 广西南宁商际网络淘宝天猫托管代运营/电商培训顾问外包服务商
  6. 华为S9300交换机看acl命中数:acl counter
  7. 追加重定向 输入和输出
  8. 关于VS “error LNK2005: 已经在 .obj 中定义“
  9. matlab汽车座椅脉冲振动冲击仿真
  10. TC第三方控件(官网)