Guest User

Untitled

a guest
Jul 21st, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. # тут особо без вариантов, генерируем сочетания из n по к, где k из
  2. # диапазова [K..N], где N - длинна массива и для каждого такого сочетания
  3. # считаем его вероятность.
  4.  
  5. import functools
  6.  
  7. def combinations(a, k):
  8. if len(a) < k or k == 0 or a == []:
  9. return [[]]
  10. result = []
  11. for i in range(len(a)-k+1):
  12. res = combinations(a[i+1:], k-1)
  13. if res == []:
  14. result.append([a[i]])
  15. else:
  16. result += map(lambda x: [a[i]]+x, res)
  17. return result
  18.  
  19. def task110(a, K):
  20. subsets = []
  21. template = [i for i in range(1, len(a)+1)]
  22. for i in range(K, len(a)+1):
  23. subsets += combinations(template, i)
  24.  
  25. no_luck = functools.reduce(lambda x,y: x*(1-y), a, 1)
  26.  
  27. prob = 0.0
  28.  
  29. for s in subsets:
  30. prob += functools.reduce(lambda x,y: x*a[y-1]/(1-a[y-1]), s, no_luck)
  31.  
  32. return prob
  33.  
  34. print(task110([0.5,0.5,0.5],2))
  35. print(task110([0.3, 0.4, 0.7, 0.1],2))
Add Comment
Please, Sign In to add comment