Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình Python để tính toán hàm từ biến ngẫu nhiên chỉ báo từ điều kiện đã cho


Giả sử chúng ta có hai giá trị k và n. Xét một hoán vị ngẫu nhiên p1, p2, ..., pn của n số tự nhiên đầu tiên 1, 2, ..., n và tính giá trị F sao cho F =(X2 + ... + Xn-1) k , trong đó Xi là một biến ngẫu nhiên chỉ báo, là 1 khi một trong hai điều kiện sau giữ nguyên:pi-1 pi + 1 hoặc pi-1> pi

Vì vậy, nếu đầu vào là k =1 n =1000, thì đầu ra sẽ là 1996/3

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm exp_factor (). Điều này sẽ mất n, k
  • nếu k giống 1, thì
    • return (2 * (n-2), 3)
  • ngược lại khi k giống 2 thì
    • return (40 * n ^ 2 -144 * n + 131, 90)
  • ngược lại khi k giống 3 thì
    • return (280 * n ^ 3 - 1344 * n ^ 2 + 2063 * n -1038,945)
  • ngược lại khi k giống với 4 thì
    • return (2800 * n ^ 4 - 15680 * n ^ 3 + 28844 * n ^ 2 - 19288 * n + 4263, 14175)
  • ngược lại khi k giống với 5 thì
    • return (12320 * n ^ 5 - 73920 * n ^ 4 + 130328 * n ^ 3 - 29568 * n ^ 2 - 64150 * n -5124, 93555)
  • trả về 1.0
  • Từ phương pháp chính, hãy thực hiện như sau -
  • M:=n-2
  • p:=2.0 / 3
  • q:=1 - p
  • (num, den):=exp_factor (n, k)
  • g:=gcd (num, den)
  • trả về phân số (num / g) / (den / g)

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

1, 1000

Đầu ra

1996/3