25
الگوریتم آموزش طراحی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: آموزش طراحی الگوریتم به همراه حل مثال های عملی - بخش دوم

آنعمیمتباوگرفتکمکدیگریمقادیربامشابهروشیازتوانمیمسایلبعضیحلوتعریفدر

5بااستبرابرفاکتوریل5یمئبگوتوانیممیفاکتوریلتعریفدرمثالطوربه.کردحلرااصلیمسئله

.استشدهاستفادهخودشازفاکتوریلتعریفبرایدیگرعبارتبه.فاکتوریل4ضربدر

!4 ×5! =51 ×2 ×3 ×4 ×5! =5

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

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

.کندفراخوانیرابرنامهزیریاتابعدوبارهکهدستوری:بازگشتنقطه-1

.شودهابازگشتاتمامباعثمشخصشرطیکباکهدستوری:بستبننقطه-2

الگوریتم های بازگشتی

𝑛! = 𝑛 × 𝑛 − 1 !0! = 1! = 1

𝑎𝑏 = 𝑎 × 𝑎𝑏−1

𝑎0 = 1

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

تابعآنبهداشتیم،نیازقبلمرحلهدرتابعمقداربهفقطام،nمرحلهدرتابعمقدارمحاسبهبرایاگر

مرحلهدودرتابعمقداربهام،nمرحلهدرتابعمقدارمحاسبهبرایاگر.شودمیگفتهاولمرتبهبازگشتی

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

𝑏𝑖واستمتجانس ,𝑖 = 1,2,… ,𝑛هستندثابتمقادیرها.

𝑇 𝑛 = 𝑏𝑛𝑇 𝑛 − 1 , 𝑛 > 0

𝑇 0 = 𝑏0

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

𝑏𝑖وشودمینامیدهنامتجانساولمرتبهبازگشتیرابطهیکزیررابطه ,𝑐𝑖 ,𝑖 = 1,2,… ,𝑛ثابتمقادیر.هستند

𝑇 𝑛 = 𝑏𝑛𝑇 𝑛 − 1 + 𝑐𝑛 , 𝑛 > 0

𝑇 0 = 𝑏0

.هستندثابتمقادیرdوa،b،cوشودمینامیدهمتجانسدوممرتبهبازگشتیرابطهیکزیررابطه

𝑇 𝑛 = 𝑎𝑇 𝑛 − 1 + 𝑏𝑇 𝑛 − 2 , 𝑛 > 1

𝑇 0 = 𝑐 , 𝑇 1 = 𝑑

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

الگوریتم های بازگشتی

𝑛! = 𝑛 × 𝑛 − 1 !0! = 1! = 1

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

الگوریتم های بازگشتی

محاسبه توان به روش بازگشتی

𝑎𝑏 = 𝑎 × 𝑎𝑏−1

𝑎0 = 1

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

الگوریتم های بازگشتی

𝑓𝑖 = 𝑓𝑖−1 + 𝑓𝑖−2𝑓1 = 𝑓2 = 1

محاسبه سری فیبوناچی به روش بازگشتی

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

11

216326496640

6464576

الگوریتم های بازگشتی

م به روش بازگشتی.م.محاسبه ب

int BMM(int a,int b){

if(a%b==0)

return b;

else

return BMM(b,a%b);

}

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

الگوریتم های بازگشتی

م به روش بازگشتی.م.محاسبه ب

تجزیه به عامل های اول به روش بازگشتی

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

نمایش مثلثی اعداد

1

2 1

3 2 1

4 3 2 1

:

#include <iostream.h>

void main(void){

int i,j,n;

cout<<"Enter number: ";

cin>>n;

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

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

cout<<j<<“\t”;

cout<<endl;

}

}

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

14

#include <iostream.h>

void Num(int n){

cout<<n<<“\t”;

if(n>1)

Num(n-1);

}

void Line(int n){

if(n>1)

Line(n-1);

Num(n);

cout<<endl;

}

void main(void){

Line(5);

}

1

2 1

3 2 1

4 3 2 1

:

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

الگوریتم های بازگشتی

برج هانوی

لهمییکرویبرکوچکبهبزرگازدیسکnکنیدفرض

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

اتعملی.کنیممنتقلترتیبهمانباسوممیلهبهرا

زرگتربدیسکوبودخواهدتکیبصورتدیسکهاانتقال

.گیردقرارکوچکتردیسکرویبرتواندنمی

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

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

.دهیممیانتقال(B)کمکیمیلهبه(A)مبدامیلهازرادیسکn-1ابتدا.1

.کنیممیمنتقل(C)مقصدمیلهبهرااستدیسکبزرگترینکهAمیلهدرباقیماندهدیسکتنها.2

3.n-1کمکیمیلهدرموجوددیسکBمیلهبهراCدهیممیانتقال.

.شودمیامn-1حالتمسالهبهتبدیلامnمساله3تا1مراحلانجامبا.4برای این . برسیمn=1شود تا هنگامیکه به حالت بدین ترتیب با تکرار این مراحل، مرتباً مساله کوچک می

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

:نوشتزیرتابعشکلبهتوانمیرافوقمراحل

void Tower(int n,char A,char B,char C){

if(n==1)

cout<<"Move a disk from "<<A<<" to "<<C<<endl;

else{

Tower(n-1,A,C,B);

cout<<"Move a disk from "<<A<<" to "<<C<<endl;

Tower(n-1,B,A,C);

}

}

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

𝑂برنامهایناجراییمرتبهدیگرعبارتبه.استجابجاییبهنیاز 2𝑛واستنماییمرتبههمانیا

.بکشدطولهاساعتاستممکنکامپیوترکمکبهمسالهحلبزرگهایnبرای

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

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

.کندمیحلرامسالهخودبهخودسازدپیچیدهعملیات

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

الگوریتم های بازگشتی

اتیمحاسبعبارتیکدرپرانتزداخلعبارتکامپایلرمبحثدر

آکرمانتابع

𝐴𝐶𝐾 𝑚, 𝑛 =

𝑛 + 1 𝑚 = 0 اگر𝐴𝐶𝐾 𝑚 − 1,1 𝑚 ≠ 0 و 𝑛 = 0 اگر

𝐴𝐶𝐾 𝑚 − 1, 𝐴𝐶𝐾 𝑚, 𝑛 − 1 اینصورت غیر در

a − b ) n − 1) + 2 ∗ x + 5/ a − n))

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

روش تقسیم و حل

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

روش حریصانه

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

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

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

روش بازگشت به عقب

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

روش انشعاب و تحدید

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

faradars.org/fvsft109

فرادرس

FaraDars.org

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

25

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

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

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

faradars.org/fvsft109

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

faradars.org/fvsft109

فرادرس

FaraDars.org