0% found this document useful (0 votes)
15 views25 pages

3rd - Algorithm Haye Harisane

Uploaded by

degalah989
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views25 pages

3rd - Algorithm Haye Harisane

Uploaded by

degalah989
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

‫طراحی‬

Algorithm Design
‫طراحی الگوریتماه‬
‫الگوریتمها‬
Algorithm D
esign

‫ارژنگ ملک‬

‫راه‌های‌ارتباطی‬

[email protected]

@tnb_students

Arzhang Malek - TNB )AD( ‫طراحی الگوریتمها‬ Slide 2

1
‫‪Greedy Algorithms‬‬
‫الگوریتم‌های‌حریصانه‬

‫فصل‌اول‬
‫طراحی‌الگوریتم‌ها‬

‫روش‌های‌طراحی‌الگوریتم‬
‫‪ ‬الگوریتم حریصانه (‪) Greedy Algorithms‬‬

‫‪ ‬تقسیم و غلبه (‪)Divide and Conquer‬‬

‫‪ ‬برنامه نویسی پویا (‪)Dynamic Programming‬‬

‫‪ ‬الگوریتم عقبگرد (‪)Backtracking‬‬

‫‪ ‬الگوریتم شاخه و حد (‪)Branch and Bound‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 4‬‬

‫‪2‬‬
‫الگوریتم‌حریصانه‬
‫• در روش حریصانه در هر مرحله عنصری که طبق معیار ما " بهترین" انتخاب است‪ ،‬بدون در نظر گرفتن انتخاب‌های گذشته و‬
‫آینده انتخاب می‌شود‪ .‬در هیچ کدام از یک مراحل امکان برگشت به مراحل قبل وجود ندارد‪.‬‬

‫• اغلب برای مسائل بهینه سازی از روش‌های حریصانه استفاده می‌شوند ولی الزاما جواب بهینه را تولید نمی‌کند‪.‬‬

‫• در حل مسائل به روش حریصانه؛ با یک مجموعه تهی کار را آغاز می‌کنیم و عناصر را به ترتیبی خاص به مجموعه اضاف ه‬
‫می‌کنیم‪ ،‬تا به جواب برسیم‬

‫• در هر مرحله از انتخاب اعضای مجموعه جواب بررسی می‌کنیم‪:‬‬

‫الف) آیا عضو انتخاب شده‪ ،‬امکان رسیدن به پاسخ نهایی را دارد یا خیر؟ (‪)feasible‬‬
‫ب) با هربار انتخاب بررسی میشود‪ ،‬آیا به پاسخ نهایی رسیده‌ایم یا خیر؟ (‪)solution‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 5‬‬

‫حریصانه‌‪ -‬خرد‌کردن‌پول‬
‫مثال‪ :‬از فروشگاهی ‪ 114‬تومان خرید می‌کنید‪ ،‬و بابت آن ‪ 200‬تومان پول پرداخت می‌کنید‪ .‬فروشنده بایستی به شما ‪ 86‬تومان‬
‫برگرداند‪ ،‬اگر فروشنده سکه‌های ‪ 25 ، 10 ، 5 ، 1‬و ‪ 50‬تومانی داشته باشد؛ چگونه پول را به شما برگرداند به شرطی که از کمترین‬
‫تعداد سکه استفاده کند؟‬
‫‪50 + 25 + 10 + 1‬‬

‫‪ ‬مرتبه اجرایی الگوریتم‪O(n) :‬‬


‫‪ ‬هر الگوریتم حریصانه لزوما به یک حل بهینه منجر نمی‌شود‪.‬‬

‫مثال‪ :‬حال فرض کنید ‪ 59‬تومان خرید می‌کنید‪ ،‬و بابت آن ‪ 100‬تومان پول پرداخت کرده‌اید‪ .‬فروشنده ‪ 41‬تومان باقی مانده را با‬
‫سکه‌های ‪ 12 ، 10 ، 5 ، 1‬و ‪ 25‬برخواهد گرداند؛ به شرط استفاده از کمترین تعداد سکه‪ ،‬با چه سکه‌هایی اینکار انجام خواهد شد؟‬
‫‪25 + 12 + 1 + 1 + 1 + 1‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 6‬‬

‫‪3‬‬
‫حریصانه‌‪ -‬کد‌هافمن‬
‫• با هدف صرفه جویی در حافظه به منظور نمایش یک فایل اطالعاتی به شکل رشته‌هایی از بیت‌ها از کد هافمن استفاده می‌کنیم‪.‬‬

‫• هافمن یک روش حریصانه برای فشرده سازی فایل‌ها است‪.‬‬

‫• برای ارسال اطالعات با حجم کمتر بر روی خطوط شبکه‪ ،‬کد هافمن مورد استفاده قرار می‌گیرد‪.‬‬

‫مثال‪ :‬با توجه به کاراکترهای ‪ a, b, c‬فایلی با محتویات ‪ abcbb‬را کدگذاری کنید‪.‬‬

‫اگر‪:‬‬
‫‪c: 11‬‬ ‫‪b: 01‬‬ ‫‪a: 00‬‬

‫داریم‪:‬‬
‫‪0001110101‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 7‬‬

‫حریصانه‌‪ -‬کد‌هافمن‬
‫• برای بهینه سازی و صرفه جویی در حافظه و استفاده از حداقل تعداد بیت‌های ممکن‪ ،‬از "کد گذاری با طول متغیر" استفاده‬
‫می‌کنیم؛‬

‫مثال‪ :‬مجددا مثال قبل را حل می‌کنیم؛ برای رشته ‪ abcbb‬خواهیم داشت؛‬

‫اگر ‪ a: 10‬و ‪ b: 0‬و ‪ c: 11‬آنگاه‌داریم‪1001100‌:‬‬

‫• برای این منظور بایستی‪ ،‬کاراکترها با احتمال تکرار بیشتر‪ ،‬را با رشته کد کوچکتر و کاراکترهایی که به ندرت ظاهر می‌شوند‪ ،‬را‬
‫با رشته کد بزرگتر نشان داد‪.‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 8‬‬

