Upload
faradars
View
130
Download
15
Embed Size (px)
Citation preview
آموزش طراحی الگوریتم
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