Otra respuesta incompleta. Supongo que el número de participantes es grande, por lo que podemos dividirlos continuamente en grupos. Con este método he podido calcular p(n) para n hasta 6.
Si tenemos n idiomas, entonces podemos dividir a la gente en 2^n grupos. Cada grupo habla o no habla determinadas lenguas.
Podemos nombrar las lenguas 0 a n-1 y nombrar los grupos 0 a 2^n-1 . Grupo i habla el idioma j si el bit 2^j se establece en la notación binaria de i . Por ejemplo, si n=4 grupo 3 = 0011_2 habla las lenguas 0 y 1, pero no las 2 y 3.
Que las variables a_0 hasta a_{2^n-1} indican el tamaño de los grupos. Se aplican las siguientes restricciones:
- a_0 = 0
- \displaystyle \forall_i \ \ a_i \ge 0
- \displaystyle \sum_{i=0}^{2^n-1} a_i = 1
- Para grupos i y j : \quad\displaystyle i\ \&\ j = 0\ \ \implies\ \ a_i = 0\ \vee\ a_j = 0
Dónde \& es el bit a bit y .
Podemos simplificar un poco el problema. Para n>2 podemos suponer que:
- Nadie habla una sola lengua, así que a_i=0 cuando i es una potencia de 2 .
- Si alguien habla sólo dos lenguas, sin pérdida de generalidad podemos suponer que se tratará de lenguas 0 y 1 . Así pues, para todos los grupos i que sólo puede hablar dos idiomas, y ninguno de ellos es 0 ou 1 tenemos a_i = 0 .
Tenemos que calcular:
\min_{\displaystyle a_i}\ \max\ \left\{\sum \{a_i\ |\ i\ \&\ 2^j \neq 0\} \ \ \middle|\ \ j=0,1,\dots n-1\right\} Podemos introducir las fórmulas en Mathematica y utilizar la función Minimizar para encontrar el mínimo de cada una. n y obtener los valores correspondientes a_i . Esto puede utilizarse para buscar patrones que también puedan aplicarse a las categorías superiores. n . El siguiente código funciona para n \ge 2 :
solve[n_] := Module[{vari, or, max},
vari = Select[Range[0, 2^n - 1], Total[IntegerDigits[#, 2]] > 1 && (Total[IntegerDigits[#, 2]] > 2 || BitAnd[#, 3] != 0)&];
or = Or @@ (a[#] == 0 & /@ #) & /@ Select[Tuples[vari, 2], Less @@ # && BitAnd @@ # == 0 &];
max = Table[(Select[vari, BitGet[#, i] == 1 &] // a // Thread // Total) <= x, {i, 0, n - 1}];
Minimize[{x, a[#] >= 0 & /@ vari, Total[a /@ vari] == 1, or, max}, Join[a /@ vari, {x}]]
];
Abajo los resultados. Tenga en cuenta que estas soluciones probablemente no son únicas. \begin{array}{|c|c|c|} \hline n & p(n) & a_i \\ \hline 1 & 1 & \begin{array}{c|c} 0 & a_i \\ \hline 1 & 1 \\ \end{array} \\ \hline 2 & 1 & \begin{array}{cc|c} 0 & 1 & a_i \\ \hline 1 & 1 & 1 \\ \end{array} \\ \hline 3 & 2/3 & \begin{array}{ccc|c} 0 & 1 & 2 & a_i \\ \hline 0 & 1 & 1 & 1/3 \\ 1 & 0 & 1 & 1/3 \\ 1 & 1 & 0 & 1/3 \\ \end{array} \\ \hline 4 & 3/5 & \begin{array}{cccc|c} 0 & 1 & 2 & 3 & a_i \\ \hline 0 & 0 & 1 & 1 & 1/5 \\ 0 & 1 & 1 & 0 & 1/5 \\ 1 & 0 & 1 & 0 & 1/5 \\ 1 & 1 & 0 & 1 & 2/5 \\ \end{array} \\ \hline 5 & 5/9 & \begin{array}{ccccc|c} 0 & 1 & 2 & 3 & 4 & a_i \\ \hline 0 & 0 & 1 & 1 & 1 & 2/9 \\ 0 & 1 & 0 & 1 & 1 & 2/9 \\ 1 & 0 & 0 & 0 & 1 & 1/9 \\ 1 & 0 & 0 & 1 & 0 & 1/9 \\ 1 & 1 & 1 & 0 & 0 & 1/3 \\ \end{array} \\ \hline 6 & 1/2 & \begin{array}{cccccc|c} 0 & 1 & 2 & 3 & 4 & 5 & a_i \\ \hline 0 & 1 & 0 & 1 & 1 & 0 & 1/4 \\ 0 & 1 & 1 & 0 & 0 & 1 & 1/4 \\ 1 & 0 & 0 & 0 & 1 & 1 & 1/4 \\ 1 & 0 & 1 & 1 & 0 & 0 & 1/4 \\ \end{array} \\ \hline \end{array} Desgraciadamente, el tiempo de cálculo aumenta muy rápidamente, por lo que no es factible calcularlo para n \ge 7 . A menos que podamos añadir más restricciones sobre algunos a_i en 0 .
Debido a la respuesta de Misha, la salida para n = 7 sería algo así: \begin{array}{|c|c|c|} \hline n & p(n) & a_i \\ \hline 7 & 3/7 & \begin{array}{ccccccc|c} 0 & 1 & 2 & 3 & 4 & 5 & 6 & a_i \\ \hline 0 & 0 & 1 & 0 & 1 & 1 & 0 & 1/7 \\ 0 & 0 & 1 & 1 & 0 & 0 & 1 & 1/7 \\ 0 & 1 & 0 & 0 & 0 & 1 & 1 & 1/7 \\ 0 & 1 & 0 & 1 & 1 & 0 & 0 & 1/7 \\ 1 & 0 & 0 & 0 & 1 & 0 & 1 & 1/7 \\ 1 & 0 & 0 & 1 & 0 & 1 & 0 & 1/7 \\ 1 & 1 & 1 & 0 & 0 & 0 & 0 & 1/7 \\ \end{array} \\ \hline \end{array}
1 votos
Tengo 1, 1, \frac23, \frac35, \frac59, \frac12 . El algoritmo que he utilizado es demasiado lento para altas n . Veré si puedo mejorarlo.
0 votos
¿Lo estás forzando?
1 votos
Para cada n Genero una expresión a minimizar y un conjunto de restricciones. Luego dejo que la función Minimizar de Mathematica lo resuelva.
0 votos
Si sirve de algo, para obtener una proporción mínima, nadie puede hablar una sola lengua.