اسلاید جلسه اول طراحی الگوریتم

Download Report

Transcript اسلاید جلسه اول طراحی الگوریتم

‫‪ ‬منبع درس ی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫کتاب «طراحی الگوریتمها» نوشته بهروز قلی زاده دانشگاه شریف‪.‬‬
‫کتاب طراحی الگوریتمها دانشگاه پیام نور‪.‬‬
‫طراحی الگوریتمها با زبان ‪ C++‬نوشته نیپولتان‪.‬‬
‫هر منبع خوب دیگر‪.‬‬
‫‪ ‬بارم بندی‬
‫‪‬‬
‫‪‬‬
‫امتحانات کتبی (‪ 17‬نمره)‪ :‬پایانترم ‪ 10‬نمره ‪ +‬میانترم ‪ 7‬نمره‬
‫تمرینات (‪ 3‬نمره)‬
‫‪ ‬محتویات درس ی‪leila-moazami.ir :‬‬
‫‪ ‬ایمیل‪[email protected] :‬‬
‫‪2‬‬
‫‪ ‬تحلیل پیچیدگی الگوریتم ها‬
‫‪ ‬بررس ی روابط بازگشتی و به دست آوردن فرمول آنها‬
‫‪ ‬روش حریصانه‬
‫‪ ‬درخت پوشای کمینه‬
‫‪ ‬کد هافمن و ‪...‬‬
‫‪ ‬روش تقسیم و حل‬
‫‪ ‬جستجوی دودویی‬
‫‪ ‬مرتبسازی ادغامی و ‪...‬‬
‫‪ ‬روش برنامهسازی پویا‬
‫‪ ‬ضرب ماتریسها‬
‫‪3‬‬
‫‪ ‬درخت جستجوی دودویی و ‪...‬‬
‫‪ ‬گرفته شده از ریشه خوارزمی‬
‫‪ ‬روش انجام كار يا حل مسئله‬
‫‪ ‬مجموعهههای متنههازی از دستورالهملهاسههت کههه بههه ترتیههب خا ه ی اجهرا‬
‫میشوند و مسئلهای را حل میکنند‪.‬‬
‫‪ ‬روش ی گام به گام برای حل مسئله‬
‫‪ ‬الگههوریتم گههاه دارای مراحلههی اسههت کههه تد هرار میشههود و یهها در مرحلهههای‬
‫نیازمند تصمیمگیری است‪.‬‬
‫‪ ‬بیان الگوریتم با شبه کد‬
‫‪4‬‬
‫خروجی‬
‫• الگوریتم ممکن است بدون ورودی باشد‪.‬‬
‫قطعیت‬
‫• دستورات الگوریتم باید با زبانی دقیق و بیابهام بیان شوند‪ .‬هر دستورالعمل نیز باید‬
‫انجامپذیر باشد‪ .‬دستورهایی نظیر «حاصل تقسیم پنج بر صفر را محاسبه کنید» مجاز‬
‫نیستند‪.‬‬
‫پایان پذیری‬
‫• الگوریتم باید دارای شروع و پایان مشخص ی باشد‪ ،‬به نحوی که اگر دستورات آن را‬
‫دنبال کنیم‪ ،‬برای تمامی حاالت‪ ،‬الگوریتم پس از طی مراحل شمارا و متناهی خاتمه‬
‫یابد‪.‬‬
‫• یک تفاوت میان برنامه و الگوریتم پایان پذیری است‪.‬‬
‫‪5‬‬
‫‪ ‬مهیارهای کارایی یک الگوریتم‬
‫زمان مصرفی‬
‫• با شمارش و محاسبه تهداد عملیات کلیدی الگوریتم اندازهگیری میشود‪.‬‬
‫حافظه مصرفی‬
‫• با شمارش و محاسبه ماکزیمم حافظه مورد نیاز الگوریتم اندازهگیری میشود‪.‬‬
‫‪ ‬عمل کلیدی الگوریتم‬
‫‪‬‬
‫‪6‬‬
‫به دستوراتی گفته میشود که کل کار انجام شده توسط الگوریتم متناسب با‬
‫تهداد دفهاتی باشد که این دستورات انجام میشود‪.‬‬
‫‪ M ‬یک الگوریتم و ‪ n‬تهداد دادههای ورودی است‪.‬‬
‫پیچیدگی الگوریتم ‪ M‬برابر با )‪ f(n‬است که زمان اجرای مورد‬
‫نیاز الگوریتم را بر حسب تهداد داده ورودی یهنی ‪ n‬می دهد‪.‬‬
‫‪ ‬حافظه اغلب اوقات فقط مضربی از ‪ n‬است بنابراین در پیچیدگی لحاظ‬
‫نمی شود‪.‬‬
‫‪ ‬بهترین حالت‪ ،‬حالت میانگین‪ ،‬بدترین حالت‬
‫پیچیدگی یک الگوریتم یهنی زمان اجرای آن در بدترین حالت‪.‬‬
‫‪7‬‬
‫‪ ‬بهترین حالت‬
‫‪‬‬
‫حداقل مقدار ممدن )‪f(n‬‬
‫‪ ‬حالت میانگین‬
‫‪‬‬
‫‪‬‬
‫مقدار مورد انتظار یا امید ریاض ی )‪ f(n‬است‪.‬‬
‫فرض کنید اعداد ‪ n1‬و ‪ ...‬و ‪ nk‬به ترتیب با احتمال ‪ p1‬و ‪ ...‬و ‪ pk‬ظاهر می‬
‫شوند‪ .‬امید ریاض ی این اعداد برابر است با‪:‬‬
‫‪ ‬بدترین حالت‬
‫‪‬‬
‫‪8‬‬
‫‪E = n1*p1 + n2*p2 + … + nk*pk‬‬
‫ماکزیمم مقدار )‪ f(n‬برای هر ورودی ممدن است‪.‬‬
‫‪‬‬
‫‪ ‬فرض کنید یک آرایه ‪ n‬عنصری داریم و ‪ item‬مشخص ی برای جستجو‬
‫در آرایه داده شده است‪ .‬الگوریتمی بنویسید که اگر ‪ item‬وجود داشت‬
‫‪ LOC‬را پیدا کند و در صورت عدم وجود پیغام پیدا نشد را نمایش دهد‪.‬‬
‫(با استفاده از جستجوی خطی)‬
‫‪9‬‬
‫;‪k=0; LOC=-1‬‬
‫)‪while (LOC==-1 && k<N‬‬
‫{‬
‫;‪If (item == data[k]) LOC=k‬‬
‫;‪k=k+1‬‬
‫}‬
‫;”‪If (LOC==-1) write “item is not in the data‬‬
‫;”‪else write LOC “is the location of item‬‬
‫تهداد عملیات تدرار حلقه در ادامه آمده است‪:‬‬
‫‪ ‬بهترین حالت ‪C(n)=1‬‬
‫‪ ‬بدترین حالت ‪C(n)=n‬‬
‫‪ ‬حالت میانگین‬
‫= )‪C(n) = 1.(1/n) + 2.(1/n) + … + n.(1/n‬‬
‫= )‪1/n * (1+2+…+n‬‬
‫‪(n+1)/2‬‬
‫‪10‬‬
‫‪ ‬پیچیدگی الگوریتم ‪ M‬یهنی )‪ f(n‬با زیاد شدن تهداد دادههای ورودی یهنی‬
‫‪ n‬افزایش مییابد‪ .‬برای تهیین آهنگ این افزایش‪ f(n) ،‬را با تهدادی از‬
‫توابع مانند توابع زیر بیان و مقایسه می کنیم‪:‬‬
‫‪1, Log n, n, nLog n, n2 ,n3 , … ,nk ,2n,3n, … , kn , n!, nn‬‬
‫‪ ‬این توابع به ترتیب آهنگ رشدشان نوشته شدهاند‪.‬‬
‫‪11‬‬
‫‪ ‬برای مقایسه )‪ f(n‬با توابع استاندارد از نماد ‪ O‬استفاده میکنیم که به صورت‬
‫زیر تهریف میشود‪:‬‬
‫)‪ f(n‬و )‪ g(n‬دو تابع روی اعداد صحیح مثبت هستند و این خاصیت را دارند‬
‫که )‪ f(n‬به ازای تمام مقادیر ‪ n‬توسط مضربی از )‪ g(n‬محدود شده است‪ .‬به‬
‫عبارت دیگر فرض کنید عدد صحیح مثبت ‪ n0‬و عدد مثبت ‪ C‬وجود دارند‬
‫طوریده به ازای تمام ‪n‬های بزرگتر از ‪ n0‬داریم‪:‬‬
‫|)‪|f(n)|<= C|g(n‬‬
‫در این صورت میتوان نوشت‪ f(n) :‬از مرتبه )‪ g(n‬است یا‪:‬‬
‫))‪f(n) = O(g(n‬‬
‫‪ f(n)=O(g(n)) ‬است اگر و فقط اگر مقادير ثابت ‪ n0‬و ‪ c‬وجود داشته باشد‬
‫طوریده براي تمامي مقادير ‪ n‬که ‪ f(n) ،n ≥ n0‬کوچدتر يا مساوي )‪cg(n‬‬
‫باشد‪.‬‬
‫‪12‬‬
‫‪ : O(1) ‬زمان محاسبه ثابت است‪.‬‬
‫‪ : O(n) ‬يک تابع خطي‬
‫‪ : O(n2) ‬یک تابع درجه دو‬
‫چند جمله ای )‪ P(x‬درجه ‪ n‬یهنی‬
‫قضیه‬
‫‪P(x) = a0 + a1x + a2x2 + … + anxn‬‬
‫از مرتبه )‪ O(xn‬است‪.‬‬
‫‪13‬‬
‫‪ ‬چنانچه بین توابع استاندارد عمل ‪ +‬یا – باشد‪ ،‬مرتبه جمله برابر با‬
‫مرتبه قویترین تابع آن است‪.‬‬
‫)‪+ Log n + n2 = O(n2‬‬
‫)‪n3 + n = O(2n‬‬
‫‪n‬‬
‫‪ 2n +‬‬
‫‪ ‬همیشه باید کوچدترین ‪ O‬ممدن را برای تهیین پیچیدگی به کار برد‪.‬‬
‫‪ 3n+3‬‬
‫)‪3n+3 = O(n‬‬
‫‪14‬‬
‫)‪= O(n2‬‬
‫)‪ 3n+3 = O(n‬‬
‫‪ f(n)=Ω(g(n)) ‬است اگر و فقط اگر مقادير مثبت ‪ n0‬و ‪ c‬وجود‬
‫داشته باشد طوریده براي تمامي مقادير ‪ n‬که ‪|f(n)| ،n ≥ n0‬‬
‫بزرگتر يا مساوي |)‪ |cg(n‬باشد‪.‬‬
‫‪ ‬همیشه باید بزرگترین )‪ g(n‬ممدن انتخاب شود‪.‬‬
‫قضیه‬
‫‪15‬‬
‫)‪= Ω(n2‬‬
‫‪ 3n2+2‬‬
‫)‪= Ω(n)  3n2+2 = Ω(n2‬‬
‫‪ 3n2+2‬‬
‫چند جمله ای )‪ P(x‬درجه ‪ n‬یهنی‬
‫‪P(x) = a0 + a1x + a2x2 + … + anxn‬‬
‫که در آن ‪ an >0‬است آنگاه )‪ P(x)=Ω(xn‬است‪.‬‬
‫‪ f(n) = θ(g(n)) ‬اگر و فقط اگر ثابتهای مثبت ‪ C1‬و ‪ C2‬و ‪ n0‬وجود‬
‫داشته باشند که برای تمام ‪ n ≥ n0‬داشته باشیم‪:‬‬
‫|)‪|C1g(n)| <= |f(n)| <= |C2g(n‬‬
‫‪ θ ‬دقیقتر از ‪ O‬و ‪ Ω‬می باشد و مرتبه دقیق )‪ f(n‬را نشان می دهد‪.‬‬
‫‪ f(n) = θ(g(n)) ‬اگر و فقط اگر )‪ g(n‬هم کران بال هم کران پایین‬
‫)‪ f(n‬باشد‪.‬‬
‫قضیه‬
‫چند جمله ای )‪ P(x‬درجه ‪ n‬یهنی‬
‫‪P(x) = a0 + a1x + a2x2 + … + anxn‬‬
‫که در آن ‪ an >0‬است آنگاه )‪ P(x)=Θ(xn‬است‪.‬‬
‫‪16‬‬
17
‫‪ ‬بايد به اندازه کافی الگوريتم را درک کرده باشيم تا بهترين رفتار و رفتار‬
‫میانگین را توليد و محاسبه کنيم‪ .‬چون برآورد رفتار آماری ورودیها امری‬
‫دشوار است‪ ،‬در اکثر موارد‪ ،‬بدترين حالت را محاسبه میکنیم‪.‬‬
‫‪ ‬اگر الگوريتم شامل بخشهای مختلفی باشد که هر قسمت پيچيدگی‬
‫متفاوتی دارد‪ ،‬مرتبه بزرگی هر قسمت را پيدا کرده و بزرگترين مرتبه را به‬
‫عنوان پيچيدگی کل الگوريتم در نظر میگیريم‪.‬‬
.‫اثبات کنید‬
 5n
= O(n2)
5n<=5n2 n0=1, c=5
 T(n)=n(n-1)/2 T(n) = O(n2)
n(n-1)/2 <= n2/2  n0=1, c=1/2
 n2+10n = O(n2)
n2+10n <= 11n2 n0=1, c=11
 n = O(n2)
n0=1, c=1
19
.‫ پیچیدگی الگوریتم زیر را تهیین کنید‬
x=0;
For i:=1 to n
For j:=1 to m
x++;
1
n
n*m
n*m
--------O(n*m)
n>=m : O(𝒏𝟐 )
n<m : O(𝒎𝟐 )
20
.‫ پیچیدگی الگوریتم زیر را تهیین کنید‬
x=0;
For i:=1 to n
x=x+20;
For j:=1 to m
x++;
1
n
n
m
m
--------O(n+m)
n>=m : O(n)
n<m : O(m)
21
‫‪ ‬پیچیدگی الگوریتم زیر را تهیین کنید‪.‬‬
‫;‪X=0‬‬
‫تعداد دفعات تکرار‬
‫حلقه یک بار است‪.‬‬
‫پیچیدگی‪:‬‬
‫)‪O(1‬‬
‫;‪i=n‬‬
‫)‪While (i>1‬‬
‫{‬
‫;‪X--‬‬
‫;‪i=i%2‬‬
‫}‬
‫‪22‬‬
‫‪ ‬پیچیدگی الگوریتم زیر را تهیین کنید‪.‬‬
‫تعداد دفعات تکرار حلقه‬
‫برابر با ‪ Log2 n‬است‪.‬‬
‫پیچیدگی‪:‬‬
‫)‪O(Log n‬‬
‫‪23‬‬
‫;‪X=0‬‬
‫;‪i=n‬‬
‫)‪While (i>1‬‬
‫{‬
‫;‪X--‬‬
‫;‪i=i/2‬‬
‫}‬
.‫ پیچیدگی الگوریتمهای زیر را تهیین کنید‬
K=0;
For (i=1; i<=n; i++)
{
For (j=1; j<=n; j++)
k=k+1;
j=1;
While (j<n)
{
k++;
j=2*j;
}
}
S=0;
For (i=0; i<n; i++)
For (j=0; j<i; j++)
For (k=0; k<3; k++)
S++;
24
‫‪ ‬درستی و نادرستی عبارات زیر را مهین کنید‪.‬‬
‫‪ 2n2nn‬‬
‫)‪+ n2logn = O(n22n‬‬
‫)‪ n2/logn = O(n‬‬
‫‪25‬‬