حل مسئله ژوزفوس کبیر

پنجشنبه, ۷ شهریور ۱۴۰۴، ۰۹:۵۱ ب.ظ

این مسئله رو در این پست توضیح دادیم و اینجا قراره حلش کنیم .

 

یکی از مرسوم ترین کارهایی که برای حل این سوالات میتونیم انجام بدیم الگویابی هست . به عبارتی بیایم خودمون دستی جواب مسئله رو برای ورودی های مختلف حساب کنیم و ببینیم آیا الگوی خاصی بین ورودی مسئله و جوابی که بدست میاد در مجموعه داده ها هست که ما بتونیم ازش استفاده کنیم یا نه .

ورودی این مسئله تعداد نفرات بود که با n نشون میدیم و خروجی مسئله هم شماره اون شخصیه که در نهایت بعد از خودکشی دست جمعی زنده میمونه . 

من اومدم به صورت دستی روی برگه این سوال رو برای ورودی های ۱ تا 16 حساب کردم که به صورت زیر درومد . در هر مدخل مقدار n (تعداد نفرات) و جواب مسئله به ازای اون تعداد نفرات (شماره شخصی که زنده میمونه) مشخص شده :

اگر دقت کنیم متوجه یه نکته جالبی میشیم . برای n هایی که توانی از ۲ هستند جواب مسئله همیشه ۱ شده ! . یعنی همیشه نفر یکم زنده میمونده . این موارد رو من برجسته کردم در تصویر زیر :

 

حالا میخوام توجه شما رو به n های بین توان های دو جلب کنم . یعنی مثلا جواب های مسئله رو برای n های بین ۲ تا ۸ که هر دو توان های دو هستند در نظر بگیرید . طبق الگویی که بالا دیدیم قاعدتا خود n=2 و n=8 جواب مسئله ۱ میشه ولی n های بینشون رو دقت کنید چه الگویی دارن :

 

جالبه که این جواب مسئله برای این اعداد یعنی از n=2 تا قبل از n=8 از ۱ شروع شدن و در هر مرحله ۲ واحد به اونا اضافه شده عملا چنین الگویی رو تشکیل دادن :

1 , 3 , 5 , 7 , 9 , ....

 

اگر دقت کنید و خودتون بررسی کنیم میبینید این الگو برای تمام n های بین دو توان متوالی ۲ وجود داره . مثلا n=32 و n=64 هر دو توان هایی متوالی از دو هستند (25 و 26) اگر جواب های این مسئله رو از n=32 تا n=63 در بیاریم میبینیم همین الگوی عددی رو تشکیل میدن :

  1 , 3 , 5 , 7 , 9 , ....

وقتی n=64 میشه باز دوباره جواب مسئله ۱ میشه و دوباره اون الگو از اول تکرار میشه چون 64 توانی از ۲ هست و دیدیم که تمام n هایی که توان ۲ هستند جواب ۱ رو میگیرن .

 

با این اوصاف هر n که داشته باشیم میتونیم بگیم جواب اون مسئله چقدر میشه . برای مثال فرض کنید به ما n=41 رو بدن . میایم میبینیم نزدیک ترین توان ۲ قبل از ۴۱ چه عددی هست که عدد ۳۲ هست (25) . میدونیم که برای n های بزرگتر از ۳۲ اعداد از الگوی 1,3,5,7, .. .پیروی میکنن . پس به صورتی دستی این الگو رو میریم جلو تا برسیم به عدد n=41 :

n=32 --> 1

n=33 --> 3

n=34 --> 5

n=35 --> 7

n=36 --> 9

n=37 --> 11

n=38 --> 13

n=39 --> 15

n=40 --> 17

n=41 --> 19

این روش دستی جواب میده ولی خب بیاید یک فرمول ریاضیاتی براش بدست بیاریم که راحت تر بتونیم حساب کنیم .

از ریاضیات دبیرستان میدونیم که به دنباله ای از اعداد که با یک مقدار ثابت دائما زیاد یا کم میشن میگیم دنباله خطی . مثل دنباله های زیر :

