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

如何修正R语言中计算季后赛系列赛剩余预期胜场的函数?

修正R语言季后赛预期胜场计算函数(7场4胜制)

原函数的核心问题是未考虑季后赛系列赛的提前结束机制:当某支球队先赢够指定场次(如4场)时,系列赛立即终止,后续比赛不会进行。直接使用二项分布会包含这些不可能发生的比赛序列,导致预期胜场计算错误。

比如题目中0-3落后的场景:球队单场胜率50%,对手已赢3场(系列赛需赢4场),原函数会错误计入类似LWWW这种不可能的序列(对手赢3场后系列赛已结束),而实际预期胜场应为0.9375。

修正后的函数实现

get_expected_wins <- function(wp_a, win_needed, opponent_wins = 0, team_wins = 0) {
  # 计算双方剩余需要赢的场次
  remaining_team <- win_needed - team_wins
  remaining_opponent <- win_needed - opponent_wins
  
  # 若系列赛已分胜负,直接返回当前胜场数
  if (remaining_team <= 0) return(win_needed)
  if (remaining_opponent <= 0) return(team_wins)
  
  expected_wins <- 0
  
  # 计算球队未能赢下系列赛的所有情况:对手先赢够场次
  for (t in 0:(remaining_team - 1)) {
    # 前(t + remaining_opponent - 1)场,球队赢t场、对手赢(remaining_opponent - 1)场
    # 最后一场由对手赢下,系列赛终止
    prob <- choose(t + remaining_opponent - 1, t) * (wp_a^t) * ((1 - wp_a)^remaining_opponent)
    expected_wins <- expected_wins + prob * (team_wins + t)
  }
  
  # 计算球队赢下系列赛的所有情况:球队先赢够场次
  for (m in 0:(remaining_opponent - 1)) {
    # 前(remaining_team + m - 1)场,球队赢(remaining_team - 1)场、对手赢m场
    # 最后一场由球队赢下,系列赛终止
    prob <- choose(remaining_team + m - 1, m) * (wp_a^remaining_team) * ((1 - wp_a)^m)
    expected_wins <- expected_wins + prob * win_needed
  }
  
  return(expected_wins)
}

验证示例

调用题目中的测试场景:

get_expected_wins(wp_a = 0.5, win_needed = 4, opponent_wins = 3, team_wins = 0)

返回结果为0.9375,与实际预期一致。

函数逻辑说明

  1. 前置判断:先检查系列赛是否已结束(某队已赢够场次),直接返回对应胜场数。
  2. 非获胜场景计算:遍历球队可能赢的场次(从0到差1场夺冠),计算对手先夺冠的概率,乘以对应胜场数累加。
  3. 获胜场景计算:遍历对手可能赢的场次(从0到差1场夺冠),计算球队先夺冠的概率,以最终夺冠胜场数(win_needed)乘以概率累加。
  4. 求和得到预期胜场:将两种场景的贡献相加,得到最终预期值。

内容的提问来源于stack exchange,提问作者Canovice

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:42:25