Un número de Bell ( OEIS A000110 ) es el número de formas de particionar un conjunto de n elementos etiquetados (distintos). El número de 0th Bell se define como 1.
Veamos algunos ejemplos (uso corchetes para denotar los subconjuntos y llaves de las particiones):
1: {1}
2: {[1,2]}, {[1],[2]}
3: {[1,2,3]}, {[1,2],[3]}, {[1,3],[2]}, {[2,3],[1]}, {[1],[2],[3]}
Hay muchas formas de calcular los números de Bell, y usted es libre de usar cualquiera de ellos. Aquí se describirá una forma:
La forma más fácil de calcular los números de Bell es usar un triángulo numérico que se asemeje al triángulo de Pascal para los coeficientes binomiales. Los números de la campana aparecen en los bordes del triángulo. Comenzando con 1, cada nueva fila en el triángulo se construye tomando la última entrada de la fila anterior como la primera entrada y luego configurando cada nueva entrada a su vecino izquierdo más su vecino superior izquierdo:
1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
Puede usar 0-indexing o 1-indexing. Si usa la indexación 0, 3
debería producirse una entrada de 5
, pero debería salir 2
si usa la indexación 1.
Su programa debe funcionar hasta el número 15 de la campana, con salida 1382958545
. En teoría, su programa debería poder manejar números más grandes (en otras palabras, no codifique las soluciones).
EDITAR: No es necesario que maneje una entrada de 0 (para indexación 0) o 1 (para indexación 1) porque no se calcula mediante el método del triángulo.
Casos de prueba (suponiendo 0-indexación):
0 -> 1 (OPTIONAL)
1 -> 1
2 -> 2
3 -> 5
4 -> 15
5 -> 52
6 -> 203
7 -> 877
8 -> 4140
9 -> 21147
10 -> 115975
11 -> 678570
12 -> 4213597
13 -> 27644437
14 -> 190899322
15 -> 1382958545
Las respuestas que usen un método incorporado (como BellB [n] en Wolfram Language) que produce directamente números de Bell no serán competitivas.
El código más corto (en bytes) gana.
3
debería salir 2
. Entonces, ¿qué daría input 1
con 1-indexing?
3
salida debe5
Sería ouput15
, ¿verdad? Y con la indexación 1 produciría5