You are on page 1of 25

‫ تحلیل و اندازه‬-‫الگوریتم های بازگشتی‬

‫گیری کارایی‬
https://www.sharemation.com/xythoswfs
/webui/kashfi/DS

1
Kashfi- Islamic Azad University of Qazvin
‫الگوریتم‬

‫• مجموعه ای محدود از دستورالعمل ها که اگر دنبال شوند‬


‫عمل خاصی صورت می پذیرد‬
‫• بیان الگوریتم‪ :‬زبان گفتاری نوشتاری‪ ،‬فلوچارت‪ ،‬شبه کد‬
‫• زبان های برنامه نویسی ابزاری جهت پیاده سازی الگوریتم‬
‫ها می باشند‬

‫‪2‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫الگوریتم‪-‬ادامه‬
‫• موارد زیر در هر الگوریتم باید مشخص باشد‬
‫ورودی‪ :‬هر الگوریتم می تواند صفر یا بیشتر اقلم داده به عنوان ورودی‬ ‫–‬
‫داشته باشد‬
‫خروجی‪ :‬هر الگوریتم حداقل یک قلم داده به عنوان خروجی دارد‬ ‫–‬
‫محدودیت‪ :‬هر الگوریتم پس از تعداد محدودی مرحله پایان می پذیرد‬ ‫–‬
‫قطعیت‪ :‬کلیه دستورالعمل های یک الگوریتم باید واضح و غیر مبهم باشند‬ ‫–‬
‫کارایی‪ :‬کلیه دستورالعمل های یک الگوریتم باید عملی باشند‪ .‬هر فرمان را‬ ‫–‬
‫بتوان به راحتی با قلم و کاغذ نیز انجام داد‬

‫‪3‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫ساختمان داده ها‬
‫• ساختار‪ ،‬ارتباط و چگونگی ذخیره اقلم داده‬
‫• پیاده سازی و اجرای الگوریتم ها بر روی ساختمان داده‬
‫• مثال‪ :‬آرایه‪ ،‬رکورد‪ ،‬لیست پیوندی‬

‫‪4‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫برنامه سازی‬
‫• تعیین نیازمندی ها‪ :‬تشخیص ورودی ها و خروجی های مساله‬
‫• تجزیه و تحلیل‪ :‬تقسیم مساله به بخش های قابل مدیریت‬
‫– پایین به بال ‪ -‬غیر ساختیافته‪ :‬اول اشیاء بعد اتصالت‪ -‬دید کلی مناسبی اول موجود نیست‪-‬‬
‫در نهایت اتصال ها ضعیف است‬
‫– بال به پایین‪ :‬طرح کلی برای شکستن مساله‪ -‬مناسب برای مسائل پیچیده‬
‫• طراحی‪ :‬ارائه یک الگوریتم که مساله را با توجه به نیازمندی ها حل کند‬
‫– مستقل از زبان و نحوه پیاده سازی‬
‫– از دیدگاه اشیاء مورد نیاز دربرنامه و عملیاتی که انجام می دهند‬
‫• بهبود و کدگذاری ‪:‬‬
‫– پیاده سازی الگوریتم مورد نظر‬
‫– انتخاب نحوه ارائه داده ها‬
‫– الگوریتم مستقل از داده ها نوشته می شود‬
‫• اصلح و تست‪ :‬اطمینان از درستی برنامه‪ ،‬تست برنامه‪ ،‬اثبات درستی‪ ،‬حذف‬
‫خطا‬
‫‪5‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫تابع‬
‫یکی از اهداف مهم در ساختاردهی برنامه این است که ما راحت تر‬ ‫•‬
‫به اهداف خوانایی و درستی برنامه دست پیدا کنیم‬
‫یکی از راهکارها استفاده از تابع در برنامه می باشد‬ ‫•‬
‫مجموعه ای از دستورات که یک عملیات منطقی را انجام می دهند‬ ‫•‬
‫می توانند به صورت تابع گروه بندی شوند‬
‫ارگ نام و مشخص ه ورودی و خروج ی های تاب ع را بدانیم لزم‬ ‫•‬
‫نیست بدانیم تابع چگونه عملیات را انجام می دهد‬
‫تابع فراخوانی می شود‪ ،‬اجرا می گردد و کنترل را به مکان مناسب‬ ‫•‬
‫در تابع فراخوان بر می گراند‬
‫‪6‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫الگوریتم های بازگشتی‬
‫• بازگشتی مستقیم و غیرمستقیم‪:‬‬
‫– یک تابع ممکن است در بدنه خود‪ ،‬خودش را فراخوانی کند‬
‫– ی ک تاب ع ممک ن اس ت تواب ع دیگری را فراخوان ی کن د ک ه دوباره تابع‬
‫فراخوان را فراخوانی کنند‬
‫در مس ائلی ک ه طبیع ت بازگشت ی دارن د م ی توان حالت ‪ n‬ام را از‬ ‫•‬
‫حالت ‪n-1‬ام به دست آورد‬
‫یک ویژگی مهم الگوریتم های بازگشتی داشتن شرط خاتمه است‬ ‫•‬
‫مزیت‪ :‬سادگی برنامه نویسی‬ ‫•‬
‫عیب‪ :‬حافظه مصرفی بیشتر‬ ‫•‬

