
En informática y matemáticas , el problema de Josefo (o permutación de Josefo ) es un problema teórico relacionado con un determinado juego de contar . Estos juegos se utilizan para elegir a una persona de un grupo, por ejemplo, eeny, meeny, miny, moe .

En el particular juego de contar que da origen al problema de Josefo, varias personas están de pie formando un círculo esperando a ser ejecutadas. El conteo comienza en un punto específico del círculo y continúa alrededor del círculo en una dirección específica. Después de que se salta un número específico de personas, se ejecuta a la siguiente persona. El procedimiento se repite con las personas restantes, comenzando con la siguiente persona, yendo en la misma dirección y saltando la misma cantidad de personas, hasta que solo quede una persona y sea liberada.
El problema, dado el número de personas, el punto de partida, la dirección y el número a saltar, es elegir la posición en el círculo inicial para evitar la ejecución.
Historia
El problema recibe su nombre de Flavio Josefo , un historiador y líder judío que vivió en el siglo I. Según el relato de primera mano de Josefo sobre el asedio de Yodfat , él y sus 40 soldados fueron atrapados en una cueva por soldados romanos . Eligieron el suicidio en lugar de ser capturados y decidieron un método serial de cometer suicidio por sorteo. Josefo afirma que por suerte o posiblemente por la mano de Dios, él y otro hombre permanecieron hasta el final y se rindieron a los romanos en lugar de suicidarse. Esta es la historia que se cuenta en el Libro 3, Capítulo 8, parte 7 de La guerra judía de Josefo ( escribiendo sobre sí mismo en tercera persona ):
Pero en esta situación extrema no perdió su sagacidad habitual, sino que, confiando en la providencia de Dios, arriesgó su vida de la siguiente manera: «Y ahora -dijo-, ya que entre vosotros está decidido que vais a morir, vamos a poner nuestra muerte mutua a suerte. Aquel a quien le caiga primero, que muera el que le caiga después, y así la fortuna hará su progreso entre todos nosotros; y ninguno de nosotros morirá por su propia mano derecha, porque sería injusto que, cuando los demás hayan muerto, alguien se arrepienta y se salve». Esta propuesta les pareció muy justa, y cuando los convenció de que se decidiera por suertes, sacó una de las suertes para él también. El que había caído primero puso su cuello desnudo ante el que había caído después, suponiendo que el general moriría entre ellos inmediatamente, pues pensaban que la muerte, si Josefo podía morir con ellos, era más dulce que la vida. Sin embargo, quedó con otro hasta el final, ya sea que haya sucedido por casualidad o por la providencia de Dios. Y como no deseaba que la suerte lo condenara ni, si hubiera quedado hasta el final, manchar su mano derecha con la sangre de sus compatriotas, lo persuadió a que le confiara su fidelidad y viviera tan bien como él.
— Josefo sf, p. 579, Guerras de los judíos, Libro III, Cap. 8, párrafo 7
Los detalles del mecanismo utilizado en esta hazaña son bastante vagos. Según James Dowdy y Michael Mays, [2] en 1612 Claude Gaspard Bachet de Méziriac sugirió el mecanismo específico de organizar a los hombres en un círculo y contar de tres en tres para determinar el orden de eliminación. [3] Esta historia se ha repetido a menudo y los detalles específicos varían considerablemente de una fuente a otra. Por ejemplo, Israel Nathan Herstein e Irving Kaplansky (1974) hacen que Josefo y 39 compañeros se coloquen en un círculo y que cada séptimo hombre sea eliminado. [4] Se puede encontrar una historia del problema en la Carta de SL Zabell al editor de Fibonacci Quarterly . [5]
En cuanto a la intencionalidad, Josefo preguntó: “¿Debemos atribuirlo a la divina providencia o simplemente a la suerte?” [6] Pero el manuscrito eslavo superviviente de Josefo cuenta una historia diferente: que “contó los números astutamente y así logró engañar a todos los demás”. [6] [7] Josefo tenía un cómplice; el problema era entonces encontrar los lugares de los dos últimos supervivientes restantes (cuya conspiración aseguraría su supervivencia). Se alega que se colocó a sí mismo y al otro hombre en el puesto 31 y 16 respectivamente (para k = 3 a continuación). [8]
Variantes y generalizaciones