1 , 3 , 5 , 7 , 9 , ....   (d = 2)

1 , 2 , 3 , 4 , 5 , 6 , ... (d = 1)

100, 95, 90, 85, ....   (d = -5)

هر سه خط بالا مثالی از یک دنباله خطی بودن . خط اول یک دنباله خطی با تغییرات ۲ هست چون هر مرحله ۲ واحد به مقدار قبلی اضافه شده . این مقدار اضافه شده یا کم شده رو با حرف d نشون دادیم . برای دو مثال دیگر هم به همین صورته فقط مقدار d یا اون مقدار ثابتی که در هر مرحله تغییر میکنه متفاوته . به اینجور دنباله ها که مقدار تغییرشون (d) در هر مرحله یک عدد ثابته دنباله خطی میگیم .

در ریاضیات دبیرستان به ما یک فرمولی گفتن که میتونیم توسط اون جمله n ام یک دنباله خطی دلخواه رو حساب کنیم . جمله n ام منظور n امین عدد در دنباله مذکوره . مثلا همین دنباله 1,3,5,7,9,... رو در نظر بگیرید ، جمله اول برابر ۱ هست . جمله سوم برابر ۵ هست و جمله چهارم برابر 7 هست . این مفهوم جمله n ام هستش .جمله nام را با Tn نشون میدیم . جمله n ام یک دنباله خطی توسط فرمول زیر میتونه بدست بیاد :

در فرمول بالا d برابر همون مقدار ثابت تغییر در دنباله هست که در بالا دیدیم . a1 هم برابر جمله ابتدایی دنباله هست یعنی اون عددی که دنباله با اون شروع میشه .

برگردیم به مسئله ژوزفوس . دیدیم که بین n ها با توان های متوالی ۲ ، جواب های مسئله دنباله خطی زیر رو تشکیل میدن :

1 , 3 , 5 , 7 , 9 , ...

طبق تعریف فرمول میدونیم که در اینجا d=2 هست و a1=1 هست . بنابراین :

پس جمله n ام این دنباله از طریق عبارت 2n-1 بدست میاد (دقت کنید این n با ورودی مسئله ژوزفوس فرق داره . اون n مشخص کننده تعداد سربازانه ولی تو بحث دنباله این n مشخص کننده شماره جمله در دنباله هست) . کار تمومه . با همین فرمول میتونید جواب مسئله ژوزفوس کبیر رو بدست بیاریم .

مثلا هون n=41 یا به عبارتی مسئله با ۴۱ سرباز . اول میایم نزدیک ترین توان ۲ که قبل از 41 هست رو پیدا میکنیم که اینجا میشه ۳۲ . چرا اینکارو میکنیم ؟ چون میخوایم بشماریم ۴۱ چندتا بعد از ۳۲ هست و در نتیجه جمله چندم اون دنباله خطی 1,3,5,7, .. .رو باید بدست بیاریم (شروع دنباله از n=32 هست که برابر ۱ میشه و وقتی بریم بالا برسیم به 41 میبنم عدد 41 در اصل متناظر با جمله دهم اون دنباله خطی 1,3,5,7 هستش) . به عبارتی میتونیم از طریق تفریق زیر شماره جمله در دنباله رو بدست بیاریم  :

41 - 32 + 1 = 10

دقت کنید یک بار به علاوه ۱ میکنیم چون خود n=32 هم جزو دنباله 1,3,5,7, ... هست و درواقع اولین جمله دنباله هست که جوابش ۱ میشه . پس باید جمله دهم دنباله خطی رو بدست بیاریم . فرمول 2n-1 که بدست آوردیم رو برای n=10 حساب میکنیم تا جمله دهم دنباله بدست بیاد :

Tn = 2n-1

=> T9 = 2(10) - 1 = 19

پس اگر در مسئله ژوزفوس ما ۴۱ نفر داشته باشیم که خودکشی دست جمعی انجام بدن نفر ۱۹ ام زنده میمونه در آخر . 

موافقین ۱ مخالفین ۰
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">