You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中模拟鞅过程求解随机发还外套问题的期望结束时间

问题描述

100名观众看完戏剧后前往衣帽间取外套,工作人员完全随机发还外套,拿到本人外套的观众直接离场,拿错的观众归还外套后,工作人员会再次随机发放剩余外套,该流程直到所有观众都拿到正确外套时终止。需要在R中模拟该过程,求解流程的期望结束时间(即迭代总次数)。

原思路存在的问题

你提供的两版思路核心逻辑方向是对的,但第二版代码存在几处可修正的问题:

  • 循环条件X != n逻辑错误,X是初始的1~100向量,无法直接和标量n做比较判断终止条件
  • 混淆了赋值符=和逻辑相等符==,if (X = y)属于语法错误
  • 每次仍然全量抽样1~100的编号,没有排除已经离场的观众,不符合实际流程
  • 计数逻辑错误,不是仅统计单个拿对外套的观众,而是每一轮所有拿对的观众会同时离场。
正确模拟代码实现

单轮过程模拟函数

simulate_coat_check <- function(n = 100) {
  # 初始化剩余未拿到自己外套的观众编号
  remaining_audience <- seq_len(n)
  iter_count <- 0
  # 所有观众都拿到外套则终止循环
  while (length(remaining_audience) > 0) {
    iter_count <- iter_count + 1
    # 仅给剩余观众随机发放对应数量的外套
    shuffled_coats <- sample(remaining_audience, size = length(remaining_audience), replace = FALSE)
    # 筛选出拿错外套、需要参与下一轮发放的观众
    remaining_audience <- remaining_audience[remaining_audience != shuffled_coats]
  }
  return(iter_count)
}

批量模拟求期望

通过多次重复模拟取平均值,得到近似的期望迭代次数:

# 固定随机种子保证结果可复现
set.seed(123)
# 重复模拟10000次,模拟次数越多结果越接近理论值
sim_results <- replicate(10000, simulate_coat_check(n = 100))
# 计算期望迭代次数
expected_iterations <- mean(sim_results)
print(expected_iterations)
结果说明

该过程的理论期望迭代次数等于观众总数n,100名观众的情况下期望为100次,模拟结果会在100附近小幅波动。

内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:24:03