تالار گفتمان مانشت
کوله پشتی صفر و یک - نسخه‌ی قابل چاپ

کوله پشتی صفر و یک - jameshenas - 01 خرداد ۱۳۹۱ ۰۹:۵۵ ب.ظ

سلام دوستان...من یه سوالی داشتم میشه کمکم کنید.... یه چیزای تو همین سایت پیدا کردم ولی قانع نشدم...

کوله پوشتی به روش حریصانه
سوال:کوله ای داریم با وزنw و n شی که هر کدام قیمت یا ارزش pi و وزن vi دارد.
هدف از این کار:کوله پشتی چگونه پر کنیم که بیشترین سود را داشته باشد...

کوله پشتی صفر و یک - a.hooshmand - 01 خرداد ۱۳۹۱ ۱۰:۴۰ ب.ظ

از اجسامی که نسبت pi/vi بیشتری دارد شروع به پر کردن کوله پشتی می کنیم.

RE: کوله پشتی صفر و یک - jameshenas - 01 خرداد ۱۳۹۱ ۱۰:۵۳ ب.ظ

(۰۱ خرداد ۱۳۹۱ ۱۰:۴۰ ب.ظ)a.hooshmand نوشته شده توسط:  از اجسامی که نسبت pi/vi بیشتری دارد شروع به پر کردن کوله پشتی می کنیم.

سلام مرسی که جوابمو دادین...
فقط یه چیزی یعنی هر کدوم که ارزش بیشتری دارند نسبت به اینکه وزن کمتری دارند رو محاسبه میکنیم و تو کوله می ریزم...
"شرمنده من این روش حریصانه رو خوب نفهمیدم کسی میتونه یکم کوچولو در موردش برام بنویسه تا خوب بتونم درکش کنم...
بازم مرسی"

کوله پشتی صفر و یک - yaser_ilam_com - 01 خرداد ۱۳۹۱ ۱۱:۰۳ ب.ظ

در حریصانه اول قطعات بر محوریت وزن/ارزش مرتب می کنیم و به صورت کامل درون کوله قرار می دهیم و هر گاه با انتخاب قطعه بعدی براساس ظرفیت کوله سرریز اتفاق افتاد به ناچار از کسری آن شی درون کوله قرار گرفته و کار تمام می شود البته تا اونجا یادمه در الگوریتم پویا این مسئله کامل حل میشه یعنی الگوریتم کوله پشتی کسری (همین که بیان شد) توسط الگوریتم حریصانه حل می شود ولی الگوریتم کوله پشتی صفر و یک توسط الگوریتم پویا حل می شود و حریصانه نمی تونه الگوریتم کوله پشتی صفر و یک رو حل کنه

RE: کوله پشتی صفر و یک - Masoud05 - 01 خرداد ۱۳۹۱ ۱۱:۱۰ ب.ظ

روش حریصانه ، یه روشی است که لزوماً جواب بهینه به ما نمیده اما به سرعت جواب خوبی ( ونه لزوما بهینه ) به ما میده و یا اینکه سریع با شکست مواجه میشه ( در هر صورت سریع هست ).

در کوله پشتی به روش حریصانه : ابتدا نسبت ارزش هر شیئ به وزنش رو محاسبه میکنیم . و کوله رو از بالاترین ارزش پر میکنیم ( اگر کوله پشتی کسری باشه- یعنی از هر شی بتونیم بخشی از اونو توی کوله بزاریم ، اثباتش هم خیلی راحته - ، روش حریصانه لزوماً جواب بهینه رو به ما میده )
در کوله پشتی به روش پویا : جوابی بفرم چند جمله ای ندارد و خیلی روش کندی محسوب میشه . در دل حل این روش از یه رابطه بازگشتی استفاده میشه که بفرم زیر هست( به زبان خودمانی Big Grin ) :

اگر شیئی وجود نداشته باشد /باقی نمانده باشه ، که هیچی ! کار تمام هست ---> شرط مرزی
اگر وزن شیئ بزرگتر از ظرفیت کوله بود که این شیئ رو بیخیال برو بطور بازگشتی(رابطه زیر) از مابقی اشیا بزرگترین رو انتخاب کن :
[tex]C[i][m]= Max (c[i-1][m],pi c[i-1][m-wi])[/tex]

RE: کوله پشتی صفر و یک - jameshenas - 01 خرداد ۱۳۹۱ ۱۱:۱۳ ب.ظ

(۰۱ خرداد ۱۳۹۱ ۱۱:۰۳ ب.ظ)yaser_ilam_com نوشته شده توسط:  در حریصانه اول قطعات بر محوریت وزن/ارزش مرتب می کنیم و به صورت کامل درون کوله قرار می دهیم و هر گاه با انتخاب قطعه بعدی براساس ظرفیت کوله سرریز اتفاق افتاد به ناچار از کسری آن شی درون کوله قرار گرفته و کار تمام می شود البته تا اونجا یادمه در الگوریتم پویا این مسئله کامل حل میشه یعنی الگوریتم کوله پشتی کسری (همین که بیان شد) توسط الگوریتم حریصانه حل می شود ولی الگوریتم کوله پشتی صفر و یک توسط الگوریتم پویا حل می شود و حریصانه نمی تونه الگوریتم کوله پشتی صفر و یک رو حل کنه
مرسی
شما میگین باید بصورت پویا حل بشه؟
تا جایی که میدونم پویا باید یه تابع بازگشتی داشته باشیم و از پایین به بالا حلش کنیم نه؟
تابع بازگشتیمون اینجا چی میتونه باشه در ضمن ما باید یه حافظه کمکی هم باید داشته باشیم که جوابامون و تو اون بریزیم...
به روش پویا یکم بیشتر توضیح میدی...Rolleyes

