مسئله ژوزفوس

تاریخچه

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

راه حل

ما این مسئله را در حالتی حل می‌کنیم که افراد دوتا دوتا کشته شوند:k=۲.(برای حالت کلی تر یک راه حل نشان خواهیم داد). راه حل را به صورت روابط بازگشتی ارائه می‌دهیم. فرض کنید (f(n، مکان نجات یابنده باشد در صورتی‌که n تعداد اولیه افراد باشد و (k=۲). در اولین گردش دور دایره، تمام افراد با شماره زوج می‌میرند. در دومین چرخش، افراد جدید دوم کشته می‌شوند و در دور بعدی افراد جدید چهارم و الی آخر .
اگر تعداد افراد اولیه زوج باشد، آنگاه فردی که در دور دوم در مکان x قرار گرفته‌است ابتدا در مکان ۲x-۱ بوده‌است. بنابراین فردی که در مکان(f(n قرار دارد، ابتدا در مکان ۲f(n)-۱ بوده‌است. این ایده چنین رابطه بازگشتی را به ما می‌دهد:
f(۲n)=۲f(n)-۱
اگر تعداد افراد اولیه فرد باشد، آنگاه فرد شماره یک در اولین دور کشته خواهد شد. دوباره در دور دوم، افراد زوج جدید کشته خواهند شد. و در دور بعدی افراد چهارم جدید. این ایده نیز به چینن رابطه‌ای بازگشتی ای منجر می‌گردد:
f(۲n+۱)=۲f(n)+۱
وقتی مقادیر n و (f(n را جدول بندی کنیم چنین الگویی را مشاهده می‌کنیم:
n ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶
f(n) ۱ ۱ ۳ ۱ ۳ ۵ ۷ ۱ ۳ ۵ ۷ ۹ ۱۱ ۱۳ ۱۵ ۱
این الگو نشان می‌دهد که (f(n یک دنباله فرد صعودی است که از f(n)=۱ شروع می‌شود؛ وقتی که اندیس n توانی از ۲ باشد. بنابراین اگر m و l را به گونه‌ای انتخاب کنیم که  و  باشد و آنگاه f(n)=۲l+۱. این واضح است که مقادیر در جدول این معادله را ارضا می‌کنند. اما ریاضیات نیازمند اثبات قطعی است. در زیر ما اثباتی را از طریق استقرا ارائه می‌کنیم.
قضیه: اگرn = 2^m + l و، آنگاه f(n)=2l+1
اثبات: ما از استقرای ریاضی قوی روی n استفاده می‌کنیم. پایه n=۱ است که درست است. ما nهای فرد و زوج را جداگانه بررسی می نماییم.
اگر n زوج باشد، آنگاه ما و را انتخاب می‌کنیم به گونه‌ای که و . توجه داشته باشید که . داریم
که تساوی دوم از فرض استقرا به دست می‌آید.
حال اگر n فرد باشد ما و را به گونه‌ای انتخاب می‌کنیم که و . توجه داشته باشید که . داریم 
که تساوی دوم از فرض استقرا به دست می‌آید. و اثبات کامل می‌شود.

ظریف‌ترین شکل جواب نمایش دودویی n را دربرمی گیرد که توسط "آرمین شمس براق" دانشجوی دانشگاه مشهد پیشنهاد شده و مورد توجه طراحان الگوریتم برجسته دنیا قرار گرفته‌است : اگر n را به صورت باینری بنویسیم و شماره فردی گه زنده می‌ماند را برابر Jn بگیریم، و n را یک بیت شیفت دورانی دهیم Jn به دست می‌آید. 
n=۱۰۰ = ۱۱۰۰۱۰۰ 
پس از یک شیفت دورانی داریم Jn=۱۰۰۱۰۰۱=۷۳
ساده‌ترین راه برای حل کلی این مسئله استفاده از برنامه نویسی پویا است که به ما چنین رابطه بازگشتی ای را می‌دهد.
f(n،k)=(f(n-۱،k)+k) mod n، f(۱،k)=۰
که بدیهی است وقتی که ببینیم چگونه عدد نجات یابنده عوض می‌شود وقتی که n-۱به nتغییر می‌کند، چنین روشی از نظر پیچیدگی زمانی از (O(nاست، اما برای k کوچک و n بزرگ روش دیگری وجود دارد. روش دوم هم از برنامه‌نویسی پویا استفاده می‌کند؛ اما از (O(klgn است.

انواع

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

ادبیات

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