Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # тут особо без вариантов, генерируем сочетания из n по к, где k из
- # диапазова [K..N], где N - длинна массива и для каждого такого сочетания
- # считаем его вероятность.
- import functools
- def combinations(a, k):
- if len(a) < k or k == 0 or a == []:
- return [[]]
- result = []
- for i in range(len(a)-k+1):
- res = combinations(a[i+1:], k-1)
- if res == []:
- result.append([a[i]])
- else:
- result += map(lambda x: [a[i]]+x, res)
- return result
- def task110(a, K):
- subsets = []
- template = [i for i in range(1, len(a)+1)]
- for i in range(K, len(a)+1):
- subsets += combinations(template, i)
- no_luck = functools.reduce(lambda x,y: x*(1-y), a, 1)
- prob = 0.0
- for s in subsets:
- prob += functools.reduce(lambda x,y: x*a[y-1]/(1-a[y-1]), s, no_luck)
- return prob
- print(task110([0.5,0.5,0.5],2))
- print(task110([0.3, 0.4, 0.7, 0.1],2))
Add Comment
Please, Sign In to add comment