‫‪4‬‬
‫حریصانه‌‪ -‬کد‌هافمن‬
‫مثال‪ :‬عناصر اطالعاتی زیر را با وزن‌های مشخص شده داریم؛ می‌خواهیم درخت مربوط به کد هافمن آن‌ها را با حداقل طول مسیر‪،‬‬

‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬ ‫برای وزن داده شده‪ ،‬ترسیم کنیم‪.‬‬
‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬

‫‪ ‬در ابتدا یک درخت که برگ های آن شامل‪ ،‬دو کاراکتر‪ ،‬دارای کمترین وزن است‪ ،‬را ترسیم می‌کنیم‪.‬‬
‫‪5‬‬
‫‪ ‬همواره گره با وزن کمتر سمت چپ قرار می‌گیرد‪.‬‬

‫‪1‬‬ ‫‪B‬‬ ‫‪E 4‬‬


‫حال جدول فراوانی ما به شکل زیر خواهد شد‬
‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬
‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬ ‫‪5‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 9‬‬

‫حریصانه‌‪ -‬کد‌هافمن‬
‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬
‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬ ‫‪5‬‬
‫‪ ‬حال مراحل قبل را تا انتها ادامه می‌دهیم‪.‬‬
‫‪13‬‬ ‫در این مرحله‪ ،‬فراوانی ‪( 5‬ریشه درخت مرحله قبل) و ‪( 8‬تعداد تکرار کاراکتر ‪ ) D‬انتخاب خواهند شد‪.‬‬

‫‪5‬‬ ‫‪D 8‬‬

‫‪1 B‬‬ ‫‪E 4‬‬


‫حال جدول فراوانی ما به شکل زیر خواهد شد‪.‬‬

‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬


‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪13‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 10‬‬

‫‪5‬‬
‫حریصانه‌‪ -‬کد‌هافمن‬
‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬
‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪13‬‬
‫‪ ‬حال مراحل قبل را تا انتها ادامه می‌دهیم‪.‬‬
‫‪13‬‬ ‫در این مرحله‪ ،‬فراوانی ‪( 10‬تعداد تکرار کاراکتر ‪ ) G‬و ‪( 12‬تعداد تکرار کاراکتر ‪ ) C‬انتخاب خواهند شد‪.‬‬
‫‪22‬‬

‫‪5‬‬ ‫‪D 8‬‬


‫‪10 G‬‬ ‫‪C 12‬‬
‫‪1 B‬‬ ‫‪E 4‬‬
‫حال جدول فراوانی ما به شکل زیر خواهد شد‪.‬‬
‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬
‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪13‬‬ ‫‪22‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 11‬‬

‫حریصانه‌‪ -‬کد‌هافمن‬
‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬
‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪13‬‬ ‫‪22‬‬
‫‪ ‬حال مراحل قبل را تا انتها ادامه می‌دهیم‪.‬‬
‫‪33‬‬ ‫در این مرحله‪ ،‬فراوانی ‪( 13‬ریشه درخت مراحل قبل) و ‪( 20‬تعداد تکرار کاراکتر ‪ ) A‬انتخاب خواهند شد‪.‬‬
‫‪22‬‬

‫‪13‬‬ ‫‪A 20‬‬


‫‪10 G‬‬ ‫‪C 12‬‬
‫‪5‬‬ ‫‪D 8‬‬
‫حال جدول فراوانی ما به شکل زیر خواهد شد‪.‬‬

‫‪1 B‬‬ ‫‪E 4‬‬ ‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬
‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪13‬‬ ‫‪22‬‬ ‫‪33‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 12‬‬

‫‪6‬‬
‫حریصانه‌‪ -‬کد‌هافمن‬
‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬
‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪13‬‬ ‫‪22‬‬ ‫‪33‬‬
‫‪ ‬حال مراحل قبل را تا انتها ادامه می‌دهیم‪.‬‬

‫‪33‬‬ ‫در این مرحله‪ ،‬فراوانی ‪( 22‬ریشه درخت مراحل قبل) و ‪( 27‬تعداد تکرار کاراکتر ‪ ) F‬انتخاب خواهند شد‪.‬‬
‫‪49‬‬

‫‪13‬‬ ‫‪A 20‬‬


‫‪22‬‬ ‫‪F 27‬‬
‫‪5‬‬ ‫‪D 8‬‬
‫‪10 G‬‬ ‫‪C 12‬‬ ‫حال جدول فراوانی ما به شکل زیر خواهد شد‪.‬‬

‫‪1 B‬‬ ‫‪E 4‬‬ ‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬
‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪13‬‬ ‫‪22‬‬ ‫‪33‬‬ ‫‪49‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 13‬‬

‫حریصانه‌‪ -‬کد‌هافمن‬
‫کاراکتر‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬
‫وزن‬ ‫‪20‬‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪27‬‬ ‫‪10‬‬ ‫‪5‬‬ ‫‪13‬‬ ‫‪22‬‬ ‫‪33‬‬ ‫‪49‬‬
‫‪82‬‬
‫‪ ‬حال با دو مقدار باقی مانده درخت را تکمیل می‌نمایم‪.‬‬

‫‪33‬‬ ‫‪49‬‬

‫‪13‬‬ ‫‪A 20‬‬ ‫‪22‬‬ ‫‪F 27‬‬

‫‪5‬‬ ‫‪D 8‬‬ ‫‪10 G‬‬ ‫‪C 12‬‬

‫‪1 B‬‬ ‫‪E 4‬‬


‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 14‬‬

‫‪7‬‬
‫الگوریتم‌حریصانه‌‪ -‬کد‌هافمن‬
‫‪ ‬درخت بدست آمده را به شکل زیر رسم می‌کنیم‬
‫‪0‬‬ ‫‪1‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬

‫‪F‬‬
‫‪ ‬به یال‌های سمت چپ عدد صفر و به یال‌های سمت راست‬
‫‪1‬‬ ‫‪A‬‬ ‫‪1‬‬
‫‪0‬‬ ‫‪0‬‬
‫عدد یک را اختصاص می‌دهیم‪.‬‬
‫‪D‬‬ ‫‪G‬‬ ‫‪C‬‬
‫‪0‬‬ ‫‪1‬‬

