Creo que la manera correcta de pensar acerca de esto es darse cuenta de que el juego es sobre si y sólo si has llegado a $X$ los objetivos particulares, por lo que el juego en cuestión los estados son todos los subconjuntos de $[1, N]$ de tamaño $X$ - las que contienen $k$ son los estados donde se han llegado a destino k antes de que el juego es largo.
Mirando puro combinaciones, el número de estados donde se ha golpeado k es:
$$n_{k} = {X - 1 \elegir N - 1}$$
Como se selecciona la primera de ellas en el conjunto de $k$ y seleccionando $X - 1$ de los restantes $N - 1$ combinaciones. El número de combinaciones que no incluyen $k$ son:
$$n_{!k} = {X \elegir N - 1}$$
Así, en el límite donde todos los objetivos son igualmente probables, la respuesta sería:
$$\mathbf{p}_{!k} = \frac{n_{!k}}{n_{k} + n_{!k}}$$
(Tenga en cuenta que el denominador es el número total de final de juego de los estados.)
Cuando las probabilidades de golpear objetivos es diferente, creo que usted necesita para utilizar el mismo enfoque, pero utilizando el enfoque de esta cuestión para calcular la suma de los productos de todos los subconjuntos relevantes.
Usando la notación de un artículo de Wikipedia en primaria simétrica polinomios, y llamando a $\mathbf{T}_{!k} = \{p_i\}$ donde $i \in [1, N]$ y $i \neq k$:
$$P_{k} = p_{k} \cdot e_{X-1}(\mathbf{T}_{!k})$$
$$P_{!k} = e_{X}(\mathbf{T}_{!k})$$
Y la respuesta es:
$$\mathbf{p}_{!k} = \frac{P_{!k}}{P_{k} + P_{!k}}$$
Editar
Para comprobar que esta es la respuesta correcta, escribí un script de python que se ejecuta una prueba empírica del hecho al azar jugar el juego varias veces y se cuenta el número de juegos en los que $k$ fue golpeado:
from __future__ import division
from copy import copy
from itertools import combinations
from operator import mul
from functools import reduce, partial
import numpy as np
# Empirical approach
def play_game(t_list, k, X):
if k >= len(t_list):
raise ValueError("k cannot be greater than N")
if X >= len(t_list):
raise ValueError("X must be <= N")
targ_probs = np.array(t_list) / sum(np.array(t_list))
targ_inds = np.arange(0, len(targ_probs))
targ_set = set()
while True:
c_target = np.random.choice(targ_inds, p=targ_probs)
if c_target == k:
return False
targ_set.add(c_target)
if len(targ_set) >= X:
return True
def empirical_probability(n_games, t_list, k, X):
game_outcomes = [play_game(t_list, k, X) for ii in range(n_games)]
return sum(game_outcomes) / n_games
# Analytical approach
def elementary_symmetric_polynomial(m, t_set):
return sum(map(partial(reduce, mul), combinations(t_set, m)))
def analytical_probability(t_list, k, X):
t_k = t_list[k]
t_set = np.array(t_list)
t_set = t_set[[ii for ii in range(0, len(t_list)) if ii != k]]
# All subsets of size X not containing k
p_nk = elementary_symmetric_polynomial(X, t_set)
# All subsets of size X - 1 not containing k
p_k = t_k * elementary_symmetric_polynomial(X-1, t_set)
return p_nk / (p_k + p_nk)
if __name__ == "__main__":
n_games = 5000
# Randomly generate a game set
N = 6
t_list = np.random.random((N,))
t_list /= sum(t_list)
empirical = [['X = '] + [str(X) for X in range(2, N-1)]]
analytical = copy(empirical)
for k in range(0, len(t_list)):
ana_answers = ['k = {}'.format(k)]
emp_answers = ['k = {}'.format(k)]
for X in range(2, N-1):
ana_answers.append(round(analytical_probability(t_list, k, X), 3))
emp_answers.append(round(empirical_probability(n_games, t_list, k, X), 3))
empirical.append(emp_answers)
analytical.append(ana_answers)
print("Empirical answers:")
for row in empirical:
print('\t'.join(str(x) for x in row))
print("Analytical answers:")
for row in analytical:
print('\t'.join(str(x) for x in row))
La elección de $N = 6$ y ejecutar el juego 5000 veces, aquí es una carrera de los resultados:
p = [ 0.3305, 0.0350, 0.04995, 0.0831, 0.1503, 0.3509]
Empirical answers:
X = 2 3 4
k = 0 0.373 0.153 0.045
k = 1 0.916 0.833 0.721
k = 2 0.892 0.779 0.591
k = 3 0.813 0.642 0.407
k = 4 0.671 0.432 0.199
k = 5 0.348 0.141 0.041
Analytical answers:
X = 2 3 4
k = 0 0.397 0.218 0.108
k = 1 0.908 0.811 0.649
k = 2 0.871 0.741 0.542
k = 3 0.792 0.608 0.374
k = 4 0.652 0.416 0.225
k = 5 0.38 0.207 0.102
Creo que estas diferencias están dentro del ruido de la medición empírica. El algoritmo para la escuela primaria, el polinomio simétrico de cálculo de vino de esta pregunta.