Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで式の結果の最大発生頻度値の期待値を見つけるプログラム


M個の異なる式があり、これらの式の答えが1からN(両方を含む)の範囲にあると仮定します。したがって、1からNの範囲の各iについてx =max(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} $$

これを解決するには、次の手順に従います-

  • 組み合わせ:=新しいマップ
  • 関数nCr()を定義します。これにはn、k_inが必要です
  • k:=最小のk_inおよび(n-k_in)
  • n
  • 0を返す
  • それ以外の場合、(n、k)が組み合わされている場合、
    • 組み合わせを返す[n、k]
  • それ以外の場合、kが0と同じ場合、
    • 1を返す
  • それ以外の場合、nがkと同じである場合、
    • 1を返す
  • それ以外の場合、
    • a:=1
    • 0〜k-1の範囲のcntの場合、do
      • a:=a *(n --cnt)
      • a:=a /(cnt + 1)のフロア
      • 組み合わせ[n、cnt + 1]:=a
    • 返品
  • メインの方法から、次の手順を実行します。
  • arr:=新しいリスト
  • 2からM+1の範囲のkについては、
    • a:=1
    • s:=0
    • 0からM/k + 2のフロアまでの範囲のiについては、
      • M
      • ループから抜け出す
    • s:=s + a * nCr(N、i)* nCr(N-1 + M-i * k、M-i * k)
    • a:=-a
  • arrの最後にsを挿入
  • total:=arrの最後の要素
  • diff:=最初にarr [0]を挿入し、0からM-2の範囲の各cntに対して(arr [cnt + 1] --arr [cnt])のリストを追加する配列
  • 出力:=(diff [cnt] *(cnt + 1)/範囲0からM-1のcntの合計)に存在するすべての要素の合計
  • 出力を返す
  • 理解を深めるために、次の実装を見てみましょう-

    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

    1. Pythonでの頻度と同じ値を持つリスト内の要素を検索するプログラム

      numsという数値のリストがあるとすると、リスト内の頻度がその値と同じである要素があるかどうかを確認する必要があります。 したがって、入力が[2、4、8、10、4、4、4]の場合、出力はTrueになります これを解決するには、次の手順に従います- res:=値ごとの頻度を保存するための新しいマップ resのキーと値のペア(k、v)ごとに、を実行します。 kがvと同じ場合、 Trueを返す Falseを返す 理解を深めるために、次の実装を見てみましょう- 例 class Solution:    def solve(self, nums):  

    2. 辞書で2番目に大きい値を見つけるPythonプログラム

      この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 2つの整数が与えられているので、辞書に2番目に大きい値を出力する必要があります それでは、以下の実装の概念を見てみましょう- アプローチ1-負のインデックスによるsorted()関数の使用 例 #input example_dict ={"tutor":3, "tutorials":15, "point":9,"tutorialspoint":19} # sorting the given list and get the