‫‪B‬‬ ‫‪E‬‬

‫‪ ‬حال برای پیدا کردن کد هر کاراکتر‪ ،‬از ریشه تا کاراکتر مورد نظر حرکت کرده‪ ،‬و بیت‌های مشاهده شده را می‌نویسیم‪:‬‬
‫‪A: 01‬‬ ‫‪B: 0000‬‬ ‫‪C: 101‬‬
‫‪D: 001‬‬ ‫‪E: 0001‬‬ ‫‪F: 11‬‬ ‫‪G: 100‬‬
‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 15‬‬

‫حریصانه‌‪ -‬کد‌هافمن‬
‫تمرین‪ :‬فرض کنید متنی شامل حروف ‪ a, b, c, d, e, f‬می‌باشد؛ و فراوانی این حروف در جدول زیر آمده است‪ ،‬هدف ایجاد کد‬
‫بهینه برای این حروف است‪.‬‬

‫کاراکتر‬ ‫‪a‬‬ ‫‪b‬‬ ‫‪c‬‬ ‫‪d‬‬ ‫‪e‬‬ ‫‪f‬‬


‫وزن‬ ‫‪30‬‬ ‫‪10‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪40‬‬ ‫‪14‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 16‬‬

‫‪8‬‬
‫حریصانه‌‪ -‬کوتاهترین‌مسیر‬
‫مسئله‪ :‬پیدا کردن کوتاهترین مسیر بین دو نقطه (درخت پوشای مینیمم)‬

‫‪A‬‬ ‫‪2‬‬ ‫‪18‬‬


‫‪B‬‬ ‫‪E‬‬
‫‪12‬‬ ‫‪1‬‬
‫‪4‬‬ ‫‪C‬‬
‫‪5‬‬

‫‪F‬‬
‫‪20‬‬ ‫‪25‬‬
‫‪8‬‬
‫‪3‬‬

‫‪D‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 17‬‬

‫حریصانه‌‪ -‬الگوریتم‌پریم‬
‫مراحل پیدا کردن درخت پوشای مینیمم‪ ،‬توسط الگوریتم پریم‪:‬‬

‫‪ ‬یک گره دلخواه را انتخاب می‌کنیم‬

‫‪ ‬کوچکترین یال متصل به گره انتخابی را پیدا و انتخاب می‌کنیم‬

‫‪ ‬حال تمامی یال‌های متصل به تمامی گره‌های انتخاب شده را بررسی و کوچکترین آن‌ها را انتخاب می‌کنیم‬

‫‪ ‬نکته‪ :‬یالی که ایجاد حلقه کند را انتخاب نمی‌کنیم‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 18‬‬

‫‪9‬‬
‫ الگوریتم‌پریم‬-‌‫حریصانه‬
2
Step 1: A B

2 4
Step 2: A B F

2 4
Step 3: A B F
3

