7 votos

Enumeración de las particiones

El número de Stirling de segunda especie $S(n,k)$, donde

$S(n,k) = \frac{1}{k!}\sum\limits_{j=0}^k(-1)^{k-j}\left(\begin{array}{l}k\\j\end{array}\right)j^n$

Da el número de etiqueta única, desordenada particiones de $n$ elementos en $k$ particiones. Estoy interesado en la determinación de un procedimiento para la enumeración de todos estos particiones. Lo he tenido en mente es empezar con un vector

$v=\left[\begin{array}{l}i_1\\i_2\\{\vdots}\\i_n\end{array}\right]$

Y, a continuación, generar un conjunto de "partición de vectores", cada una con $n$ elementos, teniendo una forma (por $k=2$)$[x_1~x_2~\cdots~x_n]$, donde cada una de las $x_i$ es (después de algunos adecuado algoritmo elegido de $\left\{0~1\right\}$.

Yo no sé si esta pregunta era más apropiado para las Matemáticas o Stackoverflow, así que le pregunté aquí desde este sitio permite bastante formato de ecuaciones.

editar:

Gracias en parte a los comentarios de @Henry he hecho algunos progresos en los casos especiales en que $k=2$ y también para $k=3$ (donde $n$ no es divisible por $3$).

Para $k=2$, una alternativa a la primera ecuación es:

$\sum\limits_{i=1}^{[[\frac{n}{2}]]}\frac{1}{\eta\,!}\left(\begin{array}{c}n\\n-i\end{array}\right)$

donde $\eta$ es igual al número de particiones que tengan el mismo número de miembros.

Para implementar el $k=2$ caso para cualquier valor arbitrario de $n$, comenzar con un vector de $v_{\circ}$ de la longitud de la $n$ lleno de ceros, y otro vector, $v_\alpha$, con valores de $1,2,\cdots,n$, en ese orden. Generar el conjunto $A$ de las combinaciones posibles de $n-i$ elementos escogidos de $v_\alpha$. Los miembros de $A$ se utilizan para identificar los índices de los elementos de las sucesivas copias de $v_{\circ}$ cuyo valor debe ser cambiado.

En este punto, el número de vectores generados superará $S(n,2)$, debido a una partición como $[0~1~1~0]$, lo que equivale a $[1~0~0~1]$, se genera dos veces. En las soluciones que contienen dos particiones de igual tamaño, el redundante que puede ser llevado a cabo mediante la eliminación de todos los conjuntos donde $n-i = i$ que tienen un $0$ antes de cualquier $1$.

Para $k=3$, comience haciendo una lista de las $N$ posibles combinaciones de los tres tamaños de las particiones. Así, por $n=7$ hay:

$\begin{array}{lrrr} \phi_1&5&1&1\\ \phi_2&4&2&1\\ \phi_3&3&3&1\\ \phi_4&3&2&2\\ \end{array}$

El número total de posibles particiones:

$\frac{1}{2!}\a la izquierda(\begin{array}{c}7\\5\end{array}\right)\left(\begin{array}{c}2\\1\end{array}\right) + \left(\begin{array}{c}7\\4\end{array}\right)\left(\begin{array}{c}3\\2\end{array}\right)+ \frac{1}{2!}\a la izquierda(\begin{array}{c}7\\3\end{array}\right)\left(\begin{array}{c}4\\3\end{array}\right)+ \frac{1}{2!}\a la izquierda(\begin{array}{c}7\\3\end{array}\right)\left(\begin{array}{c}4\\2\end{array}\right)$

Para enumerar las particiones correspondientes a cada uno de estos términos, establecer un esquema general:

$\begin{array}{lrrr} \phi_i&a&b&c\end{array}$

para contribuir $\frac{1}{\eta\,!}\left(\begin{array}{c}n\\a\end{array}\right)\left(\begin{array}{c}b+c\\b\end{array}\right)$ posibles particiones. (Tenga en cuenta que esto podría ser simplificado a $\frac{1}{\eta\,!}\cdot\frac{n!}{a!b!c!}$, pero esto no iba a facilitar el procedimiento de cálculo.)

donde $a+b+c=n$. Empezar de nuevo con un vector de $v_\circ$ contiene $n$ ceros, y un vector $v_\alpha$ contiene $1,2,\cdots,n$. Como antes, generar el conjunto de combinaciones posibles de $a$ elementos escogidos de $v_\alpha$, y utilizar estos valores para especificar los índices en las sucesivas copias de $v_\circ$ cuyos valores deben cambiarse a 1.

Cada una de las copias de $v_\circ$ ahora contiene $a$ queridos y $b+c$ ceros.

En este punto, se requerirá el uso de una función de $W(v,j)$, que devuelve el índice relativo a la $j^{th}$ cero en el vector $v$. Ahora hacen un vector $v_\alpha^\prime$ contiene $1,2,\cdots,b+c$. Generar un conjunto $A^\prime$ de las combinaciones posibles de $b$ elementos escogidos de $v_\alpha^\prime$, y utilizar estos valores para especificar los valores de $j$ que son alimentados en $W$, que especifica los índices en copias de copias de $v_\circ$ cuyos valores deben cambiarse a $2$.

Para quitar redundante particiones, eliminar todas las copias de $v_\circ$ que contiene un $0$, que precede a todas las $2$'s, si $b=c$, y eliminar todas las copias de $v_\circ$ que contiene un $2$, que precede a todas las $1$'s, si $a=b$.

5voto

JiminyCricket Puntos 143

Un algoritmo para generar todas las particiones de elementos$n$ en$k$ sets se da en el Volumen 4A de The Knuth of Computer Programming (que aparentemente finalmente se publicó el año pasado, no lo sabía). La subsección está disponible en su sitio web como fascículo 3b ; el algoritmo está en la página$27$.

0voto

Su método para $k=2$ se producen demasiados, en primer lugar porque todos tienen el mismo valor ($2$ de los casos) y en segundo lugar porque cada partición se repite dos veces (intercambio de $0$s y $1$s). Así, mientras que usted produce, $2^n$ de los casos, en el hecho de $S(n,2)=\frac{2^n-2}{2}=2^{n-1}-1$.

Si usted simplemente estaban buscando para producir todas las particiones de su $n$ elementos se puede tomar el enfoque iterativo de generación de todas las particiones de la primera $n-1$ elementos y, a continuación, para cada partición de la adición de la $n$th elemento a una de las partes, o como un nuevo adicional de la parte. Así, en la práctica, se comienza con el primer elemento que debe estar en una nueva parte. A continuación, añadir el segundo elemento, ya sea para la primera parte o como una nueva parte. Y así sucesivamente.

Dado que se desea que todas las particiones de su $n$ elementos con exactamente $k$ partes, puede hacer caso omiso de cualquier partición de $n-j$ en el proceso iterativo, que tiene estrictamente menos de $k-j$ partes o más de $k$ partes.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X