46
الگوریتم آموزش طراحیfaradars.org/fvsft109 ﻓﺮادرسFaraDars.org

آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

Embed Size (px)

Citation preview

Page 1: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 2: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

روش برنامه سازی پویا

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 3: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

Dynamic)پویانویسیبرنامه Programming)ًالدنببهکهشودمیبردهبکارهاییالگوریتمبرایغالبا

همباچکترکومسائلزیرازبرخیاستممکنغلبهوتقسیمروشدر.باشندمیبهینهبصورتمسئلهحل

ازیکینایکهشوندمیحلمرتبهچندینتکراریبطوربرابرمسائلزیرصورتایندرکهباشندبرابر

(غلبهوتقسیمبصورتفیبوناچیمسئلهحل).استغلبهوتقسیمروشمعایب

کهیروشواستتکراریمحاسباتانجامازجلوگیریاستنهفتهپویانویسیبرنامهورایدرکهایایده

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

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

.کندمیدنبالبعدیمسئلهزیرباراکاروبرداشتهجدولازراقبلیمحاسبهنتیجه

روش برنامه سازی پویاآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 4: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

:دبیایپیشاستممکنحالتدوشودمیتقسیممسئلهزیرچندیادوبهمسئلهیککهزمانی

نینچنمونه.باشندهمازمستقلکامالًوباشندنداشتههمبااشتراکیهیچهامسئلهزیرهایداده-1

بمرتمجزابصورتوشدهتقسیمقسمتدوبههادادهکهاستادغامروشباهاآرایهسازیمرتبمواردی

اصلحنتیجهدرونداشتهدیگرهایدادهباارتباطیهیچهابخشازیکیهایدادهحالتایندر.شوندمی

.داردخوبیکارایینوعاینمسائلبرایحلوتقسیمروشمعموالً.ندارداثریبخشآناز

هائلهمسزیراصطالحبهحالتایندر.دارنداشتراکهمبایاوبودهوابستهبهمهامسئلهزیرهایداده-2

.استفیبوناچیسریامnجملهمحاسبهایمسئلهچنینبارزنمونه.دارندهمپوشانی

روش برنامه سازی پویاآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 5: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

:زیر هستندشوند دارای ویژگیهای سازی پویا حل میکه به روش برنامهمسائلی