Una versión medieval del problema de Josefo involucra a 15 turcos y 15 cristianos a bordo de un barco en medio de una tormenta que se hundirá a menos que la mitad de los pasajeros sean arrojados por la borda. Los 30 se colocan en un círculo y cada novena persona debe ser arrojada al mar. Los cristianos deben determinar dónde pararse para asegurarse de que solo los turcos sean arrojados. [9] En otras versiones, los roles de turcos y cristianos se intercambian.
Graham, Knuth y Patashnik 1989, p. 8 describen y estudian una variante "estándar": determinar dónde se encuentra el último sobreviviente si hay n personas para comenzar y cada segunda persona ( k = 2 a continuación) es eliminada.
Una generalización de este problema es la siguiente. Se supone que cada m ésima persona será ejecutada de un grupo de tamaño n , en el que la p ésima persona es la sobreviviente. Si hay una adición de x personas al círculo, entonces la sobreviviente está en la p + mx -ésima posición si esta es menor o igual a n + x . Si x es el valor más pequeño para el cual p + mx > n + x , entonces la sobreviviente está en la posición ( p + mx ) − ( n + x ) . [10]
Solución
En lo sucesivo, denota el número de personas en el círculo inicial y denota el recuento para cada paso, es decir, se omiten personas y se ejecuta el -ésimo. Las personas en el círculo están numeradas de a , siendo la posición inicial y siendo el recuento inclusive .
a= 2
El problema se resuelve explícitamente cuando una de cada dos personas muere (cada persona mata a la persona de su izquierda o derecha), es decir . (Para el caso más general , se describe una solución a continuación). La solución se expresa de forma recursiva . Sea n la posición del superviviente cuando inicialmente hay n personas (y ). La primera vez que se da la vuelta al círculo, mueren todas las personas pares . La segunda vez que se da la vuelta al círculo, muere la nueva segunda persona, luego la nueva cuarta persona, etc.; es como si no hubiera una primera vuelta al círculo.
Si el número inicial de personas fuera par, entonces la persona en la posición x durante la segunda vuelta alrededor del círculo estaba originalmente en la posición (para cada elección de x ). Sea . La persona que ahora sobrevivirá estaba originalmente en la posición . Esto da como resultado la recurrencia
Si el número inicial de personas era impar , entonces se puede pensar que la persona 1 muere al final de la primera vuelta al círculo. Nuevamente, durante la segunda vuelta al círculo, muere la nueva 2.ª persona, luego la nueva 4.ª persona, etc. En este caso, la persona en la posición x estaba originalmente en la posición . Esto produce la recurrencia
Cuando se tabulan los valores y surge un patrón ( OEIS : A006257 , también la columna más a la izquierda de números azules en la figura anterior):
Esto sugiere que es una secuencia impar creciente que se reinicia con siempre que el índice n sea una potencia de 2. Por lo tanto, si se eligen m y l de modo que y , entonces . Está claro que los valores de la tabla satisfacen esta ecuación. O se puede pensar que después de que mueren l personas solo hay personas y se llega a la st persona. Esta persona debe ser la sobreviviente. Entonces . A continuación, se da una prueba por inducción .
Teorema: Si y , entonces .
Demostración: Se utiliza la inducción fuerte en n . El caso base es verdadero. Los casos se consideran por separado cuando n es par y cuando n es impar.
Si n es par, entonces elija y tales que y . Nótese que . se tiene donde la segunda igualdad se sigue de la hipótesis de inducción.
Si n es impar, entonces elija y de manera que y . Nótese que . se cumple donde la segunda igualdad se sigue de la hipótesis de inducción. Esto completa la prueba.
Se puede resolver para obtener una expresión explícita para :
La forma más elegante de la respuesta implica la representación binaria del tamaño n : se puede obtener mediante un desplazamiento cíclico de un bit hacia la izquierda del propio n . Si n se representa en binario como , entonces la solución viene dada por . La prueba de esto se desprende de la representación de n como o de la expresión anterior para .
Implementación: Si n denota el número de personas, la posición segura está dada por la función , donde y .
Ahora bien, si el número se representa en formato binario, el primer bit denota y los bits restantes denotarán l . Por ejemplo, cuando , su representación binaria es:
n = 1 0 1 0 0 1 2m = 1 0 0 0 0 0 l = 0 1 0 0 1
/**
* @param n el número de personas que se encuentran en el círculo
* @return la posición segura que sobrevivirá a la ejecución
* f(N) = 2L + 1 donde N =2^M + L y 0 <= L < 2^M
*/
public int getSafePosition ( int n ) { // encuentra el valor de L para la ecuación int valueOfL = n - Integer . lowestOneBit ( n ); return 2 * valueOfL + 1 ; }
Bit a bit
La forma más sencilla de encontrar la posición segura es mediante el uso de operadores bit a bit . En este enfoque, desplazar el bit más significativo del conjunto n al bit menos significativo devolverá la posición segura. [11] La entrada debe ser un entero positivo .
n = 1 0 1 0 0 1 n = 0 1 0 0 1 1
/**
* @param n (41) el número de personas que se encuentran en el círculo
* @return la posición segura que sobrevivirá a la ejecución
*/
public int getSafePosition ( int n ) { return ~ Integer . lowestOneBit ( n * 2 ) & (( n << 1 ) | 1 ); // ---------------------- --- | ------------ // Obtener el primer bit del conjunto | | Desplazar n a la izquierda y voltear el último bit // y tomar su complemento | | // | | // Multiplicar n por 2 | // Bit a bit Y copiar bits existe en ambos operandos. }
a= 3
En 1997, Lorenz Halbeisen y Norbert Hungerbühler descubrieron una forma cerrada para el caso . Demostraron que existe una cierta constante
que se puede calcular con precisión arbitraria. Dada esta constante, elija m como el mayor entero tal que (esto será o ) . Entonces, el sobreviviente final es
- Si se redondea hacia arriba, de lo contrario
Para todos .
Como ejemplo de cálculo, Halbeisen y Hungerbühler dan (que en realidad es la formulación original del problema de Josefo): calculan:
- y por lo tanto
- (tenga en cuenta que este valor se ha redondeado hacia abajo)
Esto se puede verificar mirando cada pasada sucesiva de los números.1 a través de41 :
- 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41
- 2, 4, 7, 8, 11, 13, 16, 17, 20, 22, 25, 26, 29, 31, 34, 35, 38, 40
- 2, 4, 8, 11, 16, 17, 22, 25, 29, 31, 35, 38
- 2, 4, 11, 16, 22, 25, 31, 35
- 2, 4, 16, 22, 31, 35
- 4, 16, 31, 35
- 16, 31
- 31
El caso general
En el caso general, se utiliza programación dinámica para resolver este problema, realizando el primer paso y luego utilizando la solución del problema restante. Cuando el índice comienza en uno, entonces la persona en se desplaza desde la primera persona que está en la posición , donde n es el número total de personas. Sea la posición del sobreviviente. Después de que muere la -ésima persona, queda un círculo de y el siguiente conteo comienza con la persona cuyo número en el problema original era . La posición del sobreviviente en el círculo restante sería si el conteo comienza en ; desplazar esto para tener en cuenta el hecho de que el punto de inicio es produce la recurrencia [12]
que toma la forma más simple
si las posiciones están numeradas de a en su lugar.
Este enfoque tiene tiempo de ejecución , pero para los pequeños y grandes hay otro enfoque. El segundo enfoque también utiliza programación dinámica, pero tiene tiempo de ejecución . Se basa en considerar matar a las k -ésimas, 2 k -ésimas, ..., -ésimas personas como un solo paso, y luego cambiar la numeración. [ cita requerida ]
Este enfoque mejorado toma la forma
Referencias
Citas
- ^ R.Ugalde, Laurence. "El problema de Josefo en el lenguaje de programación Fōrmulæ". Fōrmulæ . Consultado el 26 de julio de 2021 .
- ^ Dowdy y Mays 1989, pág. 125.
- ^ Bachet 1612, pág. 174.
- ^ Herstein y Kaplansky 1974, págs. 121-126.
- ^ Zabell 1976, págs. 48, 51.
- ^ ab Cohen, Richard. Haciendo historia: los narradores que dieron forma al pasado , pág. 54 (Simon & Schuster 2022).
- ^ https://gustavus.edu/mcs/max/concrete-abstractions-pdfs/chapter3.pdf [ URL básica PDF ]
- ^ Rouse Ball 1905, pág. 19.
- ^ Newman 1988, págs. 2403–2405.
- ^ Robinson 1960, págs. 47–52.
- ^ "Problema de Josefo usando operaciones bit a bit (Java)". GitHub . 7 de enero de 2018 . Consultado el 7 de enero de 2018 .
- ^ Parque y Teixeira 2018, págs. 1–7.
Fuentes
- Bachet, CG (1612). Problemes Plaisants ed Delectables qui se font par les Nombres (en francés).
- Graham, RL; Knuth, DE ; Patashnik, O. (1989). Matemáticas concretas: una base para la informática . Addison Wesley. ISBN 978-0-201-14236-5.
- Herstein, IN; Kaplansky, I. (1974). Matemáticas . Harper and Row. ISBN 9780060428037.
- Josefo, Flavio (sf). Las obras de Flavio Josefo: en tres volúmenes; con ilustraciones. Traducido por William Whiston. Londres: George Routledge & Sons.
- Newman, JR (1988). El mundo de las matemáticas . Vol. 4. Tempus.
- Park, Jang-Woo; Teixeira, Ricardo (2018). "Problema de Josefo de ejecución serial". Korean J. Math . 26 (1): 1–7. doi :10.11568/kjm.2018.26.1.1.
- Robinson, WJ (1960). "El problema de Josefo". Math. Gaz . 44 (347): 47–52. doi :10.2307/3608532. JSTOR 3608532. S2CID 125735054.
- Rouse Ball, WW (1905). Recreaciones y ensayos matemáticos (2.ª ed.). Londres: Macmillan.
- Zabell, SL (1976). "Carta al editor" (PDF) . Fibonacci Quarterly . 14 : 48–51.
Lectura adicional
- Cormen, Thomas H. ; Leiserson, Charles E. ; Rivest, Ronald L. ; Stein, Clifford (2001). "Capítulo 14: Ampliación de estructuras de datos". Introducción a los algoritmos (segunda edición). MIT Press y McGraw-Hill. pág. 318. ISBN 0-262-03293-7.
- Dowdy, James; Mays, Michael E. (1989). "Permutaciones de Josefo". Revista de Matemática Combinatoria y Computación Combinatoria . 6 : 125–130.
- Halbeisen, L.; Hungerbühler, N. (1997). "El problema de Josefo". J. Théor. Nombres Burdeos . 9 (2): 303–318. doi : 10.5802/jtnb.204 .
- Jakóbczyk, F. (1973). "Sobre el problema generalizado de Josefo". Glasow Math. J . 14 (2): 168–173. doi : 10.1017/S0017089500001919 . S2CID 122980022.
- Lloyd, Errol L. (1983). "Un algoritmo O(n logm) para el problema de Josefo". J. Algor . 4 (3): 262–270. doi :10.1016/0196-6774(83)90025-1.
- Odlyzko, Andrew M.; Wilf, Herbert S. (1991). "Iteración funcional y el problema de Josefo". Glasgow Math. J. 33 ( 2): 235–240. doi : 10.1017/S0017089500008272 . S2CID : 123160551.
- Ruskey, Frank; Williams, Aaron (2010). "El problema de Josefo felino". Lect. Not. Comp. Sci . Lecture Notes in Computer Science. Vol. 6099. págs. 343–354. Bibcode :2010LNCS.6099..343R. doi :10.1007/978-3-642-13122-6_33. ISBN 978-3-642-13121-9.DIVERSIÓN2010
- Ruskey, Frank; Williams, Aaron (2012). "El problema felino de Josefo". Theory Comput. Syst . 50 : 20–34. CiteSeerX 10.1.1.157.2956 . doi :10.1007/s00224-011-9343-6. S2CID 2273820.
- Sullivan, Shaun; Insko, Erik (2018). "Una variante del problema del felino Josefo". arXiv : 1803.11340 [matemáticas.CO].
- Theriault, Nicolas (2001). "Generalizaciones del problema de Josefo". Util. Math. (58): 161–173. CiteSeerX 10.1.1.164.2015 .
- Woodhouse, David (1973). "El problema extendido de Josefo". Rev. Mat. Hisp.-Amer . 33 (4): 207–218.
Enlaces externos
- Juego de Flavio Josefo (Applet de Java) en cut-the-knot que permite la selección de cada n- ésimo de 50 (máximo).
- Weisstein, Eric W. "El problema de Josefo". MundoMatemático .
- El problema de Josefo - Numberphile en YouTube
- Problema generalizado de Josefo