楼主: 千千1
4048 3

[问答] 随机点名程序设计 [推广有奖]

  • 0关注
  • 0粉丝

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
73 点
帖子
2
精华
0
在线时间
3 小时
注册时间
2017-11-2
最后登录
2018-7-27

楼主
千千1 发表于 2018-7-18 16:00:20 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
假设班级里有100名学生,学号1到100顺序排列,设计一个随机抽取20个人进行点名的程序,由于我们希望每个学生都能尽量被点到,因此一旦某个学生被点到以后,其概率下降,同时提高其他学生被点到的概率。规则如下:
首先假设未进行任何一次点名的时候,每个学生等概率被点到,其次假设每次点名只点一名学生。如果在某次点名中学生i被点到,那么下一次点名的时候学生i
的概率减为当前的一半,另一半概率平均分配给其他同学。请给出一个模拟程序,该程序模拟100次点名,输出每次被点到学生的学号。

有个思路:设置一个足够大的随机池,给每一个学生分配相同的空间,然后利用随机数来选取被点名的学生,同时对该学生所分配的空间和其他学生的空间进行缩减或增加。然后执行下一轮。
请问可以用R语言或者Python实现吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:程序设计 python 模拟程序 R语言 等概率

沙发
jinkelazzz 发表于 2018-7-18 16:16:30
nums <- 1:100
probs <- rep(1 / 100, 100)
numList <- NULL
for(i in 1:100) {
    num <- sample(nums, 1, prob = probs)
    numList <- c(numList, num)
    probs[num] <- probs[num] / 2;
    probs[-num] <- probs[-num] + probs[num] / 99
}
numList
已有 1 人评分论坛币 热心指数 收起 理由
逐梦的太阳 + 5 + 5 热心帮助其他会员

总评分: 论坛币 + 5  热心指数 + 5   查看全部评分

藤椅
rainningpoet 发表于 2018-7-19 01:18:18

(nums <- 1:100)
(probs <- rep(1 / 100, 100))
(numList <- NULL)
for(i in 1:100) {
  num <- sample(nums, 20, prob = probs)
  numList <- c(numList, num)
  probs[num] <- probs[num] / 2
  probs[-num] <- probs[-num] + sum(probs[num])/ 80
  sum(probs[-num])+sum(probs[num])
}
numList

板凳
千千1 发表于 2018-7-22 11:11:36
jinkelazzz 发表于 2018-7-18 16:16
nums
谢谢大神,懂啦~

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 02:39