D
Arzhang Malek - TNB )AD( ‫طراحی الگوریتمها‬ Slide 19

‫ الگوریتم‌پریم‬-‌‫حریصانه‬
C

Step 4: 5

2 4
A B F
3

D 1
C E
5
Step 5:
2 4
A B F
3

D
Arzhang Malek - TNB )AD( ‫طراحی الگوریتمها‬ Slide 20

10
‫حریصانه‌‪ -‬الگوریتم‌کروسکال‬
‫مراحل پیدا کردن درخت پوشای مینیمم‪ ،‬توسط الگوریتم کروسکال‪:‬‬

‫‪ ‬کوچکترین یال را انتخاب می‌کنیم‬

‫‪ ‬کوچکترین یال بعدی را انتخاب می‌کنیم‬

‫‪ ‬تا زمانی که تمام راس‌ها به هم وصل شوند این کار را ادامه می‌دهیم‬

‫‪ ‬نکته‪ :‬یالی که ایجاد حلقه کند را انتخاب نمی‌کنیم‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 21‬‬

‫حریصانه‌‪ -‬الگوریتم‌کروسکال‬
‫‪1‬‬
‫‪Step 1:‬‬ ‫‪C‬‬ ‫‪E‬‬

‫‪2‬‬
‫‪A‬‬ ‫‪B‬‬
‫‪Step 2:‬‬
‫‪1‬‬
‫‪C‬‬ ‫‪E‬‬

‫‪2‬‬
‫‪A‬‬ ‫‪B‬‬ ‫‪F‬‬
‫‪Step 3:‬‬ ‫‪3‬‬
‫‪1‬‬
‫‪C‬‬ ‫‪E‬‬ ‫‪D‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 22‬‬

‫‪11‬‬
‫حریصانه‌‪ -‬الگوریتم‌کروسکال‬
‫‪2‬‬ ‫‪4‬‬
‫‪A‬‬ ‫‪B‬‬ ‫‪F‬‬
‫‪Step 4:‬‬ ‫‪3‬‬
‫‪1‬‬
‫‪C‬‬ ‫‪E‬‬ ‫‪D‬‬

‫‪2‬‬ ‫‪4‬‬
‫‪A‬‬ ‫‪B‬‬ ‫‪F‬‬
‫‪5‬‬ ‫‪3‬‬
‫‪Step 5:‬‬
‫‪C‬‬ ‫‪1‬‬ ‫‪E‬‬ ‫‪D‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 23‬‬

‫حریصانه‌– مقایسه‌پریم‌و‌کروسکال‬
‫‪ ‬مرتبه اجرایی الگوریتم پریم برابر است با‪:‬‬

‫) 𝟐𝒏(𝑶‬ ‫که‌در‌آن‌‪ n‬برابر‌است‌با‌تعداد‌راس‌ها‬

‫‪ ‬مرتبه اجرایی کروسکال برابر است با‪:‬‬


‫)𝒎 ‪𝑶(𝒎 log‬‬
‫که‌در‌آن‬

‫‪‌:m‬تعداد‌یال‌ها‬ ‫‪ : n‬تعداد‌راس‌ها‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 24‬‬

‫‪12‬‬
‫حریصانه‌– مقایسه‌پریم‌و‌کروسکال‬
‫‪ ‬نکات‪:‬‬
‫‪ ‬با توجه به پیچیدگی الگوریتم کروسکال داریم؛‬
‫)𝒏 ‪𝑶(𝒏 log‬‬ ‫• اگر گراف خلوت باشد‬

‫)𝒏 ‪𝑶(𝒏𝟐 log‬‬ ‫• اگر گراف شلوغ باشد‬

‫‪ ‬نتیجه می‌گیریم‪ ،‬اگر گرافی یال‌های کمی داشته باشد‪ ،‬بهتر است از کروسکال و اگر یال‌های زیادی دارد بهتر است از‬
‫پریم استفاده کنیم‪.‬‬

‫‪ ‬الگوریتم‌های کروسکال و پریم همواره یک درخت پوشای مینیمم ایجاد می‌کنند‬

‫‪ ‬الگوریتم پریم در ایجاد راه برای چند شهر‪ ،‬که کمترین هزینه و مسافت را داشته باشد‪ ،‬کاربرد دارد‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 25‬‬

‫حریصانه‌‪ -‬کوتاهترین‌مسیر‬
‫مسئله‪ :‬فاصله چند شهر مورد نظر در گراف زیر مشخص شده است‪ ،‬میخواهیم تمامی شهرها را به هم متصل کنیم‪ ،‬به‬
‫نحوی که مردم بتواند از هر شهر به شهر دیگر بروند‪ ،‬باتوجه به محدودیت بودجه میخواهیم با کمترین مقدار جاده‬
‫کشی ممکن این کار را انجام دهیم‬
‫‪A‬‬
‫‪28‬‬
‫‪10‬‬
‫‪B‬‬
‫‪14‬‬ ‫‪16‬‬
‫‪E‬‬ ‫‪G‬‬ ‫‪C‬‬
‫‪18‬‬
‫‪24‬‬ ‫‪12‬‬
‫‪25‬‬
‫‪D‬‬
‫‪F‬‬ ‫‪22‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 26‬‬

‫‪13‬‬
‫حریصانه‌‪ -‬الگوریتم‌دایجکسترا‬
‫‪ ‬برای پیدا کردن کوتاه‌ترین مسیر از یک راس به سایر رئوس در یک گراف جهت دار از الگوریتم دایجکسترا استفاده می‌کنیم‬

‫‪ ‬هدفمان پیدا کردن طول کوتاه‌ترین مسیر از راسی به نام مبدا تا سایر رئوس می باشد‬

‫مثال‪ :‬کوتاه‌ترین مسیر از راس ‪ A‬به سایر رئوس نشان دهید‬


‫‪55‬‬
‫‪A‬‬ ‫‪E‬‬
‫‪10‬‬ ‫‪35‬‬
‫‪2‬‬
‫‪90‬‬
‫‪25‬‬
‫‪D‬‬ ‫‪B‬‬
‫‪10‬‬ ‫‪C‬‬ ‫‪50‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 27‬‬

‫حریصانه‌‪ -‬الگوریتم‌دایجکسترا‬
‫مراحل پیدا کردن کوتاهترین مسیر توسط الگوریتم دایجکسترا‬

‫‪ ‬گره مبدا را درون مجموعه ‪ S‬قرار می‌دهیم‬

‫‪ ‬یال‌های متصل به مبدا را بررسی و کوتاه‌ترین یال را انتخاب‪ ،‬و گره مربوط به آن یال را درون مجموعه ‪ S‬قرار می‌دهیم‬

‫‪ ‬مسیرها از مبدا تا سایر رئوس که آن مسیر از گره‌های مجموعه ‪ S‬عبور کند را بررسی و کوتاه‌ترین آن‌ها را انتخاب و گره‬
‫مربوطه را به مجموعه ‪ S‬اضافه می‌کنیم‬

‫‪ ‬نکته‪ :‬الگوریتم دایجکسترا در گراف‌هایی با یال منفی پاسخ‌گو نمی‌باشد‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 28‬‬

‫‪14‬‬
‫حریصانه‌‪ -‬الگوریتم‌دایجکسترا‬

‫‪Step 1:‬‬ ‫‪Step 2:‬‬

‫}‪S:{A,D‬‬ ‫}‪S:{A,D,C‬‬

‫‪Step 3:‬‬ ‫‪Step 4:‬‬

‫}‪S:{A,D,C,B‬‬ ‫}‪S:{A,D,C,B,E‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 29‬‬

‫حریصانه‌‪ -‬الگوریتم‌دایجکسترا‬
‫تمرین‪ :‬کوتاهترین مسیر بین هر دو راس گراف مقابل را بدست آورید‪.‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 30‬‬

‫‪15‬‬
‫حریصانه‌– زمان‌بندی‌فعالیت‌ها‬
‫• در این مسئله بدنبال‪ ،‬زمان‌بندی و انتخاب ترتیب انجام فعالیت‌ها برای رسیدن به اهداف مسئله می‌باشیم‪.‬‬

‫• دو نوع زمان‌بندی وجود دارد‪:‬‬


‫‪ ‬زمانبندی ساده‪ :‬هدف حداقل شدن زمان سیستم؛ و یا مینیم شدن زمان انتظار مشتریان‬

‫‪ ‬زمانبندی با مهلت معین‪ :‬هدف به حداکثر رسیدن سود‬

‫‪ ‬زمانبندی ساده‪:‬‬

‫مثال‪ :‬آرایشگری می خواهد به ‪ 3‬مشتری خود که زمان خدمت هر کدام با دیگری متفاوت است‪ ،‬سرویس دهد‪ .‬به چه ترتیبی باید‬
‫مشتریان را انتخاب کنیم‪ ،‬تا زمان کل سیستم حداقل شود؟‬
‫مشتری‬ ‫اول‬ ‫دوم‬ ‫سوم‬
‫زمان سرویس‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪7‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 31‬‬

‫حریصانه‌– زمان‌بندی‌فعالیت‌ها‬
‫مشتری‬ ‫اول‬ ‫دوم‬ ‫سوم‬
‫زمان سرویس‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪7‬‬

‫• یک راه برای حل مسئله این است که تمامی حاالت را بررسی و بهترین را انتخاب نماییم‪ .‬در زیر تمامی حاالت ممکن را داریم؛‬
‫زمان کل سیستم‬ ‫زمانبندی‬
‫‪5 + (5 + 9) + (5 + 9 + 7) = 40‬‬ ‫]‪[1,2,3‬‬
‫‪5 + (5 + 7) + (5 + 7 + 9) = 38‬‬ ‫]‪[1,3,2‬‬
‫‪9 + (9 + 5) + (9 + 5 + 7) = 44‬‬ ‫]‪[2,1,3‬‬
‫‪9 + (9 + 7) + (9 + 7 + 5) = 46‬‬ ‫]‪[2,3,1‬‬
‫‪7 + (7 + 5) + (7 + 5 + 9) = 40‬‬ ‫]‪[3,1,2‬‬
‫‪7 + (7 + 9) + (7 + 9 + 5) = 44‬‬ ‫]‪[3,2,1‬‬
‫‪ ‬مشاهده می‌شود کمترین زمان سیستم‪ ،‬زمانی است که مشتریان بر اساس زمان سرویس بصورت صعودی مرتب شده باشند‪.‬‬
‫‪5 + (5 + 7) + (5 + 7 + 9) = 38‬‬ ‫]‪[1,3,2‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 32‬‬

‫‪16‬‬
‫حریصانه‌– زمان‌بندی‌فعالیت‌ها‬
‫مراحل الگوریتم زمانبندی ساده‪:‬‬

‫‪ ‬فعالیت‌ها به ترتیب زمان اجرا به صورت صعودی مرتب شوند‬

‫‪ ‬در هر مرحله فعالیتی انتخاب شود که کمترین زمان اجرا را دارد‬

‫‪ ‬نکته‪ :‬در زمان‌بندی ساده‪ ،‬زمان کل سیستم فقط هنگامی مینیمم می‌شود‪ ،‬که فعالیت‌ها بر مبنای افزایش زمان ارائه‬
‫خدمات مرتب و زمان بندی شده باشند‪.‬‬

‫‪ ‬تتای الگوریتم زمان بندی ساده )𝒏 ‪ 𝜽(𝒏 log‬می‌باشد‪ .‬زیرا تنها زمان صرف مرتب سازی می‌شود‪.‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 33‬‬

‫حریصانه‌– زمان‌بندی‌فعالیت‌ها‬
‫‪ ‬زمانبندی با مهلت معین‪:‬‬

‫• در این مسئله هر فعالیت در یک واحد زمانی اجرا و تمام می‌شود‪ ،‬و هر فعالیت یک مهلت معین و یک سود معین دارد‪.‬‬

‫• زمانی سود مورد نظر بدست می‌آید‪ ،‬که آن فعالیت پیش از مهلت معین اجرا شود‪.‬‬

‫• هدف این مسئله‪ ،‬انجام زمان‌بندی فعالیت‌ها جهت به حداکثر رسیدن سود می‌باشد‪.‬‬

‫مثال‪ :‬فرض کنید فعالیت‌ها‪ ،‬مهلت‌ها و سودهای زیر را داریم؛ فعالیت‌ها را به گونه‌ای انتخاب نمایید که حداکثر سود حاصل شود‪.‬‬
‫کار‬ ‫اول‬ ‫دوم‬ ‫سوم‬ ‫چهارم‬
‫مهلت‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬
‫سود‬ ‫‪30‬‬ ‫‪35‬‬ ‫‪25‬‬ ‫‪40‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 34‬‬

‫‪17‬‬
‫حریصانه‌– زمان‌بندی‌فعالیت‌ها‬
‫فعالیت‬ ‫اول‬ ‫دوم‬ ‫سوم‬ ‫چهارم‬
‫مهلت‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬
‫سود‬ ‫‪30‬‬ ‫‪35‬‬ ‫‪25‬‬ ‫‪40‬‬
‫• یک راه برای حل مسئله این است که تمامی حاالت را بررسی و بهترین را انتخاب نماییم‪.‬‬
‫سود کل‬ ‫زمانبندی‬ ‫در مقابل تمامی حاالت ممکن را داریم؛‬
‫‪30 + 25 = 55‬‬ ‫]‪[1,3‬‬
‫‪35 + 30 = 65‬‬ ‫]‪[2,1‬‬ ‫‪ ‬مهلت فعالیت سوم برابر ‪ 2‬است‪ ،‬یعنی این فعالیت تنها در زمان ‪ 1‬یا زمان ‪2‬‬
‫‪35 + 25 = 60‬‬ ‫]‪[2,3‬‬ ‫قابل اجراست‪.‬‬
‫‪25 + 30 = 55‬‬ ‫]‪[3,1‬‬ ‫‪ ‬زمان بندی ]‪ [4,2‬غیرممکن است‪ ،‬زیرا فعالیت چهارم و دوم فقط در زمان ‪1‬‬
‫‪40 + 30 = 70‬‬ ‫]‪[4,1‬‬ ‫قابل اجرا می‌باشند‪.‬‬
‫‪40 + 25 = 65‬‬ ‫]‪[4,3‬‬
‫‪ ‬مشاهده می‌شود حداکثر سود‪ ،‬در حالتی است که زمان بندی بصورت زیر باشد‪.‬‬
‫‪40 + 30 = 70‬‬ ‫]‪[4,1‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 35‬‬

‫حریصانه‌– زمان‌بندی‌فعالیت‌ها‬
‫‪ ‬مجموعه امکان پذیر‪ :‬مجموعه‌ای است که حداقل یک ترتیب امکان پذیر برای آن فعالیت‌ها وجود داشته باشد‪.‬‬

‫در مثال قبل داریم؛‬


‫کار‬ ‫اول‬ ‫دوم‬ ‫سوم‬ ‫چهارم‬
‫مهلت‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬
‫سود‬ ‫‪30‬‬ ‫‪35‬‬ ‫‪25‬‬ ‫‪40‬‬

‫• مجموعه {‪ ،} 2,1‬امکان پذیر است زیرا ترتیب ]‪ [2,1‬امکان پذیر است‪.‬‬

‫• مجموعه {‪ ،} 4,2‬امکان پذیر نیست زیرا هیچ ترتیبی از اعضای آن قابل زمان بندی نمی‌باشد‪.‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 36‬‬

‫‪18‬‬
‫حریصانه‌– زمان‌بندی‌فعالیت‌ها‬
‫مراحل الگوریتم زمانبندی با مهلت معین‪:‬‬

‫‪ ‬فعالیت‌ها را به ترتیب نزولی سود‪ ،‬مرتب می‌کنیم‬

‫‪ ‬مجموعه ‪ S‬را در ابتدا تهی در نظر می‌گیریم‬

‫‪ ‬فعالیت با بیشترین سود را به مجموعه ‪ S‬اضافه می‌کنیم‬

‫‪ ‬اگر مجموعه ‪ S‬جدید‪ ،‬امکان پذیر بود آن فعالیت را در مجموعه ‪ S‬قرار می‌دهیم‬

‫‪ ‬برای بررسی امکان پذیر بودن ‪ ، S‬فعالیت‌های موجود در ‪ S‬را بر اساس مهلت بصورت صعودی مرتب می‌کنیم‪.‬‬

‫‪ ‬در زمان‌بندی با مهلت معین لزوما تمامی فعالیت‌ها انتخاب نخواهند شد‪.‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 37‬‬

‫حریصانه‌– زمان‌بندی‌فعالیت‌ها‬
‫مثال‪ :‬فعالیت‌ها را به گونه‌ای انتخاب نمایید که حداکثر سود حاصل شود‪.‬‬
‫کار‬ ‫اول‬ ‫دوم‬ ‫سوم‬ ‫چهارم‬ ‫پنجم‬ ‫ششم‬ ‫هفتم‬ ‫‪ ‬مجموعه ‪ S‬برابر با {}‬
‫مهلت‬ ‫‪3‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪2‬‬
‫سود‬ ‫‪40‬‬ ‫‪35‬‬ ‫‪30‬‬ ‫‪25‬‬ ‫‪20‬‬ ‫‪15‬‬ ‫‪10‬‬ ‫‪ S ‬برابر با {‪} 1‬‬

‫‪ S ‬برابر با {‪ } 2,1‬چون ترتیب ]‪ [1,2‬امکان پذیر است‬

‫‪ } 3,2,1{ ‬رد می‌شود چون ترتیب ]‪ [1,2,3‬امکان پذیر نیست‬

‫‪ S ‬برابر با {‪ } 4,2,1‬چون ترتیب ]‪ [4,1,2‬امکان پذیر است‬

‫‪ } 5,4,2,1{ ‬و {‪ } 6,4,2,1‬و {‪ } 7,4,2,1‬رد می‌شود چون امکان پذیر نیستند‬

‫جواب مسئله {‪ S = } 4,2,1‬می‌باشد‪ ،‬و بهره کل ما از انتخاب این فعالیت‌ها ‪ 40+35+25 = 100‬می‌باشد‪.‬‬
‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 38‬‬

‫‪19‬‬
‫حریصانه‌– انتخاب‌فعالیت‌ها‬
‫• در این مسئله هدف انتخاب بیشترین تعداد فعالیت است به صورتی که هیچ دو فعالیتی با هم اشتراک بازه زمانی نداشته باشند‪.‬‬
‫مفروضات زیر را داریم؛‬
‫‪ ‬تعدادی فعالیت می‌خواهند از یک منبع استفاده کنند‪.‬‬

‫‪ ‬منبع در یک زمان معین فقط می‌تواند در اختیار یک فعالیت باشد‪.‬‬

‫‪ ‬هر فعالیت دارای یک زمان شروع )𝒊𝑺( و یک زمان خاتمه )𝒊𝑭( می‌باشد‪.‬‬

‫مثال‪ :‬در سمیناری ‪ 8‬داوطلب سخنرانی اعالم آمادگی کرده‌اند‪ .‬با توجه به جدول مقابل سخنرانان را به گونه‌ای انتخاب کنید که‬
‫اوال هیچ دو سخنرانی باهم تداخل زمانی نداشته باشند و ثانیا بیشترین تعداد ممکن سخنران در سمینار شرکت کنند‪.‬‬
‫سخنران)‪(i‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬
‫زمان شروع ]‪S[i‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪0‬‬ ‫‪5‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪8‬‬
‫زمان خاتمه ]‪F[i‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪10‬‬ ‫‪11‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 39‬‬

‫حریصانه‌– انتخاب‌فعالیت‌ها‬
‫مراحل الگوریتم انتخاب فعالیتها‪:‬‬

‫‪‌: n‬تعداد‌کل‌فعالیت‌ها‬ ‫]‪‌: F[i‬زمان‌پایان‌فعالیت ‪ i‬ام‬ ‫]‪‌: S[i‬زمان‌شروع‌فعالیت ‪ i‬ام‬

‫‪ ‬فعالیت‌ها را بر اساس زمان پایان آن‌ها به صورت صعودی مرتب می‌کنیم‬

‫‪ ‬اولین فعالیت (زودترین زمان پایان) را انتخاب می‌کنیم‬

‫‪ ‬به ازای ‪ i‬از ‪ 2‬تا ‪ n‬تکرار می‌کنیم‪:‬‬

‫اگر فعالیت ‪ i‬ام با آخرین فعالیت انتخاب شده تداخل زمانی نداشت‪ ،‬آن را انتخاب می کنیم (]‪) F[j] ≤ S[i‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 40‬‬

‫‪20‬‬
‫حریصانه‌– زمان‌بندی‌فعالیت‌ها‬
‫سخنران)‪(i‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬
‫زمان شروع ]‪S[i‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪0‬‬ ‫‪5‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪ ‬فعالیت ها را بر اساس زمان پایان مرتب‬
‫زمان خاتمه ]‪F[i‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪10‬‬ ‫‪11‬‬ ‫می‌کنیم‬

‫‪i‬‬ ‫]‪F[j] ≤ S[i‬‬ ‫‪select‬‬ ‫‪A‬‬ ‫‪ ‬اولین فعالیت را انتخاب می‌کنیم {‪A=} 1‬‬
‫‪1‬‬ ‫‪True‬‬ ‫√‬ ‫}‪{1‬‬
‫‪ ‬فعالیت‌های بعدی را به ترتیب بررس ی‬
‫‪2‬‬ ‫‪False‬‬ ‫×‬ ‫}‪{1‬‬
‫‪3‬‬ ‫‪False‬‬ ‫×‬ ‫}‪{1‬‬ ‫می‌کنیم‪ ،‬که مشاهده می‌شود‪ ،‬تنها در‬
‫‪4‬‬ ‫‪True‬‬ ‫√‬ ‫}‪{1,4‬‬ ‫فعالیت‌های ‪ 4‬و ‪ 8‬رسیدن به جواب‬
‫‪5‬‬ ‫‪False‬‬ ‫×‬ ‫}‪{1,4‬‬
‫‪6‬‬ ‫‪False‬‬ ‫×‬ ‫}‪{1,4‬‬ ‫امکان پذیر است و سایر موارد شرایط‬
‫‪7‬‬ ‫‪False‬‬ ‫×‬ ‫}‪{1,4‬‬ ‫مسئله را نقض می‌کند‪.‬‬
‫‪8‬‬ ‫‪True‬‬ ‫√‬ ‫}‪{1,4,8‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 41‬‬

‫حریصانه‌– کوله‌پشتی‌کسری‬
‫• در مسئله کوله پشتی هدف انتخاب قطعاتی است‪ ،‬که باالترین ارزش یا حداکثر سود ممکن حاصل شود‪.‬‬

‫مفروضات زیر را داریم؛‬


‫‪ ‬ظرفیت کوله پشتی مشخص و ثابت است‪.‬‬

‫‪ ‬هر قطعه ارزش و وزن مخصوص به خود را دارد‪.‬‬

‫‪ ‬از هر قطعه یک نمونه موجود است‪.‬‬

‫‪ ‬امکان انتخاب بخشی از هر قطعه نیز وجود دارد(کسری)‪.‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 42‬‬

‫‪21‬‬
‫حریصانه‌– کوله‌پشتی‌کسری‬
‫مثال‪ :‬دزدی با کوله پشتی خود وارد جواهر فروشی می‌شود‪ .‬کوله پشتی او تحمل حداکثر وزن ‪ 20‬کیلوگرم را دارد‪ .‬هر قطعه‬
‫جواهر وزن مشخص و ارزش معینی دارد‪ .‬مسئله اصلی دزد انتخاب قطعاتی است که حداکثر ارزش را داشته‪ ،‬در حالیکه جمع وزن‬
‫آن‌ها از ظرفیت کوله پشتی بیشتر نشود‪.‬‬
‫جواهر)‪(i‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬
‫‪18‬‬ ‫‪15‬‬ ‫‪10‬‬
‫‪25‬‬ ‫‪24‬‬ ‫‪15‬‬

‫مسئله فوق را به روش حریصانه می‌توان با سه معیار متفاوت حل کرد؛‬


‫• انتخاب با ارزش ترین‌ها‬
‫• انتخاب کمترین وزن‌ها‬
‫• انتخاب براساس باالترین ارزش نسبت به وزن‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 43‬‬

‫حریصانه‌– کوله‌پشتی‌کسری‬
‫معیار اول ‪ -‬انتخاب با ارزش ترینها‬

‫مراحل‪:‬‬

‫‪ ‬ابتدا اجسام را بر اساس ارزش به صورت نزولی مرتب می‌کنیم‪.‬‬


‫‪ ‬چون معیار ما ارزش اشیاء است‪ ،‬بهتر است بیشترین ارزش را انتخاب کنیم‪.‬‬

‫‪ ‬سپس به ترتیب اجسام با ارزش بیشتر را انتخاب می‌کنیم؛‬

‫‪ ‬مراحل را تا زمانی که وزن کل اجسام انتخاب شده از ظرفیت کوله پشتی تجاوز نکند ادامه می‌دهیم‪.‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 44‬‬

‫‪22‬‬
‫حریصانه‌– کوله‌پشتی‌کسری‬
‫جواهر)‪(i‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬
‫معیار اول ‪ -‬انتخاب با ارزش ترینها‬
‫‪18‬‬ ‫‪15‬‬ ‫‪10‬‬
‫‪ ‬ابتدا اجسام را بر اساس ارزش به صورت نزولی مرتب می‌کنیم‬
‫‪25‬‬ ‫‪24‬‬ ‫‪15‬‬

‫‪ ‬جسم اول را کامل انتخاب می‌کنیم؛ در این صورت ظرفیت باقی مانده کوله پشتی برابر با ‪ 2‬کیلوگرم خواهد شد‬
‫‪𝑀 − 𝑊1 = 20 − 18 = 2‬‬
‫‪ ‬با توجه به ظرفیت باقی مانده‪ ،‬امکان انتخاب تمام جسم دوم نیست‪ ،‬حال کسری از جسم دوم (به اندازه ظرفیت باقی مانده‬
‫‪2‬‬ ‫کوله پشتی) را انتخاب می‌کنیم تا کوله پشتی پر شود‬
‫‪𝑀 − 𝑊1 −‬‬ ‫‪𝑊 = 20 − 18 − 2 = 0‬‬
‫‪15 2‬‬
‫‪ ‬در نهایت ارزش کوله پشتی باتوجه به اشیاء انتخاب شده برابر است با‪:‬‬
‫𝑛‬
‫‪2‬‬
‫‪𝑝𝑖 𝑥𝑖 = 1 × 25 +‬‬ ‫𝟐‪× 24 + (0 × 15) = 𝟐𝟖/‬‬
‫‪15‬‬
‫‪𝑖=1‬‬
‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 45‬‬

‫حریصانه‌– کوله‌پشتی‌کسری‬
‫معیار اول ‪ -‬انتخاب کمترین وزنها‬

‫مراحل‪:‬‬

‫‪ ‬ابتدا اجسام را بر اساس وزن به صورت صعودی مرتب می‌کنیم‪.‬‬


‫‪ ‬چون وزن اشیاء تاثیر منفی دارد‪ ،‬بهتر است کمترین وزن را انتخاب کنیم‪.‬‬

‫‪ ‬سپس به ترتیب اجسام با وزن کمتر را انتخاب می‌کنیم؛‬

‫‪ ‬مراحل را تا زمانی که وزن کل اجسام انتخاب شده از ظرفیت کوله پشتی تجاوز نکند ادامه می‌دهیم‪.‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 46‬‬

‫‪23‬‬
‫حریصانه‌– کوله‌پشتی‌کسری‬
‫معیار اول ‪ -‬انتخاب با ارزش ترینها‬
‫جواهر)‪(i‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬
‫‪10‬‬ ‫‪15‬‬ ‫‪18‬‬
‫‪ ‬ابتدا اجسام را بر اساس وزن به صورت صعودی مرتب می‌کنیم‬
‫‪15‬‬ ‫‪24‬‬ ‫‪25‬‬
‫‪ ‬جسم سوم را کامل انتخاب می‌کنیم؛ در این صورت ظرفیت باقی مانده کوله پشتی برابر با ‪ 10‬کیلوگرم خواهد شد‬
‫‪𝑀 − 𝑊3 = 20 − 10 = 10‬‬
‫‪ ‬با توجه به ظرفیت باقی مانده‪ ،‬امکان انتخاب تمام جسم دوم نیست‪ ،‬حال کسری از جسم دوم (به اندازه ظرفیت باقی مانده‬
‫‪10‬‬ ‫کوله پشتی) را انتخاب می‌کنیم تا کوله پشتی پر شود‬
‫‪𝑀 − 𝑊3 −‬‬ ‫‪𝑊2 = 20 − 10 − 10 = 0‬‬
‫‪15‬‬
‫‪ ‬در نهایت ارزش کوله پشتی باتوجه به اشیاء انتخاب شده برابر است با‪:‬‬
‫𝑛‬
‫‪10‬‬
‫‪𝑝𝑖 𝑥𝑖 = 0 × 25 +‬‬ ‫𝟏𝟑 = )‪× 24 + (1 × 15‬‬
‫‪15‬‬
‫‪𝑖=1‬‬
‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 47‬‬

‫حریصانه‌– کوله‌پشتی‌کسری‬
‫معیار اول ‪ -‬انتخاب کمترین وزنها‬

‫مراحل‪:‬‬
‫𝒊𝒑‬
‫( به صورت صعودی مرتب می‌کنیم‪.‬‬ ‫‪ ‬ابتدا اجسام را بر اساس ارزش وزنی )‬
‫𝒊𝒘‬
‫‪ ‬بدیهی است که‪ ،‬بهتر است جسمی لنتخاب شود که ارزش وزنی بیشتری داشته باشد‪.‬‬

‫‪ ‬سپس به ترتیب اجسام با ارزش وزنی بیشتر را انتخاب می کنیم‬

‫‪ ‬مراحل را تا زمانی که وزن کل اجسام انتخاب شده از ظرفیت کوله پشتی تجاوز نکند ادامه می‌دهیم‪.‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 48‬‬

‫‪24‬‬
‫حریصانه‌– کوله‌پشتی‌کسری‬
‫جواهر)‪(i‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪1‬‬
‫‪15‬‬ ‫‪10‬‬ ‫‪18‬‬ ‫معیار اول ‪ -‬انتخاب با ارزش ترینها‬
‫‪24‬‬ ‫‪15‬‬ ‫‪25‬‬
‫‪ ‬ابتدا اجسام را بر اساس ارزش وزنی به صورت نزولی مرتب می‌کنیم‬
‫‪1,6‬‬ ‫‪1,5‬‬ ‫‪1,3‬‬
‫‪ ‬جسم دوم را کامل انتخاب می‌کنیم؛ در این صورت ظرفیت باقی مانده کوله پشتی برابر با ‪ 5‬کیلوگرم خواهد شد‬
‫‪𝑀 − 𝑊2 = 20 − 15 = 5‬‬
‫‪ ‬با توجه به ظرفیت باقی مانده‪ ،‬امکان انتخاب تمام جسم سوم نیست‪ ،‬حال کسری از جسم دوم (به اندازه ظرفیت ب اقی مانده‬
‫‪5‬‬ ‫کوله پشتی) را انتخاب می‌کنیم تا کوله پشتی پر شود‬
‫‪𝑀 − 𝑊2 −‬‬ ‫‪𝑊3 = 20 − 15 − 5 = 0‬‬
‫‪10‬‬
‫‪ ‬در نهایت ارزش کوله پشتی باتوجه به اشیاء انتخاب شده برابر است با‪:‬‬
‫𝑛‬
‫‪5‬‬
‫‪𝑝𝑖 𝑥𝑖 = 0 × 25 + (1 × 24) +‬‬ ‫𝟓‪× 15 = 𝟑𝟏/‬‬
‫‪10‬‬
‫‪𝑖=1‬‬
‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 49‬‬

‫حریصانه‌– کوله‌پشتی‌کسری‬
‫نکات‪:‬‬

‫‪ ‬پیچیدگی زمانی کوله پشتی کسری )‪ O(nlogn‬می‌باشد؛ چون وابسته به مرتب سازی است‪.‬‬

‫‪ ‬همانطور که مشاهده شد‪ ،‬روش حریصانه‪ ،‬همیشه پاسخ بهینه را در مسئله کوله پشتی کسری نخواهد داد‪.‬‬

‫‪Arzhang Malek - TNB‬‬ ‫طراحی الگوریتمها (‪)AD‬‬ ‫‪Slide 50‬‬

‫‪25‬‬

You might also like