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