مسئله ژوزفوس ( یا جایگشت ژوزفوس) یک مسئله نظری درعلوم کامپیوترو ریاضیات است.
افرادی را در نظر بگیرید که دایره وار ایستاده‌اند و منتظر اعدام هستند. بعد از آنکه اولین نفر اعدام می‌شود، تعداد مشخصی از افراد رد شده و یک نفر دیگر اعدام می‌شود. سپس دوباره به همان تعداد افراد پرش شده و نفر بعد کشته می‌شود. این فرایند حذف، دور دایره ( که با برداشتن افراد کشته شده کوچک و کوچکتر می‌گردد)ادامه می یابد تا زمانی که تنها یک نفر باقی می‌ماند که آزاد می‌شود.
مطلوب، یافتن جایگاهی در دایره اولیه است که شما با قرار گرفتن در آنجا نجات خواهید یافت.

تاریخچه
-------

این مسئله منتسب به یوسفوس فلاویوس یک تاریخدان یهودی قرن اول میلادی است. آنگونه که داستان می‌گوید، او و ۴۰ سرباز همراه وی در یک غار زندانی شده‌اند که توسط رومی‌ها محاصره شده‌است. آن‌ها خودکشی را بر اسیر شدن ترجیح می‌دهند و تصمیم می‌گیرند که یک دایره را تشکیل داده و سه تا سه تا خود را بکشند. چون ژوزفوس نمی‌خواهد کشته شود، و می‌تواند مکان امن دور دایره را پیدا کند با یکی از همراهانش زنده می‌ماند و به رومی‌ها که آن‌ها را دستگیر می‌کنند، می پیوندد. (تنها جمله‌ای که ژوزفوس بعداً گفت این بود که با خوش شانسی یا به یاری لطف خدا او و فرد دیگری باقی‌ماندند و تسلیم رومی‌ها شدند)

راه حل
------

ما این مسئله را در حالتی حل می‌کنیم که افراد دوتا دوتا کشته شوند:{\displaystyle k=2}.(برای حالت کلی تر یک راه حل نشان خواهیم داد). راه حل را به صورت روابط بازگشتی ارائه می‌دهیم. فرض کنید f(n) ، مکان نجات یابنده باشد در صورتی‌که n تعداد اولیه افراد باشد و ({\displaystyle k=2}). در اولین گردش دور دایره، تمام افراد با شماره زوج می‌میرند. در دومین چرخش، افراد جدید دوم کشته می‌شوند و در دور بعدی افراد جدید چهارم و الی آخر .

اگر تعداد افراد اولیه زوج باشد، آنگاه فردی که در دور دوم در مکان x قرار گرفته‌است ابتدا در مکان {\displaystyle 2x-1} بوده‌است. بنابراین فردی که در مکان 
f(n) قرار دارد، ابتدا در مکان {\displaystyle 2f(n)-1} بوده‌است. این ایده چنین رابطه بازگشتی را به ما می‌دهد:

{\displaystyle f(2n)=2f(n)-1\;.}
اگر تعداد افراد اولیه فرد باشد، آنگاه فرد شماره یک در اولین دور کشته خواهد شد. دوباره در دور دوم، افراد زوج جدید کشته خواهند شد. و در دور بعدی افراد چهارم جدید. این ایده نیز به چینن رابطه‌ای بازگشتی ای منجر می‌گردد:

{\displaystyle f(2n+1)=2f(n)+1\;.}
وقتی مقادیر n و f(n) را جدول بندی کنیم چنین الگویی را مشاهده می‌کنیم:

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

این الگو نشان می‌دهد که f(n) یک دنباله فرد صعودی است که از {\displaystyle f(n)=1} شروع می‌شود؛ وقتی که اندیس n توانی از 2 باشد. بنابراین اگر m و l را به گونه‌ای انتخاب کنیم که {\displaystyle n=2^{m}+l} و {\displaystyle 0\leq l<2^{m}} باشد و آنگاه {\displaystyle f(n)=2l+1} این واضح است که مقادیر در جدول این معادله را ارضا می‌کنند. اما ریاضیات نیازمند اثبات قطعی است. در زیر ما اثباتی را از طریق استقرا ارائه می‌کنیم.

