Suppose we have an array with n different English letters. We also have another value k. We can select k different indices (1-indexed) with uniform distribution. We have to find the probability that at least one of the k indices selected will contain the letter 'a'.
So, if the input is like letters = ['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z'] k = 2, then the output will be 64.28%. There are combinations like (1, 2), (1, 3) like there are 28 combinations but some of them like (1,2), (1,3), (6,7) such 18 pairs are holding 7, so 18/28 = 0.6428.
To solve this, we will follow these steps −
- contain := 0
- total := 0
- for each combination c of letters with k elements, do
- if "a" is present in c, then
- contain := contain + 1
- total := total + 1
- if "a" is present in c, then
- return contain/total
Example
Let us see the following implementation to get better understanding −
from itertools import combinations def solve(letters, k): contain = 0 total = 0 for c in combinations(letters, k): if "a" in c: contain += 1 total += 1 return contain/total letters = ['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z'] k = 2 print(solve(letters, k))
Input
['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z'], 2
Output
0