مسئله ژوزفوس

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

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

## راه حل

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

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

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

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

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

f(n)=2f(\frac{n}{2})-1=2(2l_1+1)-1=2l+1

که تساوی دوم از فرض استقرا به دست می‌آید.

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

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

n=100 = 1100100

پس از یک شیفت دورانی داریم:

J(n)=1001001=73

ساده‌ترین راه برای حل کلی این مسئله استفاده از برنامه نویسی پویا است که به ما چنین رابطه بازگشتی ای را می‌دهد.

f(n,k)=(f(n-1,k)+k),   ,mod (n),  ,f(1,k)=0

که بدیهی است وقتی که ببینیم چگونه عدد نجات یابنده عوض می‌شود وقتی که n-1 به n تغییر می‌کند، چنین روشی از نظر پیچیدگی زمانی از O(n) است، اما برای k کوچک و n بزرگ روش دیگری وجود دارد. روش دوم هم از برنامه‌نویسی پویا استفاده می‌کند؛ اما از O(klgn) است.

## انواع

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

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

## منابع

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

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

رده:ترکیبیات
رده:جایگشت‌ها
رده:ریاضیات پیوسته
رده:مسئله‌های ریاضی
رده:مسئله‌های محاسباتی