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

Post on 19-Jan-2017

130 views 15 download

Transcript of آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش...

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

مثلح خیّام

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

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

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

سری فیبوناچی

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

سری فیبوناچی

1211100

nnfibnfib

n

n

nfib

)()(

)(

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

𝑂برابر 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

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

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

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

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

000 joriifjic ],[

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

.باشدمیارزش

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

mwwmicpmic

mwmic

mori

mic

iii

i

]),[],,[max(

],[],[

111

000

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

),( 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

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

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

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

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

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

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

)!(nO

)( 3nO

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

);;(

);;(

);;(

jkAkiAjiAjiA

jnjjfor

iniifor

knkkfor

11

1

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

1

2 3

415

30

5

15

155505

051515030515050

50

4321

4321

C

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

111

1211331

1464115101051

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

. است« مولفه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

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

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

𝑛𝑘

=

𝑛 − 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

<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

#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

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

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

)ستونشماره)

])

],[

,[],,[min(],[

jdjic

djicjic

j

jic

i

i

111

00

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

.شودمیداده

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

876543210

876543210𝑑1 = 1

243213210𝑑2 = 4

221213210𝑑3 = 6

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

nبااست ×m

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

𝑐 𝑛,𝑚 = 𝑐 𝑛 − 1,𝑚

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

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

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

هایونستتعدادیعنیباشدیکسانوسطبعدکهاستپذیرامکانصورتیدر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

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

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

n

n

n

21

1

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

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

221232341

2424

31

222

121

!***

!***

)!!*(

!*

*

53123434561

3636

41

332

131

!****

!****

)!!*(

!*

*

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

𝑚𝑖𝑗 = 𝑖≤𝑘≤𝑗

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

. قرار می دهیم

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

0303203110

p

341 ]][[p 413 MM

131 ]][[p 4231 MMM )(

4321 MMMM ))((

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

5371082

765448219

537

10827654

48219

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

faradars.org/fvsft109

فرادرس

FaraDars.org

46

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

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

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

faradars.org/fvsft109

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

faradars.org/fvsft109

فرادرس

FaraDars.org