Problème de Josèphe

De testwiki
Aller à la navigation Aller à la recherche
Buste du premier siècle, probablement de Flavius Josèphe, conservé à Ny Carlsberg.

En mathématiques et en informatique, le problème de (Flavius) Josèphe ou problème de Caligula[1] est un problème d'élimination, conduisant à l'obtention d'un unique survivant.

Il a été énoncé sous différentes formes, mais sa première formulation est due à Flavius Josèphe[2].

Problème originel

Quarante et un soldats juifs (dont Flavius Josèphe), cernés par des soldats romains, décident de se suicider. Ils se mettent en cercle, et un premier soldat est choisi au hasard pour être exécuté ; puis le troisième à partir de sa gauche (ou droite) est exécuté. Tant qu'il y a des soldats, la sélection continue de la même façon. Le but est de trouver à quelle place doit se tenir un soldat pour être le dernier. Josèphe, peu enthousiaste à l'idée de mourir, parvint à trouver cette place. Quelle est-elle[3]Modèle:,[4]Modèle:,[5] ?

L'histoire se serait déroulée lors du siège de Jotapata par Vespasien, en Modèle:Ap JCModèle:Sfn.

Problème général

Les soldats sont au nombre de Modèle:Mvar, numérotés de 1 à Modèle:Mvar ; les premiers soldats éliminés sont ceux dont le numéro est multiple d'un entier k2 (k=3 dans le problème originel) ; après un tour, les éliminations de Modèle:Mvar en Modèle:Mvar des soldats restants se poursuivent jusqu'à ce qu'il n'en reste qu'un. On demande le numéro Jk(n) de ce soldat[6]Modèle:,[7]Modèle:,[8].

Voici par exemple, pour n=10,k=3, les différents ordres d'élimination des soldats :

i 1 2 3 4 5 6 7 8 9 10
Ordre d'élimination 6 4 1 10 8 2 5 7 3 9

Donc J3(10)=4.

Il est remarquable que le calcul de Jk(n) se programme très facilement, mais qu'on ne connait de formule simple que pour k=2Modèle:Sfn.

Pour le problème originel, on obtient J3(41)=31 qui est donc la place prise par Flavius Josèphe.

Voir les suites Modèle:OEIS2C, Modèle:OEIS2C, Modèle:OEIS2C, Modèle:OEIS2C donnant les valeurs de Jk(n) pour k=2,3,4,5.

Solution dans le cas où k = 2

Lors du premier tour complet, tous les soldats aux positions paires sont exécutés. Au deuxième tour, le nouveau Modèle:2e est exécuté, puis le nouveau Modèle:4e, etc.

Si le nombre initial de personnes est pair, alors le soldat à la position Modèle:Mvar au Modèle:2e est à la position Modèle:Math au Modèle:1er (peu importe la valeur de Modèle:Mvar). Donc, la personne à la position J2(n) était auparavant à la position 2J2(n)1 . Cela nous permet de trouver la Modèle:1re de récurrence :

J2(2n)=2J2(n)1.

Si le nombre initial de soldats est impair, il vaut mieux voir le soldat à la position 1 comme exécuté à la fin du Modèle:1er. Pendant le Modèle:2e, le soldat à la Modèle:2e est exécuté, puis le Modèle:4e, etc. Dans ce cas, le soldat à la position Modèle:Mvar était auparavant à la position Modèle:Math. Cela nous permet de trouver la Modèle:2e de récurrence :

J2(2n+1)=2J2(n)+1.

On peut réunir les deux formules en : J2(n)=2J2(n/2)(1)n, avec J2(1)=1.

Les valeurs tabulées de Modèle:Mvar et J2(n) font apparaître un schéma :

n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
J2(n) 1 1 3 1 3 5 7 1 3 5 7 9 11 13 15 1

Les J2(n) forment une suite de valeurs impaires croissantes qui recommence à 1 lorsque Modèle:Mvar est une puissance de 2.

Si nous choisissons Modèle:Mvar et Modèle:Mvar de façon que Modèle:Math et Modèle:Math, alors J2(n)=2l+1. Les valeurs de la table respectent cette relation. De même, après Modèle:Mvar exécutés, il ne reste que Modèle:Math soldats et nous allons au Modèle:MathModèle:E soldat. Il est le survivant. Donc J2(n)=2l+1.

Modèle:Théorème

Modèle:Démonstration

On peut écrire ce résultat sous la forme close : J2(n)=2n+12log2(n)+1.

Cas général

En numérotant les positions de 0 à Modèle:Math, on a la formule de récurrence permettant d'obtenir Jk(n)  :

Jk(n)=(Jk(n1)+k)modn avec Jk(1)=0

Elle apparaît lorsque nous observons comment le nombre de survivants change en passant de Modèle:Math à Modèle:Mvar.

Avec une programmation dynamique, elle a un temps d'exécution asymptotique en O(n).

Pour de petites valeurs de Modèle:Mvar et de grandes valeurs de Modèle:Mvar, il existe une autre approche qui a aussi recours aux principes de la programmation dynamique, mais a un temps d'exécution asymptotique de O(klogn). Elle s'appuie sur l'idée de tuer le Modèle:MvarModèle:E, 2Modèle:MvarModèle:E..., n/kModèle:E soldat d'un seul coup, puis de changer la numérotation Modèle:Référence souhaitée.

Crible de (Flavius) Josèphe

Stanislas Ulam a inventé avec d'autres mathématiciens, dans les années cinquante, un crible, ressemblant au crible d’Ératosthène, consistant en une élimination dans l'ensemble de tous les entiers naturels non nuls, avec des passages successifs d'éliminations de Modèle:Mvar en Modèle:Mvar, où Modèle:Mvar est la valeur d'un entier non éliminé déterminé. Pour cette raison, il a baptisé ce crible "crible de Flavius Josèphe"[9]Modèle:,[10].

Description du crible

Dans la liste des entiers naturels non nuls, on barre un nombre sur 2 en commençant par barrer le deuxième :

Puis dans la liste restante, on barre un nombre sur 3 en commençant par barrer le troisième.

Puis on barre un nombre sur 4, un nombre sur 5, etc. Et ceci à l'infini, ce qui donne la liste : 1, 3, 7, 13, 19, 27, 39, 49, 63, 79,...

Elle est répertoriée comme Modèle:OEIS.

Ce qui est remarquable est que le Modèle:Mvar-ième nombre restant est équivalent à πn24 et que le nombre de nombres restants inférieurs à Modèle:Mvar équivaut à 2nπ[10].

Autres cribles similaires

Un autre crible imaginé par Ulam et ses compères[9], semblable mais donnant des résultats différents, est celui dont les survivants sont les nombres chanceux.

Un troisième crible du même type est celui dit de Tchoukaillon, voir la Modèle:OEIS, et un quatrième est celui donnant les nombres pseudo-chanceux, voir la Modèle:OEIS.

Notes et références

Modèle:Traduction/référence Modèle:Références

Voir aussi

Liens externes

Bibliographie

Modèle:Cormen2en, chap. 14 (« Augmenting Data Structures »), p. 318

Modèle:Portail