Python程序计算给定条件下指标随机变量的函数


假设我们有两个值k和n。考虑一个随机排列,例如p1、p2、...、pn,它是前n个自然数1、2、...、n的排列,并计算值F,使得F = (X2+...+Xn-1)k,其中Xi是一个指标随机变量,当以下两个条件之一成立时为1:pi-1 < pi > pi+1或pi-1 > pi < pi+1,否则Xi为0。我们需要找到F的期望值。

因此,如果输入类似于k = 1 n = 1000,则输出将为1996/3

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个函数exp_factor()。它将接收n、k作为参数。
  • 如果k等于1,则
    • 返回(2*(n-2) , 3)
  • 否则,如果k等于2,则
    • 返回 (40*n^2 -144*n + 131, 90)
  • 否则,如果k等于3,则
    • 返回 (280*n^3 - 1344*n^2 +2063*n -1038,945)
  • 否则,如果k等于4,则
    • 返回 (2800*n^4 - 15680*n^3 + 28844*n^2 - 19288*n + 4263, 14175)
  • 否则,如果k等于5,则
    • 返回 (12320*n^5 - 73920*n^4 + 130328*n^3 - 29568*n^2 - 64150*n -5124, 93555)
  • 返回1.0
  • 从主方法中执行以下操作:
  • M := n-2
  • p := 2.0/3
  • q := 1 - p
  • (num, den) := exp_factor(n, k)
  • g := gcd(num, den)
  • 返回分数 (num/g) / (den/g)

示例

让我们看看以下实现以更好地理解:

from math import gcd

def exp_factor(n,k):
   if k == 1:
      return (2*(n-2),3)
   elif k == 2:
      return (40*n**2 -144*n + 131,90)
   elif k == 3:
      return (280*n**3 - 1344*n**2 +2063*n -1038,945)
   elif k == 4:
      return (2800*n**4 - 15680*n**3 + 28844*n**2 - 19288*n + 4263, 14175)
   elif k == 5:
      return (12320*n**5 - 73920*n**4 + 130328*n**3 - 29568*n**2 - 64150*n -5124, 93555)
   return 1.0

def solve(k, n):
   M = n-2
   p = 2.0/3
   q = 1 - p

   num, den = exp_factor(n,k)
   g = gcd(num, den)
   return str(int(num/g))+'/'+str(int(den/g))

k = 1
n = 1000
print(solve(k, n))

输入

1, 1000

输出

1996/3

更新于: 2021年10月11日

252次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告