Problema di Giuseppe

Interpretazione di Claude-Gaspard Bachet de Méziriac del Problema di Giuseppe con 41 soldati () e un'uccisione ogni 3 soldati (). La progressione temporale avviene lungo la spirale e i punti verdi indicano i soldati ancora in vita, i punti grigi i soldati morti e le croci rosse le uccisioni. L'immagine mostra che i soldati nelle postazioni 16 e 31 sono gli ultimi a rimanere in vita. Se la progressione continuasse (16-31-16) rimarrebbe in vita solo il soldato nella postazione 31.

Il problema di Giuseppe o la permutazione di Giuseppe è un problema di matematica collegato a un episodio autobiografico raccontato dallo storico ebreo Flavio Giuseppe nella sua opera Guerra giudaica (composta tra il 93 e il 94 d.C.). Nelle discipline contemporanee, il problema si inserisce nell'ambito degli algoritmi e delle strutture dati che gestiscono le conte nell'informatica teorica.[1]

Il problema presenta persone disposte in circolo in attesa di un'esecuzione. Scelta una persona iniziale e un senso di rotazione, si saltano persone, raggiungendo così la -esima persona, che viene giustiziata ed eliminata dal cerchio; di nuovo si saltano persone e si giustizia la successiva -esima persona. Le esecuzioni proseguono e il cerchio si restringe sempre più, finché, conteggiando eventualmente più di una volta i singoli individui nel corso dei giri, la conta si riduce a una sola persona, la quale viene graziata. Dati e , si chiede di determinare la posizione iniziale del sopravvissuto all'interno del cerchio.

Il problema prende il nome da Flavio Giuseppe, storico ebreo vissuto nel I secolo. Secondo il suo resoconto dell'assedio di Iotapata, lui e i suoi 40 soldati furono intrappolati in una grotta dalle legioni romane. Essi decisero di suicidarsi piuttosto che venire catturati e impostarono un metodo seriale per commettere un omicidio-suicidio per estrazione a sorte.[2]

Problema di Giuseppe, rappresentazione grafica con valori e
Variante con e

Soluzione

Penultimi (rosa) e ultimi (blu) sopravvissuti nel problema di Giuseppe per gruppi di dimensione con salti di dimensione . Allargando l'immagine e passando sopra con il cursore ai valori ottenuti è possibile vedere la sequenza completa delle eliminazioni per ogni coppia di e .

Nella trattazione matematica classica, indica il numero di persone nel cerchio iniziale e indica il "salto" per ogni passaggio, ossia persone vengono saltate e la successiva viene eliminata. Le persone nel cerchio sono numerate dalla posizione iniziale a quella finale .

Il caso con salto 2

Il problema è risolto esplicitamente nel caso in cui a turno ogni persona elimini la persona alla sua sinistra, ossia quando . Si ponga la funzione che restituisce la posizione del sopravvissuto.

Nel primo giro, tutte le persone nelle postazioni con numeri pari vengono eliminate. Nel secondo giro vengono eliminate le nuove postazioni pari, calcolate come se non ci fosse stato il primo passaggio attorno al cerchio.

Se il numero iniziale era pari (), allora la persona in posizione durante il secondo giro del cerchio era originariamente in posizione . La persona che sopravviverà era originariamente in posizione . Trattandosi della medesima persona che sopravvive a , questo produce la seguente relazione di ricorrenza:

Se il numero iniziale era dispari (), l'eliminazione della persona in posizione 1 può essere considerata come un'esecuzione aggiuntiva alla fine del primo giro. Durante il secondo giro, la persona in posizione era originariamente in posizione , il che produce la relazione di ricorrenza:

Formula chiusa ed espressione binaria

Per calcolare rapidamente la soluzione del problema per senza dover reiterare la funzione ricorsiva, occorre esprimere il numero totale di persone nella forma , dove è la massima potenza di 2 minore o uguale a , mentre è il resto (assumendo che sia ). L'equazione esplicita per determinare la posizione esatta del sopravvissuto diventa pertanto:[1]

In ambito informatico, questa proprietà assume una forma matematicamente elegante se si sfrutta la codifica del sistema numerico binario. La posizione del sopravvissuto può essere calcolata istantaneamente prendendo la rappresentazione binaria di ed effettuando uno scorrimento ciclico a sinistra (left shift) di un singolo bit. Spostando il bit più significativo (il primo "1" a sinistra) all'estremità opposta della stringa binaria (come bit meno significativo), il numero decimale che si ottiene corrisponde esattamente alla posizione di salvezza.

Il caso generale (k > 2)

Per un valore generico e maggiore di due del salto , il problema viene comunemente affrontato tramite l'impiego della programmazione dinamica. L'algoritmo calcola la posizione sicura partendo dal caso base ed estendendolo per generare la soluzione ricorsiva fino a tramite l'espressione:

Questo approccio garantisce una soluzione calcolabile con una complessità temporale lineare pari a .

Note

  1. 1 2 (EN) Ronald L. Graham, Donald E. Knuth, Oren Patashnik, 1.3 The Josephus Problem, in Concrete Mathematics: A Foundation for Computer Science, 2ª ed., Addison-Wesley, 1994, ISBN 978-0201558029.
  2. ↑ Flavio Giuseppe, Libro III, Capitolo 8, in Guerra giudaica, Fondazione Lorenzo Valla, 1993, ISBN 978-8804118237.

Bibliografia

  • (EN) Ronald L. Graham, Donald E. Knuth, Oren Patashnik, Concrete Mathematics: A Foundation for Computer Science, 2ª ed., Addison-Wesley, 1994, ISBN 978-0201558029.
  • Flavio Giuseppe, Guerra giudaica, Fondazione Lorenzo Valla, 1993, ISBN 978-8804118237.

Voci correlate

Collegamenti esterni