在Python中找到表达式结果中发生最大频率的值的期望

在Python中找到表达式结果中发生最大频率的值的期望

假设我们有M个不同的表达式,这些表达式的答案在1到N的范围内(包括1和N)。因此,考虑每个i在1到N的最大f(i),我们必须找到x的期望值。

因此,如果输入为M=3和N=3,则输出为2.2,因为

序列 最大频率
111 3
112 2
113 2
122 2
123 1
133 1
222 3
223 2
233 2
333 3

E(x) = \sum P(x) * x = P(1) + 2P(2) + 3P(3) = \frac{1}{10} + 2 * \frac{6}{10} + 3 * \frac{3}{10} = \frac{22}{10}

为了解决这个问题,我们将按照以下步骤进行 –

  • combination := 一个新的映射
  • 定义一个函数nCr(),它将获取n,k_in
  • k := k_in和(n – k_in)的最小值
  • 如果n < k或k < 0,则
    • 返回0
  • 否则,当(n,k)在组合中时,则
    • 返回combination [n,k]
  • 否则,当k与0相同时,则
    • 返回1
  • 否则,当n与k相同时,则
    • 返回1
  • 否则,
    • a := 1
    • 对于计数器在0到k-1的范围内,做
      • a := a *(n- cnt)
      • a := a //(cnt + 1)的floor
      • combination [n,cnt + 1] := a
    • 返回一个
  • 从主方法,执行以下操作:
  • arr := 一个新列表
  • 对于k在range(2,M + 1),做
    • a := 1
    • s := 0
    • 对于i在range(0,floor(M/k + 2)),做
      • 如果M < i * k,则
      • 从循环中退出
      • s := s + a * nCr(N,i) * nCr(N-1+M-ik,M-ik)
      • a := -a
    • 在arr的末尾插入s
  • total := arr的最后一个元素
  • diff :=一个数组,在开头插入arr [0],然后插入列表(范围为0到M-2的cnt + 1-arr [cnt])
  • 输出:(diff [cnt] *(cnt + 1)/ total for cnt in range(M-1))中存在的所有元素的总和
  • 返回输出

例子

让我们看一下以下的实施情况,以获得更好的了解。

combination = {}

def nCr(n, k_in):
    k = min(k_in, n - k_in)
    if n < k or k < 0:
        return 0
    elif (n, k) in combination:
        return combination[(n, k)]
    elif k == 0:
        return 1
    elif n == k:
        return 1
    else:
        a = 1
        for cnt in range(k):
            a *= (n - cnt)
            a //= (cnt + 1)
            combination[(n, cnt + 1)] = a
        return a

def solve(M, N):
    arr = []
    for k in range(2, M + 2):
        a = 1
        s = 0
        for i in range(M // k + 2):
            if (M < i * k):
                break
            s += a * nCr(N, i) * nCr(N - 1 + M - i * k, M - i * k)
            a *= -1
        arr.append(s)
    total = arr[-1]
    diff = [arr[0]] + [arr[cnt + 1] - arr[cnt] for cnt in range(M - 1)]
    output = sum(diff[cnt] * (cnt + 1) / total for cnt in range(M))
    return output

M = 3
N = 3
print(solve(M, N))

输入

3, 3

输出

1

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程