DS_Project.pdf

‫پروژهی پایانی‬
‫درس ساختمان دادهها‬
‫دکتر جمزاد‬
‫نیمسال اول ‪2391-93‬‬
‫فضای مسئله‬
‫در شهر مورچهها ساختار بدن هر مورچه با یک رشته از حروف انگلیسی مشخص میشود (مانند ‪DNA‬‬
‫در انسان)‪ .‬برای مثال یک مورچه با رشتهی ‪ abcd‬و مورچهی دیگری با ‪ x‬مشخص میشود‪ .‬در شهر مورچهها دو‬
‫نوع مورچه وجود دارد‪ ،‬مورچههای ملکه و مورچههای کارگر‪ .‬در یک دورهی زاد ولد‪ ،‬اگر زیررشتهای از یک مورچهی‬
‫کارگر با یک پیشوند از یک مورچه ملکه یکسان باشد‪ ،‬بچهای با آن زیررشته تولید میشود‪ .‬برای مثال اگر ‪xyzy‬‬
‫کارگر و ‪ yzxx‬ملکه باشد‪ ،‬فرزندان آنها ‪ yz‬و دو تا ‪ y‬خواهند بود‪.‬‬
‫همهی مورچههای به دنیا آمده‪ ،‬برای ورود به شهر در یک صف قرار میگیرند (بدون ترتیب خاص)‪ .‬در‬
‫این صف تعدادی مورچهی خارجی نیز هستند که میخواهند به شهر نفوذ کنند‪ .‬این مورچهها به هیچ یک از بچه‬
‫مورچهها شباهت ندارند و میتوان از روی رشتهشان آنها را از بچهها تمییز داد‪.‬‬
‫دربان شهر وظیفه دارد از ورود مورچههای خارجی جلوگیری کند و همچنین ترتیب ورود بچه مورچهها‬
‫را ذخیره کند‪ .‬مشکل دربان این است که در یک دورهی زاد ولد تعداد زیادی مورچه تولید میشود و نوشتن نام‬
‫همهی آنها به فضای زیادی نیاز دارد‪.‬‬
‫خواستهی مسئله‬
‫شما باید با داشتن لیست مورچههای کارگر و ملکه و صف ورودی‪:‬‬
‫‪ .2‬مورچههای خارجی را تشخیص دهید و از صف حذف کنید‪.‬‬
‫‪ .1‬ترتیب ورود بچه مورچهها را به صورت بهینه در یک فایل ذخیره کنید‪ ،‬به طوری که دوباره با داشتن لیست‬
‫مورچههای کارگر و ملکه‪ ،‬بتوانید صف بچه مورچهها را بازسازی کنید‪.‬‬
‫موارد تحویلی‬
‫شما در این پروژه دو برنامه با نامهای ‪ Encoder‬و ‪ Decoder‬به زبانهای ‪ java‬یا ‪ C++‬تحویل‬
‫میدهید‪.‬‬
‫برنامهی ‪ Encoder‬باید با گرفتن مورچههای کارگر و ملکه از فایل ‪ parents.txt‬و صف ورودی به‬
‫شهر از ورودی استاندارد‪ ،‬پس از حذف مورچههای خارجی از صف‪ ،‬ترتیب ورود بچه مورچهها به شهر را به صورت‬
‫دلخواه در فایل ‪ order‬ذخیره کند‪.‬‬
‫برنامهی ‪ Decoder‬باید بتواند فایل ‪ order‬را به کمک فایل ‪ parents.txt‬کدگشایی کند و همهی‬
‫بچهها را به ترتیب ورودشان در خروجی استاندارد چاپ کند‪.‬‬
‫برای چنین کاری در سادهترین حالت میتوان کل صف را در فایل ‪ order‬ذخیره کرد! اما دقت کنید که در این‬
‫پروژه هدف اصلی ضمن درست کار کردن برنامه‪ ،‬کمینه کردن حجم فایل ‪ order‬است‪.‬‬
‫ورودی و خروجی‬
‫‬‫‬‫‬‫‪-‬‬
‫در فایل ‪ parents.txt‬ابتدا تعداد مورچههای ملکه و کارگر و سپس رشتههای آنها (ابتدا ملکه سپس‬
‫کارگر) در خطهای جداگانه آمدهاست‪ .‬تعداد مورچهها از ‪ 211‬تا بیشتر نمیشود‪.‬‬
‫در ورودی استاندارد ابتدا طول صف و سپس در هر خط رشتهی یک مورچه میآید‪.‬‬
‫فایل ‪ order‬میتواند هر فرمتی داشته باشد‪ ،‬و محتویات آن در ارزیابی پروژه مهم نیست‪.‬‬
‫در خروجی استاندارد(‪ )Decoder‬باید مورچهها را به ترتیب یکی یکی در خطهای جداگانه چاپ کنید‪.‬‬
‫توضیحات تکمیلی‬
‫‬‫‬‫‬‫‬‫‬‫‬‫‪-‬‬
‫در ابتدای کار سعی کنید برنامهای بنویسید که درست کار کند سپس به سراغ کم کردن حجم بروید‪.‬‬
‫توصیه میشود در پیادهسازی تا جای ممکن از داده ساختارهای مناسب استفاده کنید تا امتیازی از دست‬
‫ندهید‪.‬‬
‫هر داده ساختار و یا الگوریتمی که استفاده میکنید باید پیادهسازی خودتان باشد و حق استفاده از‬
‫کتابخانههای آماده را ندارید (برای مثال داده ساختار پشته و یا الگوریتم مرتبسازی)‪.‬‬
‫برنامهی شما باید در زمان معقولی کار کند (در کل کمتر از ‪ 2‬دقیقه)‪.‬‬
‫ضمیمه کردن مستندنامهی مختصر و مفید از روش کد کردن امتیاز خواهد داشت‪.‬‬
‫قسمتی از امتیاز پروژه به صورت رقابتی و بر اساس حجم فایل کدشده خواهد بود‪.‬‬
‫سیاست امتیازدهی به صورت دقیق به زودی در اختیارتان قرار خواهد گرفت‪.‬‬
!‫نمونهای از فرایند زاد ولد‬
parents.txt:
12
bcde
bbb
abcd
Encoder’s standard input:
b
bc
x
b
bcd
x
b
bcde
b
Decoder’s standard output:
b
bc
b
bcd
b
b
‫موفق باشید‬
 ‫پایان‬