نها بدستت در واقع ت. سازی موضوعی کلیدی استسازی پویا مساله بهینههای برنامهدر اغلب الگوریتم. سازیبهینه( الف

(.در بین جوابهای ممکن بهترین باشد)آوردن جواب مساله کافی نیست و باید جواب بهینه نیز باشد

.شونداال حل میکنیم و در نتیجه مسائل اصوالً پایین به بترین سطح بطرف باالترین سطح حل میمسائل را از پایین( ب

، در روش کتردیممتیاستفاده k-1تنها از مسائل سطح kبرخالف روش تقسیم و حل که برای حل هر مساله سطح ( پ

.مکه الزم باشد استفاده کنیتر پایینتوانیم از کلیه مسائل سطوح میkسازی پویا برای حل هر مساله سطح برنامه

ل این امر ممکن استت باعتح حت. شودگردند و نتایج نگهداری میدر هر سطح کلیه مسائل موجود آن سطح حل می( ت

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

.سازی پویا منجر به الگوریتمی با مرتبه زمانی نامناسبب کردداست راه حل برنامه

روش برنامه سازی پویاآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 6: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

کوله پشتی صفر و یکالگوریتم

مسئله خرد کردن سکه

ضرب زنجیره ای ماتریس ها

کوتاهترین مسیرها

فروشنده دوره گرد

مثلح خیّام

بیشترین اعداد در مسیر

الگوریتم های برنامه سازی پویا

الگوریتم فلوید

سری فیبوناچی

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 7: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

:استیرزبازگشتیتعریفباریاضیاتمشهورعددیهایدنبالهازیکیفیبوناچیدنباله

سری فیبوناچی

1211100

nnfibnfib

n

n

nfib

)()(

)(

زیرودمحاسبهبهنیازگفتتوانمیپس.داردقبلجملهدومحاسبهبهنیازدنبالهامnجملهمحاسبه

برایونیستندهمازمستقلمسئلهزیردواینحالعیندراماباشدمیاصلیمسئلهبرایمسئله

.باشدمیدیگرجملهدومحاسبهبهنیازکدامهرمحاسبه

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 8: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

انی آن این تابع همانطور که در فصل اول مورد بررسی قرار گرفت دارای زمان نمائی است و پیچیدگی زم

𝑂برابر 2𝑛زیر استنویسی پویا بصورتاست ولی الگوریتم حل این مسئله با استفاده از روش برنامه:

void Fiboo(int f[] , int n)

{

f[0]=f[1]=1;

for(int i=2;i<n;i++)

f[i]=f[i-1]+f[i-2];

return;

}

استخطیزمانیپیچیدگیدارایتابعاین

𝑂برابرزمانیپیچیدگی) 𝑛است)

سری فیبوناچیآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 9: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

یککهردکمیاستفادهحریصانهروشازحلراهبرایشدبررسیقبلفصلدرکهپشتیکولهمسئله

نمائیمابانتخکاملبطورراشیءیکهستیممجازفقطالگوریتمایندر.کردمیارائهرابهینهحلراه

ازکسرییکتوانیمنمیدیگرحریصانهروشهمانندو(صفر)نکنیمانتخابرانظرموردشیءیا(یک)

.کنیمانتخابراشیء

.ردآوبدسترابهینهحلراهتواننمیحریصانهروشبایکوصفرپشتیکولهمسئلهحلبرای

دروهستندباالییمحاسباتیهایپیچیدگیدارای1-0پشتیکولهمسئلهبرایشدهارائهحلهایراه

توانمیویاپنویسیبرنامهباکمومحدوداشیاءتعدادبرای.استنشدنیراممسائلجزءمسئلهاینواقع

.کردپیدامسئلهبرایبهینهجوابیک

کوله پشتی صفر و یکالگوریتم آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 10: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

𝑛ابعادباماتریسیک + 1×𝑀 + کلتعدادnوکولهکلجرمMآندرکهشودمیایجاد1

دمعازحاصلپاسخبایداولشیءانتخابجهتچونشود،انجامانتخابآنهاازاستقرارکهاشیائی

اولءشیانتخابعدمبرایسطریکماتریسابعادهمینبرایگرفتنظردرنیزرااولشیءانتخاب

ضافهامرحلههردرهاشیءانتخابعدمبرایستونیعلتهمینبهنیزستوندروشودمیاضافهنیز

:شودمیایجادزیرشرطعلتهمینبهوشودمی

برنامه نویسی پویابا 1-0روش حل کوله پشتی

000 joriifjic ],[

اینسازیماکزیممهدفوباشدمیشدهانتخاباشیاءارزشبرابرcماتریسهایدرایهیاهادادهمقدار

.باشدمیارزش

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 11: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

وزناتوشودمیشروعیکازوزناینوباشدمیکولهبرایوزندهندهنشانستونشمارهستون،هردر

نظرردشیءانتخابعدمیاانتخابوزنافزایشباتاشودمیاضافهآنبهواحدیکواحدیککولهکل

ارزشسازیماکزیممهدفبهرسیدنوشرطبررسییکشیءوجودبافقطاولسطردروشودگرفته

ارزشسازیماکزیممهدفبهرسیدنوشرطبررسی2و1شیءوجودبادومسطردروگیردمیانجام

سازیماکزیممهدفبهرسیدنوشرطبررسیو3و2و1اشیاءوجودباسومسطردروگیردمیانجام

التدخباوماتریساینستونآخرینیعنیکولهکلوزنبرایماهدفوشودمیمحاسبهاشیاءارزش

𝑐درآیهدرنهائیپاسخبنابرینباشدمیماتریساینسطرآخرینیعنیاشیاءکل 𝑖,𝑗باشدمی.

برنامه نویسی پویابا 1-0روش حل کوله پشتی آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 12: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

تونساینوزنازشیءاینوزنبایدآنانتخاببرایکهداریمرایکشیءانتخابحقفقطاولسطردر

ازیءشوزناگروگیردمیقراردرایهاینمقدارعنوانبهآنارزشاینصورتدرکهباشدمساوییاکمتر

برابردرایهنایمقدارپسبگیردقرارکولهدرتواندنمیشیءاینباشدکمترکولهوزنیعنیستونشماره

.بودخواهدصفر

شیءاینانتخابعدمیاانتخاببینایمقایسهبایدبنابرینداریمرا2و1شیءانتخابحقدومسطردر

:بنابریناستارزشسازیماکزیممماهدفچونباشیمداشتهرا

که𝑚−𝑤𝑖)بگیردجایتواندمیکولهدرکهایباقیماندهوزنبارا(𝑝𝑖)آنارزششیءآنانتخاببا

mاشیاءازتواندمیباقیماندهوزناینبرایو(باشدمیمرحلهایندرکولهوزنیاستونشمارهبرابر

𝑐آوریممیبدستراکندانتخابقبلی 𝑖 − 1,𝑚− 𝑤𝑖کهi-1شیءاینازقبلاشیاءازاستفاده

.کنیممیجمعو(باقیماندهجرمبرای𝑚−𝑤𝑖و

برنامه نویسی پویابا 1-0روش حل کوله پشتی آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 13: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

mwwmicpmic

mwmic

mori

mic

iii

i

]),[],,[max(

],[],[

111

000

یعنیستونآنشمارهیعنیmجرمکردنپربرایوقبلاشیاءانتخابونظرموردشیءانتخابعدمبا

𝑐 𝑖 − 1,𝑚بارتیبع.کنیممیانتخابراآنباشدداشتهبیشتریارزشکدامهروکنیممیمقایسه

]),[],,[max(],[ ii wmicpmicmic 11:داریمحالت کلی بنابر این در

برنامه نویسی پویابا 1-0روش حل کوله پشتی آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 14: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

:فرضیات مسئله برابر هستند با: مثال

30140605020105

321

321

M

ppp

www

),,(),,(

),,(),,(

14131211109876543210

0000000000000000

50505050505050505050000001

60606060605050505050000002

60606060605050505050000003

30292827262524232221201918171615

0000000000000000

50505050505050505050505050505050

110110110110110110110110110110110110110110110110

200190190190190190140140140140140110110110110110

]),[],,[max( ii wmicpmic 11

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 15: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

کوتاهترین مسیرها

فقطودباشمیداروزنگرافیکازگرهدوهربینفاصلهترینکوتاهیافتنهدفالگوریتمایندر

بههاگرهتمامیبینفاصلهترینبهینهوترینکوتاهبایدونیستمطرحخاصگرهیکازفاصله

.آیدبدستدوبهدوصورت

یالهایمقادیراولجواب،آوردنبدستبرایوبودخواهدماتریسیکصورتبهجواببنابراین

یکعنوانبهآنانتخابوهاگرهتکتکبررسیبابعدوشدخواهدنوشتهماتریسیکدرموجود

.کردخواهیمتحلیلراجوابشدنبهینهمسیر،طولدرمیانیگره

.وارشال می باشد–یکی از الگوریتم های مفید در این زمینه الگوریتم فلوید

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 16: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

),( EVG

},...,,{ nV 21

w

ji

jiC

0

),(

با فرض گراف . باشددر الگوریتم فلوید هدف یافتن کوتاهترین مسیرها بین رئوس گراف می

Eمجموعه رئوس گراف و راس است که nکه یک گراف وزن دار و جهت دار با

:شودماتریس هزینه گراف است و بصورت زیر تعریف میCمجموعه یالها ست و همچنین فرض کنید که

یالی وجود داشته باشد برابر وزن یال استjبه iاگر از راس

یالی وجود نداشته باشدjبه iبرابر بینهایت است اگر از راس

الگوریتم فلوید

1

2 3

415

30

5

15

155505

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 17: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

کوتاهتریندهندهنشانآن(A[i,j])درایههرشودمیایجادفلویدالگوریتمکارانتهایدرکهماتریسی

.باشدمیjوiرئوسبینمسیر

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

یتمی بنام است ولی با استفاده از روش برنامه نویسی پویا و استفاده از الگورزمانی پیچیدگی

ت زیرا الزم به ذکر است که در این مسئله اصل بهینگی برقرار اس. خواهد بودمرتبه فلوید از

.کوتاهترین استنیز jبه kو kبه iبهینه باشد مسیر گذرد میkاز که jبه iاگر مسیر

)!(nO

)( 3nO

الگوریتم فلویدآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 18: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

]),[],[],,[min(],[

);;(

);;(

);;(

jkAkiAjiAjiA

jnjjfor

iniifor

knkkfor

11

1

:باشدالگوریتم فلوید بصورت زیر می

الگوریتم فلویدآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 19: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

]),[],[],,[min(],[ jkAkiAjiAjiA kkkk 111

ماتریسهمان𝐴0آندرکهآوردمیبدسترا𝐴𝑛تا𝐴0هایماتریسمسئلهحلبرایفلویدالگوریتم

𝐴𝑛الگوریتماینکارانتهایدرهمچنینوآیدمیبدست𝐴𝑘−1رویاز𝐴𝑘و.باشدمی(C)هزینه

.استمسئلهپاسخهمانکهآیدمیبدست

…,1,2,3رئوسفقطکهدهندمیراهاییمسیرکوتاهترینطول𝐴0هایدرایه ,𝑘رئوسبعنوان

.باشندتوانندمیمیانی

الگوریتم فلویدآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 20: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

1

2 3

415

30

5

15

155505

051515030515050

50

4321

4321

C

مثال ماتریس مجاورتی یا ماتریس وزن در الگوریتم فلویدآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 21: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

051515030515050

50

4321

4321

0A

1

2 3

415

30

5

15

155505

0520151503530515050

50

4321

4321

1A

0520151503530515050102050

4321

4321

2A

مثال الگوریتم فلویدآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 22: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

0520151503530515045102050

4321

4321

3A

0520151503530510020102050

4321

4321

4A

1

2 3

415

30

5

15

155505

0520151503530515050102050

4321

4321

2A

مثال الگوریتم فلویدآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 23: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

گرد تعدادی شهر وجود دارد کته فاصتله بتین هتر زو از شتهرها محدوده جغرافیایی فروشنده دورهدر

ک قرار است فروشنده از یکی از شهرها شروع کند و کلیه شهرها را، هری. مشخص و عددی مثبت است

ای متنوعی گرد کاربردهمساله فروشنده دوره. فقط یکبار، مالقات کند و در نهایت به نقطه شروع برگردد

بر روی یک تخلیه ادواری صندوقهای پستی به وسیله پستچی و عملیات مختلف یک آدم مکانیکی. دارد

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

.بردپشتی یک مسئله رام نشدنی است و حل دقیق آن زمان بسیار باالیی می

گردفروشنده دورهآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 24: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

ز یک راس یعنی ا. در این مسئله می خواهیم در یک گراف وزن دار، یک سیکل بهینه همیلتونی بیابیم

رطی کته شروع کنیم و همه رئوس را یکبار و فقط یکبار مالقات کنیم و به راس شروع باز گردیم به شت

.جمع وزن یالها مینیمم باشد

ه را راسی اگر بخواهیم با روش معمولی کل سیکل ها را بررستی کنتیم و ستیکل بهینتnدر یک گراف

𝑛بیابیم به − 1 کترد از ولی با روش برنامه سازی پویا می توان الگوریتمی بیتان. بررسی نیاز است!

𝜃مرتبه 𝑛22𝑛 که بسیار بهتر از𝑛 − 1 .است!

𝜃حافظه مصرفی الگوریتم دوره گرد با روش برنامه سازی پویا از مرتبه 𝑛2𝑛است.

گردفروشنده دورهآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 25: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

لع کناری یک شود که دو ضشود، بدین شکل ساخته میزیر که به نام مثلح پاسکال نیز شناخته میمثلح .شوندباشد و اعداد داخلی از جمع دو عدد باالیی ساخته میمی

111

1211331

1464115101051

𝑎ای یکی از کاربرهای مهم این مثلح بدست آوردن ضرایب بسط دو جمله + 𝑏 𝑛باشدمی .𝑎بطور مثال به ردیف سوم و بسط + 𝑏 2 = 𝑎2 +2𝑎𝑏 + 𝑏2دقت کنید.

.کنیممیدر اینجا به سه روش نوشتن این برنامه اشاره

مثلث خیامآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 26: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

.توان از فرمول ترکیب بدست آوردکه در شکل زیر نشان داده شده اعداد باال را میهمانطور

. است« مولفهn-1مولفه از n-1»تا « مولفهn-1صفر مولفه از »ام فرمولهای ترکیب شامل nهر ردیف

هاردیفحلقه بیرونی برای ساخت )توان با استفاده از دو حلقه متداخل بنابراین می

.این مثلح را ایجاد کرد( حلقه درون آن برای تولید اعداد هر ردیفو

100

111

110

122

221

120

133

332

331

130

144

443

642

441

140

155

554

1053

1052

551

150

مولفهnمولفه از kمحاسبه ترکیب : روش اول

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 27: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

شود بدین شکل است که فرمول ترکیب ای که در شکل باال دیده مینکته𝑛𝑘

توان از فرمول بازگشتی را می.زیر نیز بدست آورد

𝑛𝑘

=

𝑛 − 1𝑘 − 1

+𝑛− 1𝑘

, 0 < 𝑘 < 𝑛

1 , 𝑘 = 0 یا 𝑘 = 𝑛

:تولید مثلح خیام با استفاده از فرمول ترکیب در ادامه نوشته شده استبرنامه for(i=0;i<n;i++){

cout<<endl;

for(j=0;j<=i;j++)

cout<<Fact(i)/(Fact(j)*Fact(i-j))<<"\t";

}

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 28: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

<include<iostream.h#دوبعدیبا استفاده از آرایه : روش دوم

void main(void){

int i,j,n,p[10][10];

cin>>n;

for(i=0;i<n;i++){

p[i][0]=p[i][i]=1;

cout<<endl;

for(j=1;j<i;j++)

p[i][j]=p[i-1][j-1]+p[i-1][j];

for(j=0;j<=i;j++)

cout<<p[i][j]<<"\t";

}

}

1

11

121

1331

14641

15101051

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 29: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

#include<iostream.h>

void main(void){

int i,j,n,p[10];

cin>>n;

for(i=0;i<n;i++){

p[i]=1;

cout<<endl;

for(j=i-1;j>0;j--)

p[j]=p[j-1]+p[j];

for(j=0;j<=i;j++)

cout<<p[j]<<"\t";

}

}

توسط آرایه یک بعدی: روش سوم

ا بته شوند از انتهاگر اعدادی را که در ردیف بعد تولید می

داشت ابتدا محاسبه کنیم نیازی به آرایه دوبعدی نخواهیم

:وشتتوان این مثلح را فقط با یک آرایه یک بعدی نو می

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 30: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

مسئله خرد کردن سکه

اینویاپنویسیبرنامهباتوانمیولیدهد،نمیارائهدرستپاسخیحریصانهروشباسکهکردنخرد

کهپولیباقیماندهوهستندواحدی6و4و1هایسکهکهکنیدفرضنمونهبرای.کردحلرامسئله

جمعاًیعنیواحدییکسکهدووواحدی6سکهیکحریصانه،روشبا.استواحد8شودپرداختباید

پتتتویتتاروشباکهاستواحدی4سکهدوپرداختدرستپاسخآنکهحالشودمیپرداختسکه3

.یافتدستدرستپاسخبهتوانمی

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 31: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

𝑛ابعادباماتریسیکمسئلهاینحلدر ×𝑀آندرکهnومختلفهایسکهتعدادMپولیمجموعبااستربرابجایگاهیهردرآیهمقدارماتریسایندرشود،میگرفتهنظردر.شوددادهبرگشتبایدکه

کهیکسکهازتوانندمیهاسکهاینوشودمیستونشمارهبرابرآنهامجموعکههاییسکهتعدادهاستکههمهکهاستآخرسطردر.شودانتخاباست،امiسطربابرابرکهiسکهتااولسطربرابر.شونداستفادههاانتخابدرتوانندمیشتیبرگمجموعآخرسطردومستوندروباشدبایدیکبرابربرگشتیمقدارمجموعدرایهاولیندرانتخابهاوباشدMبرابربایدبرگشتیمقدارآخرستونبرایسطراینآخردرآیهدروباشد2برابربایدیمداررااولسکهانتخابحقاولسطردرعبارتیبه.باشدموجودهایسکهتمامبینازتوانندمی(𝑑1)داریمرادومواولهایسکهازانتخابحقدومسطردرو(𝑑1,𝑑2)سطردروiانتخابحقام…,𝑑1,𝑑1)داریمراiتااولهایسکهبیناز ,𝑑𝑖)هایسکهتمامازانتخابحقآخرسطردرو

.داریمراموجود

سکه به روش پویامسئله خرد کردن آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 32: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

هاییکهستعدادکنیم،استفادهتوانیممیسطرآندرکههاییسکهبینازسطریهربرایستونهردر

.کنیممیانتخابراباشدسطرآنستونشمارهبرابرآنهامجموعتوانندمیکه

𝑐که:کنیممیعملترتیباینبهcماتریسدر(i,j)درایهکردنپربرای 𝑖,𝑗سطردریعنیiکهام

واحدjمجموعبرگرداندنبرایهاسکهتعدادشود،میدادهدخالتبرگشتیهایسکهدرنیزامiسکه

)ستونشماره)

])

],[

,[],,[min(],[

jdjic

djicjic

j

jic

i

i

111

00

سکه به روش پویامسئله خرد کردن آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 33: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

𝑐 𝑖 − 1,𝑗مبلغبرگشتبرایهاسکهتعدادیعنیjسکهدخالتبدونiام(سطرiام)

1 + 𝑐 𝑖,𝑗 − 𝑑𝑖سکهازکهصورتیدریعنیiبرگشتیمقداردادنبرگشتدرام(مقدارj)

𝑗یعنیمابقیبرگشتبرایوبودخواهدامiسطرسکهسکه،یکیعنیشوداستفاده − 𝑑𝑖چهاز

دخالتبرگشتیهایسکهمابقیدرنیز(iسطر)امiسکهخودکهشوداستفادهدیگرهایسکهتعداد

.شودمیداده

سکه به روش پویامسئله خرد کردن آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 34: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

وتعدادچهپاسخبهترینباشد،ریال8برابربرگشتیمقدارو1,4,6موجودهایسکهکنیدفرض:مثالباشد؟میهاسکهکدامین:پاسخ3ماتریسیک × 𝑑1یعنیاولسکهانتخابیعنیاولسطرکهدهیممیتشکیل8 = دومسطر،1

𝑑1یعنیاستمجازدومواولهایسکهانتخابیعنی = و1 𝑑2 = انتخابحقیعنیسومسطرو4

𝑑1یعنیداریمراسومتااولهایسکهاز = 1 و 𝑑2 = 4 و 𝑑3 = 6

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

سکه به روش پویاخرد کردن مثال آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 35: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

876543210

876543210𝑑1 = 1

243213210𝑑2 = 4

221213210𝑑3 = 6

min 𝑐 𝑖 − 1, 𝑗 , 1 + 𝑐 𝑖, 𝑗 − 𝑑𝑖

سکه به روش پویاخرد کردن مثال آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 36: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

3تعدادبهاصلیعملشده،ارائهمثالبرایالگوریتمایناجرایزمانمحاسبهدر × تکرارمرتبه8

برابرmمبلغبرگشتجهتسکهnوجودبانهاییپاسخآوردنبدستبرایباالیحدیعنی.شودمی

nبااست ×m

𝜃بااستبرابرآناجرائیپیچیدگیبعبارتی n ×m

یعنیداریمشیءnترکیببهنیازپاسخآوردنبدستبرایالگوریتماینازاستفادهبدونطرفیاز

𝜃مرتبهازالگوریتماینپیچیدگی 2𝑛باشدمی.

𝑚اگرو > 2𝑛عادیحالتازالگوریتممرتبهباشد𝜃 2𝑛راآنتوانمیوبودخواهدبدترنیز

𝑂برابرآنمرتبهکهدادبهبودطوری min 2𝑛,𝑛 × 𝑚باشد.

پیچیدگی زمانی خرد کردن سکه با برنامه نویسی پویاآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 37: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

ازتوانمیهاسکهخودتشخیصبرایکند،میمشخصراپرداختیهایسکهتعدادفقطفوقالگوریتم

𝑐ازمنظوراینبرایگرفت،کمکcماتریس 𝑛,𝑚(ازقبلمثالدر𝑐 اگروکنیممیشروع(3,8

𝑐 𝑛,𝑚 = 𝑐 𝑛 − 1,𝑚

𝑐بهواستنشدهاستفادهپرداختبرای)سطراینسکه(امnسکهازیعنی 𝑛 − 1,𝑚اگراما.رویممی

𝑐 𝑛,𝑚 = 1+ 𝑐 𝑛,𝑚− 𝑑𝑛

𝑐بهوچپبهاست،𝑑𝑛آنارزشکهشدهپرداختnنوعازسکهیکیعنی 𝑛,𝑚 − 𝑑𝑛ورویممی

𝑐بهتادهیممیادامهراعملیاتاین .برسیم0,0

𝜃مرتبهازدهدمیانجامراعملیاتاینکهالگوریتمی 𝑛 + 𝑐 𝑛,𝑚باشدمی.

یافتن خود سکه هاآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 38: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

ضرب زنجیره ای ماتریس ها

ینابرعالوهونداردجابجاییولیباشدمیپذیریشرکتخاصیتدارایهاماتریسایزنجیرهضرب

هایونستتعدادیعنیباشدیکسانوسطبعدکهاستپذیرامکانصورتیدرBوAماتریسدوضرب

ودضرببرایکهدانیممیهمچنینوباشندیکساندومماتریسسطرهایتعدادبااولماتریس

𝐴𝑚×𝑛ماتریس × 𝐵𝑛×𝑝بهنیاز𝑚 × 𝑛× 𝑝باشدمیضربتعداد.

𝐴𝑚×𝑛ماتریسسهضرببرای × 𝐵𝑛×𝑝 × 𝐶𝑝×𝑞داردوجودحالتدو:

qppnnm CBA )( pnm

)( qppnnm CBA

qpmpnm

qnm qnmqpn

m n p q

10 20 30 40

10*20*30 + 10*30*40 = 18000

20*30*40 + 10*20*40 = 32000

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 39: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

ماتریس را بدست بیاوریم که تعداد حالت های مختلف n+1حال می خواهیم ضرب بهینه برای ضرب

. استماتریس برابر عدد کاتاالن n+1برای ضرب

n

n

n

21

1

:بااستبرابرماتریسسهضربهایحالتتعداد

:بااستبرابرماتریسچهارضربهایحالتتعداد

221232341

2424

31

222

121

!***

!***

)!!*(

!*

*

53123434561

3636

41

332

131

!****

!****

)!!*(

!*

*

زنجیره ای ماتریس هاتعداد حالتهای ضرب آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 40: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

𝑟𝑖−1دارای ابعاد 𝑀𝑖در این مسئله فرض می کنیم ماتریس × 𝑟𝑖می باشد و

𝑚𝑖𝑗 حداقل تعداد عملیات ضرب عددی برای محاسبه𝑀𝑖 ×𝑀𝑖+1 ×⋯×𝑀𝑗 می باشد و𝑚𝑖𝑖 = 0.

𝑀𝑖: خواهیم داشت𝑚𝑖𝑗برای محاسبه ×⋯×𝑀𝑘 × 𝑀𝑘+1×⋯×𝑀𝑗

:از رابطه زیر بدست می آید𝑚𝑖𝑗بنابراین

𝑚𝑖𝑗 = 𝑖≤𝑘≤𝑗

𝑚𝑖𝑛𝑚𝑖𝑘 +𝑚𝑘+1,𝑗 + 𝑟𝑖−1 × 𝑟𝑘 × 𝑟𝑗

ضرب زنجیره ای ماتریس هاآموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 41: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

𝑚𝑖𝑖این مرحله معادل یادداشت . هیچ عمل ضرب ماتریسی: 0مرحله = 𝑖برای 0 = 1,2,… ,𝑛می باشد.

𝑖برای 𝑚𝑖,𝑖+1کلیه مرحله در این . عمل ضرب ماتریسییک : 1مرحله = 1,2,… ,𝑛 را محاسبه و در

.جدول قرار می دهیم

𝑖برای 𝑚𝑖,𝑖+2در این مرحله کلیه . دو عمل ضرب ماتریسی: 2مرحله = 1,2,… ,𝑛 را محاسبه و در جدول

. قرار می دهیم

. کنیممی که همان جواب است را محاسبه 𝑚1𝑛مرحله در این . عمل ضرب ماتریسیn-1 :n-1مرحله

زنجیره ای ماتریس هاالگوریتم ضرب آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 42: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

100115050202010 DCBA

زنجیره ای ماتریس هامثال ضرب

044332211 ,,,, mmmm

500010015010001502010000502010

443334

332223

221121

)min(

)min(

)min(,

mmm

mmm

mmm

13 11 23 12 33

24 22 34 23 44

min( 10 20 1, 10 50 1) 1200

min( 20 50 100, 20 1 100) 3000

m m m m m

m m m m m

14 11 24 12 34 13 44min( 10 20 100, 10 50 100, 10 1 100) 2200m m m m m m m

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 43: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

05000030001000022001200100000

𝑚44 = 0𝑚33 = 0𝑚22 = 0𝑚11 = 0

𝑚34 = 5000𝑚23 = 1000𝑚12 = 10000

𝑚24 = 3000𝑚13 = 1200

𝑚14 = 2200

زنجیره ای ماتریس هامثال ضرب آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 44: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

0303203110

p

341 ]][[p 413 MM

131 ]][[p 4231 MMM )(

4321 MMMM ))((

زنجیره ای ماتریس هابدست آوردن ترتیب ضرب آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 45: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

بیشترین اعداد در مسیر

5371082

765448219

537

10827654

48219

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org

Page 46: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش پنجم

46

این اسالید ها بر مبنای نکات مطرح شده در فرادرس

« آموزش طراحی الگوریتم».تهیه شده است

.ماییدبرای کسب اطالعات بیشتر در مورد این آموزش به لینک زیر مراجعه ن

faradars.org/fvsft109

آموزش طراحی الگوریتم

faradars.org/fvsft109

فرادرس

FaraDars.org