‫‪7‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫مثال‬ ‫در برنام ه زی ر خروجی‬
‫( چیست؟‬f(3,6

func f(m,n:int):int
int fact(int n) {
{ if(m=1) or(n=0)
if(n<=1) return 1; or(n=m)
else f:=1;
return (n*fact(n-1)); else
} f:=f(m-1,n)+f(m-1,n-1)

.‫ را محاسبه نماید‬a*b ‫یک الگوریتم بازگشتی بنویسید که‬

8
Kashfi- Islamic Azad University of Qazvin
‫الگوریتم های بازگشتی با پارامتر مرجع‬

Proc a(var x;integer, j:integer)


{
if x<=j then exit;
x:=x-1;
A(x,j);
write(x);

‫ چیست؟‬x=7 ‫ و‬j=3 ‫خروجی این زیر برنامه به ازاء‬

9
Kashfi- Islamic Azad University of Qazvin
‫تحلیل و اندازه گیری کارایی‬
‫• معیارهای قضاوت در مورد برنامه ها‬
‫– آیا برنامه ما را به هدف خواسته شده می رساند؟‬
‫– آیا با توجه به مشخصه های خواسته شده درست کار می کند؟‬
‫– آی ا مس تنداتی درباره چگونگ ی عملکرد برنام ه و اس تفاده از آن‬
‫وجود دارد؟‬
‫– آیا توابع به نحوی ایجاد شده اند که زیر عملیات های منطقی را‬
‫انجام دهند؟‬
‫– آیا کد خوانا است؟‬

‫‪10‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫پیچیدگی فضا و زمان‬
‫پیچیدگ ی فض ا‪ :‬مقدار حافظ ه مص رفی برای اجرا و تکمیل عملیات‬
‫خواسته شده‬
‫• پیچیدگی زمان‬
‫چگونگی رفتار الگوریتم مورد نظر‬ ‫–‬
‫نحوه عملکرد الگوریتم در بهترین و بدترین وضعیت و حالت متوسط‬ ‫–‬
‫نحوه اثر تغییر ابعاد مساله بر روی نحوه اجرای آن‬ ‫–‬
‫میزان زمان مورد نیاز برای اجرا‬ ‫–‬
‫• ارزیابی کارایی‬
‫– تخمین اولیه‬
‫– تست ثانویه‬

‫‪11‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫پیچیدگی فضا‬
‫• قسمت ثابت‬
‫مستقل از ویژگی ورودی و خروجی ها و یک نمونه مساله خاص‬ ‫–‬
‫فضای دستورات‬ ‫–‬
‫متغیرهای ساده‬ ‫–‬
‫متغیرهای پیچیده با اندازه ثابت‬ ‫–‬
‫• قسمت متغیر‬
‫– متغیرهای پیچیده که اندازه آنها وابسته به نمونه مساله است‬
‫– فضای پشت ه بازگشت ی‪ :‬پارامترهای فرمان‪ -‬متغیرهای محلی‪ -‬آدرس‬
‫برگشتی‬
‫– متغیرهای ارجاعی)‪(reference var‬‬
‫• کل فضا= فضای ثابت‪ +‬فضای متغیر‬
‫‪12‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
Float abc(float a, float b, float c)
{
return a+b+b*c+(a+b-c/(a+b)+4.0);
}

Float sum(float * a,const int n) Flaot rsum(float *a;const int n)


{ {
flaot s=0; if(n<=0) return 0;
for(int i=0;i<n;i++) else
s+=a[i]; return( rsum(a,n-1)+a[n-1]);
return s; }
}

13
Kashfi- Islamic Azad University of Qazvin
‫پیچیدگی زمان‬
‫• تعداد کل مراحل برنامه‬
‫– ‪ :Step‬بخشی دستوری یا معنایی از برنامه که زمان اجرای آن‬
‫مستقل از نمونه مساله است‬
‫– ‪ :step count‬پیچیدگ ی ه ر ‪ step‬که عموم ن ‪ 1‬در نظر‬
‫گرفته می شود‬
‫– برای حلق ه ه ا ‪ step count‬فق ط برای بخ ش کنترل ی در نظر‬
‫گرفته می شود‬
‫;‪Return a+b+b*c‬‬

‫‪14‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫تعداد کل مراحل‬

Float sum(float * a,const int n) 0


{ 0
flaot s=0; 1
for(int i=0;i<n;i++) n+1
s=a[i]+s; n
return s; 1
} 0

15
Kashfi- Islamic Azad University of Qazvin
‫تعیین عمل اصلی‬
‫• تعیین اندازه ورودی‬
‫• انتخاب ی ک دس تور ی ا گروه ی از دس تورات ب ه طوری ک ه کل کار انجام شده‬
‫توسط الگوریتم متناسب با تعداد دفعات اجرای این دستور یا دستورات باشد‬
‫• به طور کلی تحلیل پیچیدگی زمانی یک الگوریتم عبارت از تعیین تعداد دفعاتی‬
‫است که توسط این دستور یا گروه دستورها انجام می شود‬

‫)‪Float sum(float * a,const int n‬‬


‫{‬ ‫)‪T(n‬‬
‫;‪flaot s=0‬‬
‫)‪for(int i=0;i<n;i++‬‬
‫;‪s=a[i]+s‬‬
‫;‪return s‬‬
‫}‬
‫‪16‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫مرتبه اجرایی‬
‫• ب ه جای محس ابات دقی ق ب ه ابزاری نیاز داری م که زمان‬
‫اجرای الگوریتم ها را به صورت حدودی و طبقه بندی شده‬
‫نشان دهد‬
‫• هم ارزی در مسائل حد ریاضیات‬

‫↔ ))‪f(n)=O(g(n‬‬ ‫)‪c, n0>0 : n>=n0 f(n)<=c g(n‬‬


‫‪Ε‬‬

‫↔ ))‪f(n)= Ω(g(n‬‬ ‫)‪c, n0>0 : n>=n0 f(n)>=c g(n‬‬


‫‪Ε‬‬

‫‪f(n)= Ө(g(n)) ↔ c1,c2, n0>0 : n>=n0 c1g(n)<=f(n)<=c2‬‬


‫‪Ε‬‬

‫)‪g(n‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫‪17‬‬
‫ ادامه‬-‫مرتبه اجرایی‬

m ‫• برای یک چند جمله ای از درجه‬


(f(n)=O(nm –
( f(n)=Ω(nm –
( f(n)=Ө(nm –

18
Kashfi- Islamic Azad University of Qazvin
‫حلقه های ‪ for‬و ‪while‬‬
‫• حلقه های ‪ for‬تو در تو‬
‫– حلقه های مستقل‪ :‬تعداد دفعات تکرار در هم ضرب می شود‬
‫– حلقه های وابسته‬
‫• حلقه های ‪while‬‬
‫– بدترین حالت‪ ،‬بهترین حالت‪ ،‬حالت متوسط‬

‫‪19‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
elementType sum(elementType s[n])
{
elementType result;
for(i=1;i<=n;i++)
result=result+s[i];
return result;
}

20
Kashfi- Islamic Azad University of Qazvin
int search(elementType s[n],elementType x)
{
int location=1;
while(location<=n&& s[location]!=x)
location=location+1;
if(location>n)
return 0;
else return location;
}

(O(n :‫• بدترین حالت‬


(O(1:‫• بهترین حالت‬

21
Kashfi- Islamic Azad University of Qazvin
‫تحلیل حالت متوسط‬
‫• عنصر‪ x‬به احتمال ‪ p‬در آرایه است‬
‫• عنصر ‪ p‬به احتمال ‪ n/1‬ممکن است در هر کدام از خانه‬
‫های آرایه واقع شده باشد‬
‫• ‪(O(n‬‬

‫)‪A(n)=∑(k*p/n)+n(1-p‬‬

‫‪22‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫حلقه های وابسته‬

for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
some operations;

23
Kashfi- Islamic Azad University of Qazvin
‫مرتبه اجرایی توابع بازگشتی‬
‫• تعیین رابطه ی زمانی بازگشتی با استفاده از تابع بازگشتی‬
‫• جایگزای مکرر‬
‫• برای مس اله برج های هانوی و جایگش ت های ‪ n‬عنص ر تحلیل‬
‫مربوطه را انجام دهید‬
‫)‪int fact(int n‬‬
‫{‬ ‫‪(fact(n)=n*fact(n-1‬‬
‫;‪if(n<=1) return 1‬‬
‫‪else‬‬
‫;))‪return (n*fact(n-1‬‬
‫‪T(n)=T(n-1)+d‬‬
‫}‬

‫)‪O(n‬‬
‫‪24‬‬
‫‪Kashfi- Islamic Azad University of Qazvin‬‬
‫مرتبه الگوریتم ها‬
• O(log n a)
• O(n)
‫مرتبه‬
• O(n log n a) ‫چندجمله ای‬
• O(nm)
• O(an) ‫مرتبه نمایی‬
• O(n!)

25
Kashfi- Islamic Azad University of Qazvin

You might also like