(۰۱ خرداد ۱۳۹۱ ۱۱:۱۰ ب.ظ)Masoud05 نوشته شده توسط:  روش حریصانه ، یه روشی است که لزوماً جواب بهینه به ما نمیده اما به سرعت جواب خوبی ( ونه لزوما بهینه ) به ما میده و یا اینکه سریع با شکست مواجه میشه ( در هر صورت سریع هست ).

در کوله پشتی به روش حریصانه : ابتدا نسبت ارزش هر شیئ به وزنش رو محاسبه میکنیم . و کوله رو از بالاترین ارزش پر میکنیم ( اگر کوله پشتی کسری باشه- یعنی از هر شی بتونیم بخشی از اونو توی کوله بزاریم ، اثباتش هم خیلی راحته - ، روش حریصانه لزوماً جواب بهینه رو به ما میده )
در کوله پشتی به روش پویا : جوابی بفرم چند جمله ای ندارد و خیلی روش کندی محسوب میشه . در دل حل این روش از یه رابطه بازگشتی استفاده میشه که بفرم زیر هست( به زبان خودمانی Big Grin ) :

اگر شیئی وجود نداشته باشد /باقی نمانده باشه ، که هیچی ! کار تمام هست ---> شرط مرزی
اگر وزن شیئ بزرگتر از ظرفیت کوله بود که این شیئ رو بیخیال برو بطور بازگشتی(رابطه زیر) از مابقی اشیا بزرگترین رو انتخاب کن :
[tex]C[i][m]= Max (c[i-1][m],pi c[i-1][m-wi])[/tex]

مرسی از دوستان

کوله پشتی صفر و یک - yaser_ilam_com - 03 خرداد ۱۳۹۱ ۱۱:۵۰ ب.ظ

این لینک ها ببین به دردت میخوره :




مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.



مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


کوله پشتی صفر و یک - jameshenas - 04 خرداد ۱۳۹۱ ۱۰:۱۵ ب.ظ


از همه ی دوستان مرسی....
بالاخره یچیز رو خوب فهمیدم... یاسر جان بابت کد هم ممنون....

کوله پشتی صفر و یک - yaser_ilam_com - 05 خرداد ۱۳۹۱ ۰۱:۵۹ ق.ظ

خدا رو شکر موفق باشی

RE: کوله پشتی صفر و یک - رامین فرقانی - ۰۳ بهمن ۱۳۹۲ ۱۰:۰۲ ب.ظ

با سلام به همگی.
خیلی اضطراریه.
پروژه: پیاده سازی الگوریتم های حریصانه و پویا برای حل مسئله کوله پشتی صفر و یک و مقایسه پیچیدگی زمانی این دو راه حل.
برای مسئله کوله پشتی برنامه ایی بنویسید که ابتدا مسئله را به روش پویا و سپس به روش حریصانه حل کند.
همچنین اختلاف زمانی اجرای دو روش را نیز محاسبه نماید.
۱_برنامه باید اطلاعات را از یک فایل ورودی به نام<<input.in>> بخواند که دارای فرمت زیر است:
در سطر اول حداکثر وزن قابل قبول.
در سطر دوم وزن قطعات ۱ تا n به ترتیب شماره قطعه.
در سطر سوم ارزش قطعات ۱ تا n به ترتیب شماره قطعه.
۲_نتایج اجرای برنامه(هم جواب هر راه حل و هم مقایسه پیچیدگی زمانی) باید در یک فایل خروجی به نام <<output.out>> نوشته شود.
در سطر اول مجموع ارزش قطعات انتخابی نوشته شود.
در سطر دوم مجموع وزن قطعات انتخابی نوشته شود.
در سطر سوم خروجی حاصل از الگوریتم پویا ذکر شود که یک آرایه یک بعدی است و مقدار هر درایه آرایه نشان دهنده این است که قطعه مورد نظر در لیست قطعات انتخاب شده است یا خیر؟
در سطر چهارم خروجی حاصل از الگوریتم حریصانه ذکر میشود که یک آرایه یک بعدی است و مقدار هر درایه آرایه نشان دهنده این است که قطعه مورد نظر در لیست قطعات انتخاب شده است یا خیر؟
در سطر پنجم و ششم مدت زمان مصرف شده توسط هر الگوریتم ذکر میشود.
در سطر هفتم اختلاف زمانی این دو روش نوشته میشود.
فقط اگر ممکنه تا فردا حل این پروژه رو روی انجمن قرار بدید چون دیگه مهلتی ندارم و استادم هم فقط بلده به دانشجو ها اضطراب وارد بکنه.

کوله پشتی صفر و یک - mahdieh.d354 - 28 مهر ۱۳۹۶ ۱۰:۳۳ ب.ظ

سلام ی سوال داشتم. در مسئله کوله پشتی اگر قیود دامنه رو بصورت [۰,۱] پیوسته بنویسیم و عبارت xi(1-xi)=0 رو اضافه کنیم تا تبدیل به یک مسئله پیوسته شود چه مشکلی برای صورت مسئله به وجود می آید که درست نیست؟