全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3952 3
2018-07-18
假设班级里有100名学生,学号1到100顺序排列,设计一个随机抽取20个人进行点名的程序,由于我们希望每个学生都能尽量被点到,因此一旦某个学生被点到以后,其概率下降,同时提高其他学生被点到的概率。规则如下:
首先假设未进行任何一次点名的时候,每个学生等概率被点到,其次假设每次点名只点一名学生。如果在某次点名中学生i被点到,那么下一次点名的时候学生i
的概率减为当前的一半,另一半概率平均分配给其他同学。请给出一个模拟程序,该程序模拟100次点名,输出每次被点到学生的学号。

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

扫码加我 拉你入群

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

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

全部回复
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
二维码

扫码加我 拉你入群

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

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

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
二维码

扫码加我 拉你入群

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

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

2018-7-22 11:11:36
jinkelazzz 发表于 2018-7-18 16:16
nums
谢谢大神,懂啦~
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群