Citation :
Ceux qui ne voient que 7 malades, savent que si personne n'est partie le 6 ème jours, alors c'est qu'ils sont malades
Tu dis ça comme si c'était évident, je ne vois pas pourquoi. Selon moi il existe un algorithme bien précis qui permet aux moines malades de tous partir le plus vite possible.
Dans un premier temps les moines doivent déterminer un nombre
maximum de malades sur lequel ils savent qu'ils peuvent tous retomber. Ce nombre dépend de l'énoncé du problème : si le chef de l'ordre dit qu'il y a "au moins un malade", alors ce nombre est 1. En fait, si le chef de l'ordre dit qu'il y a "au moins X malades", alors ce nombre est X. On va donc appeler X ce nombre dans la suite de l'algorithme.
Le nombre ne peut pas être plus grand que X car un moine ne sait pas s'il est malade, et n'a aucun autre point de référence qui lui permettrait de trouver un nombre plus élevé. En effet, même s'il y a 25 malades, certains sauront qu'il y a au moins 24 malades dans le lot, alors que d'autres sauront qu'il y a au moins 25 malades. Or ils ne peuvent pas communiquer, donc ils ne peuvent pas se mettre d'accord sur un nombre commun à partir de cette information.
Ensuite, chacun des moines doit appliquer la séquence suivante :
- S'il y a eu des départs, alors je ne suis pas malade et tous les moines malades sont partis.
- Si je vois X-1 malades, alors je suis malade et je pars dès que possible.
- Sinon j'incrémente X de 1 et j'attends le jour suivant pour appliquer à nouveau la même séquence.
De cette manière, si les moines utilisent tous le même algorithme, ils assurent un départ des malades le plus rapide possible. La formule issue de cet algorithme qui permet de déduire le nombre de malades N en fonction du nombre de jours passés J est :
N = X+J
(selon la formulation du problème on peut comprendre que les malades ne peuvent partir qu'à J=1 et pas J=0, dans ce cas la formule est N = X+J+1).
Quelques exemples :
- Le chef de l'ordre dit "certains d'entre vous sont malades". Donc X=2. Si J=7 alors N=9. C'est l'exemple proposé sur ce thread.
- Le chef de l'ordre dit "il y a au moins 1 malade". Alors X=1. Si J=7 alors N=8.
On peut également raisonner à l'envers et déduire le nombre de jours que vont mettre les malades à partir, en fonction de X et de N (J = N-X) :
- Si le chef de l'ordre dit "il y a au moins 1 malade" alors qu'il y a 8 malades, alors J = 8-1 = 7. Il vont mettre 7 jours à partir.
- Si le chef de l'ordre dit "il y a 8 malades" alors qu'il y a 8 malades, alors J = 0. C'est logique : le chef ayant donné le nombre précis de malades, alors les moines peuvent tous déduire instantanément s'ils sont malades ou non.
Au final la difficulté pour les moines, c'est de déterminer l'algorithme qui va être appliqué par les autres. L'avantage de cet algorithme est qu'il est optimal (celui de tatanka est plus lent, dans mon dernier exemple il ferait partir les moines en 7 jours, puisque les moines ne tiennent pas compte de l'information donnée par le chef sur le nombre de malades), donc il s'agit bien d'une référence "prédictible" pour tous.