قضیه: اگر {\displaystyle n=2^{m}+l} و {\displaystyle 0\leq l<2^{m}}، آنگاه {\displaystyle f(n)=2l+1}

اثبات: ما از استقرای ریاضی قوی روی n استفاده می‌کنیم. پایه n=۱ است که درست است. ما n های فرد و زوج را جداگانه بررسی می نماییم.
اگر n زوج باشد، آنگاه ما {\displaystyle l\_{1}} و m\_{1} را انتخاب می‌کنیم به گونه‌ای که{\displaystyle n/2=2^{m\_{1}}+l\_{1}} و {\displaystyle 0\leq l\_{1}<2^{m\_{1}}}. توجه داشته باشید که {\displaystyle l\_{1}={\frac {1}{2}}}. داریم

{\displaystyle f(n)=2f({\frac {n}{2}})-1=2(2l\_{1}+1)-1=2l+1}
که تساوی دوم از فرض استقرا به دست می‌آید.

حال اگر n فرد باشد ماm\_{1} و {\displaystyle l\_{1}} را به گونه‌ای انتخاب می‌کنیم که{\displaystyle {\frac {n-1}{2}}=2^{m\_{1}}+l\_{1}} و {\displaystyle 0\leq l\_{1}<2^{m\_{1}}}. توجه داشته باشید که {\displaystyle l\_{1}={\frac {l}{2}}}. داریم 
{\displaystyle f(n)=2f({\frac {n-1}{2}})+1=2((2l\_{1})+1)+1=2l+1} که تساوی دوم از فرض استقرا به دست می‌آید. و اثبات کامل می‌شود.
  

ظریف‌ترین شکل جواب نمایش دودویی n را دربرمی گیرد: اگر n را به صورت باینری بنویسیم و شماره فردی گه زنده می‌ماند را برابر {\displaystyle J(n)} بگیریم، و n را یک بیت شیفت دورانی دهیم {\displaystyle J(n)} به دست می‌آید. 

{\displaystyle n=100=1100100}
پس از یک شیفت دورانی داریم:

{\displaystyle J(n)=1001001=73}
ساده‌ترین راه برای حل کلی این مسئله استفاده از برنامه نویسی پویا است که به ما چنین رابطه بازگشتی ای را می‌دهد.

{\displaystyle f(n,k)=(f(n-1,k)+k),,mod(n),,f(1,k)=0}
که بدیهی است وقتی که ببینیم چگونه عدد نجات یابنده عوض می‌شود وقتی که {\displaystyle n-1} به n تغییر می‌کند، چنین روشی از نظر پیچیدگی زمانی از O(n) است، اما برای k کوچک و n بزرگ روش دیگری وجود دارد. روش دوم هم از برنامه‌نویسی پویا استفاده می‌کند؛ اما از {\displaystyle O(klgn)} است.

انواع
-----

بر اساس ریاضیات پیوسته ژوزفوس همدستی دارد. مسئله یافتن مکان‌های دو نجات یابنده است(نقشه باید نجات یافتن هردو را تضمین نماید)

ادبیات
------

گراهام گرین، دو رمان مرد دهم و دکتر فیشر ژنوی را بر اساس این مسئله ریاضی نگاشته است.

منابع
-----

۱-توماس کرمن، چارلز لیزرسون، رونالد ریوست، کلیفورد استین، مقدمه‌ای بر الگوریتم ها، چاپ دوم، ۲۰۰۱، شابک ۰-۲۶۲-۰۳۲۹۳-۷، فصل ۱۴، بحثی در مورد ساختمان داده‌ها، صفحه ۱۱۸ 

* مشارکت‌کنندگان ویکی‌پدیا. «Josephus problem». در *دانشنامهٔ ویکی‌پدیای انگلیسی*، بازبینی‌شده در ۲۶ آوريل ۲۰۱۱.

پیوند به بیرون
--------------

* بازی فلاویوس ژوزفوس با Java Applet در
* Cut-the-knot
* به این سرباز کمک کنید
* Armin Shams-Baragh Formulating The Extended Josephus Problem