اسلاید جلسه اول طراحی الگوریتم
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