مشاهده - سید محمد بیدکی
Download
Report
Transcript مشاهده - سید محمد بیدکی
درس طراحی الگوریتم ها
فصل اول
کارایی ،تحلیل و مرتبه الگوریتم ها
مدرس :سید محمد بیدکی
زمستان 1391
هدف از مطالعه درس طراحی الگوریتم
به طور معمول برای حل یک مسئله مشخص بیش از یک الگوریتم وجود
دارد.
مثال :یافتن معنی کلمه الگوریتم در فرهنگ لغت
برخی از این الگوریتم ها از بقیه کاراتر می باشند.
الگوریتمی انتخاب می شود که بیشترین کارایی را داشته باشد.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
2
هدف از مطالعه درس طراحی الگوریتم
پرسش های مطرح شده:
آیا الگوریتمی که ارائه می شود درست است یا خیر؟
چگونه الگوریتم های مربوط به یک مسئله مقایسه می شوند؟
کارایی ) (efficiencyهر الگوریتم چگونه تعیین می شود؟
برای این کار نیاز به تحلیل الگوریتم ها داریم.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
3
تفاوت دروس طراحی الگوریتم و ساختمان داده ها
ساختمان داده ها
طراحی الگوریتم ها
مسائل ساده تر
مسائل پیچیده تر
یادگیری مسائل قطعی :مرتب سازی،
جست و جو و ...
یادگیری روش های کلی جهت حل مسائل
قطعی :تقسیم و غلبه ،برنامه نویسی پویا،
الگوریتم حریصانه و ...
چگونگی حل این مسائل قطعی
چگونگی حل مسائل گوناگون با استفاده از
این روش ها
مروری بر درس ساختمان داده ها
یادآوری مفاهیم اولیه ریاضیات ( سری ∑ ،لگاریتم logو ) ...
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
4
تعریف الگوریتم
دنباله ای از دستورات که با اجرای مرحله به مرحله آنها می توان به نتیجه
مورد نظر دست یافت.
خصوصیات هر الگوریتم:
دارای ورودی است.
دارای خروجی است.
دارای ترتیب (توالی) است.
واضح و صریح است ( .بدون ابهام می باشد).
محدود است.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
5
تعریف مسئله
مسئله :سؤالی که به دنبال پاسخ آن هستیم.
.1مرتب سازی یک لیست Sمتشکل از nعدد به ترتیب غیر نزولی .پاسخ دنباله مرتب از n
عدد می باشد.
پارامترهای مسئله
.2تعیین اینکه آیا عدد xدر لیست Sمتشکل از nعدد وجود دارد یا خیر .در صورت
وجود پاسخ ”بله“ و در غیر این صورت پاسخ برابر با ”خیر“ خواهد بود.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
6
تعریف نمونه مسئله
مسائلی که شامل پارامترها هستند بیانگر کالسی از مسائل می باشند.
نمونه مسئله :هر انتساب خاصی از مقادیر به پارامترها
راه حل یک نمونه مسأله :پاسخ سؤال پرسیده شده توسط مسأله در آن نمونه
مسئله
نمونه مسئله :1
راه حل:
}n = 6 , S = {8 , 13, 5, 11, 7, 10
}{5, 7, 8, 10, 11,13
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
7
الگوریتم درست/نادرست
چنانچه الگوریتمی بتواند برای هر نمونه از ورودی ،خروجی درست را تولید
کند و متوقف شود ،آن الگوریتم درست ) (correctاست.
چناچه نرخ خطای الگوریتم های نادرست قابل کنترل باشد می توان از
آنها نیز استفاده کرد.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
8
حل مسئله
حل مسئله فرایندیست شامل 3بخش:
تعیین پارامترهای مسئله
بیان الگوریتم
پاسخ مسئله
الگوریتم می تواند به زبان طبیعی ،به صورت برنامه کامپیوتری (توسط
زبان برنامه نویسی) یا طراحی سخت افزاری مشخص شود.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
9
بیان الگوریتم
یک الگوریتم برای مسأله ( 2جستجو):
با شروع از اولین عنصر Sبه ترتیب xرا با هر یک از عناصر Sمقایسه کن تا
اینکه xرا پیدا کنی یا به انتهای لیست برسی .اگر xپیدا شد پاسخ ”بله“ و در
غیر این صورت پاسخ ”خیر“ را تولید کن.
معایب نوشتن الگوریتم ها به زبان طبیعی
مشکل بودن نوشتن و درک الگوریتم های پیچیده
مشکل بودن ترجمه آن به یک زبان برنامه نویسی
لذا الگوریتم ها را توسط شبه کدهایی از یک زبان برنامه نویسی بیان می
کنیم.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
10
شبه کد
بیان الگوریتم جستجوی ترتیبی به صورت شبه کد:
در شبه کد هر گاه بتوانیم مراحل را با وضوح بیشتر
با استفاده از روابط ریاضی و توضیحات انگلیسی نشان
می دهیم.
{ ) if ( low ≤ x ≤ high
…
{
ساختار کنترلی غیر استاندارد:
{ )repeat ( n times
…
}
; exchange x and y
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
11
تمرین در کالس
توجه :برای هر الگوریتم ورودی و خروجی را تعیین کنید.
الگوریتم جمع عناصر یک آرایه
الگوریتم ضرب ماتریسها
الگوریتم مرتب سازی عناصر به ترتیب غیر نزولی ( -exchange sortمرتب
سازی تعویضی)
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
12
پاسخ
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
13
اهمیت توسعه الگوریتم های کارا
کارآیی الگوریتم ها همواره و بدون در نظر
گرفتن افزایش سرعت کامپیوترها و کاهش
قیمت حافظه ،باید مد نظر باشد.
چرا؟
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
14
الگوریتم جستجوی ترتیبی
Void seqsearch ( int n, const keytype S[ ], keytype x,
index &location)
{
location = 1;
while (location <= n && S[location] ! = x)
location++;
if (location > n )
location = 0 ;
}
15
بیدکی: مدرس- تحلیل و مرتبه الگوریتم ها، کارائی- فصل اول- درس طراحی الگوریتم ها
الگوریتم جستجوی دودویی
Binary search
شرط انجام این جستجو داشتن
یک آرایه مرتب است.
تقسیم آرایه به دو نیمه و
مقایسه با عنصر میانی
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
16
مقایسه دو الگوریتم ][1
با فرض داشتن آرایه 32عنصری
32مقایسه در بدترین حالت
Linear search:
Binary search:
تعداد مقایسه های انجام شده توسط
جستجوی ترتیبی )(n
تعداد مقایسه های انجام شده توسط
جستجوی دودویی )(lg n +1
اندازه آرایه
128
8
128
1024
11
1024
1048576
21
1048576
4294967294
33
4294967294
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
17
الگوریتم دنباله فیبوناچی
محاسبه جمله nام فیبوناچی (تکراری)
محاسبه n+1جمله
محاسبه جمله nام فیبوناچی
(بازگشتی)
n
محاسبه بیش از 2 2جمله
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
18
الگوریتم جمله nاُم فیبوناچی (بازگشتی)
با رسم درخت بازگشتی واضح است که
این الگوریتم بسیار ناکارآمد می باشد.
تعداد جمالت
محاسبه شده
n
1
0
1
1
3
2
5
3
9
4
15
5
25
6
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
19
الگوریتم جمله nاُم فیبوناچی (بازگشتی) ...
: T(n) تعداد جمالت محاسبه شده در درخت بازگشتی
با افزودن 2واحد به ،nتعداد جمالت درخت بیش از 2برابر می شود.
)T(n) > 2 × T(n-2
)> 2 × 2 × T(n-4
)> 2 × 2 × 2 × T(n-6
.
.
)> 2 × 2 × 2 × … × 2 ×T(0
T(n) > 2n/2
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
20
الگوریتم جمله nاُم فیبوناچی (تکراری)
الگوریتمی کارآمد
برای تعیین جمله -nاُم دنباله ،هر
یک از ) (n-1جمله نخست را فقط
یک بار محاسبه می کند.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
21
مقایسه دو الگوریتم ][2
زمان اجرای بازگشتی
زمان اجرای )(ns
تکراری
روش بازگشتی
روش
تکراری
n
1048 μs
1s
41
61
1.048576
1.1*109
41
61
40
60
13 days
36 years
3.8*107 years
101
121
161
1.1*1015
1.2*1018
1.2*1024
101
121
161
100
120
160
4*1013 years
201
1.3*1030
201
200
با فرض محاسبه هر جمله در مدت 1نانوثانیه
1 μs = 10-6 s
1 ns = 10-9 s
Note:
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
22
تحلیل الگوریتم ها
هدف از تحلیل الگوریتم ها:
بررسی رفتار الگوریتم از نظر زمان اجرا و مقدار حافظه مصرفی
قبل از پیاده سازی
مقایسه الگوریتم ها از نظر کارآیی
Time complexity
Space complexity
عوامل موثر در زمان اجرای یک برنامه :
سرعت سخت افزار
نوع کامپایلر ( بهینگی کد مقصد)
برنامه نویس ( بهینگی کد منبع)
اندازه ورودی
ترکیب داده های ورودی
پیچیدگی الگوریتم
...
در الگوریتم های مختلف
تاثیر ثابت دارند
مهمترین عامل ،پیچیدگی الگوریتم می باشد که خود
تابعی از اندازه ورودی است.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
23
تحلیل الگوریتم ها
چنانچه اندازه داده ها را 10میلیون عدد در نظر بگیریم:
مرتب سازی درجی به طور تقریبی 2.3روز
مرتب سازی ادغامی 20دقیقه زمان الزم دارد.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
24
تحلیل الگوریتم ها
تحلیل پیچیدگی زمانی
محاسبه کارآیی بر حسب زمان
هدف تعیین تعداد سیکل های cpuنیست چون در ماشینهای مختلف،
متفاوت است.
مستقل از کامپیوتر ،زبان برنامه نویسی و برنامه نویس
تحلیل پیچیدگی زمانی یک الگوریتم ،تعیین تعداد دفعاتی است که
عملیات اصلی الگوریتم ( مقایسه ،جمع ،ضرب و )...بر حسب اندازه ورودی
انجام می شود.
برای تحلیل پیچیدگی یک الگوریتم تابعی به نام ) T(nدر نظر میگیریم
که در آن nاندازه ورودی می باشد.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
25
اندازه ورودی
در بسیاری از الگوریتم ها یافتن میزانی منطقی از اندازه ورودی آسان است
مثال:
جستجوی ترتیبی
محاسبه مجموع عناصر آرایه
مرتب سازی تعویضی
جستجوی دودوی
ضرب ماتریس ها
در برخی از الگوریتم ها بهتر است اندازه ورودی را برحسب دو عدد بسنجیم:
اگر ورودی الگوریتم یک گراف باشد ،اندازه وروی را برحسب تعداد رئوس و تعداد
یال ها می سنجیم.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
26
عملیات اصلی
عمل اصلی
دستور یا مجموعه ای از دستورات به طوری که کل کار انجام شده توسط
الگوریتم ،تقریبا متناسب با تعداد دفعات اجرای این دستور یا مجموعه
دستورات باشد.
مثال :جستجوی ترتیبی و جستجوی دودویی لیستی به طول nعنصر
در هر بار گذر از حلقه عنصر xبا یک عنصر از Sمقایسه می شود.
با تعیین اینکه هر یک از این الگوریتم ها چند بار این عمل اصلی را انجام می
دهند ،می توان کارآیی این دو الگوریتم را به ازای هر مقدار از nمقایسه
نمود.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
27
تحلیل پیچیدگی در حاالت مختلف
) :T(nتعداد دفعاتی که الگوریتم عمل اصلی را به ازای یک نمونه با
اندازه ورودی nانجام می دهد.
در برخی موارد مانند الگوریتم مجموع عناصر آرایه ،عمل اصلی همواره
به ازای یک نمونه با اندازه ورودی nبه یک میزان انجام می شود
در برخی موارد دیگر ،تعداد دفعات اجرای عمل اصلی نه تنها به اندازه
ورودی بلکه به ترکیب و چیدمان مقادیر ورودی نیز بستگی دارد.
مثال :در جستجوی ترتیبی (با اندازه ورودی برابر با )n
اگر xدر اولین مکان آرایه باشد:
اگر xدر آرایه نباشد:
تعداد مقایسه ها = 1
تعداد مقایسه ها = n
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
28
تحلیل پیچیدگی در حاالت مختلف
بهترین حالت )B(n
حالتی که الگوریتم می تواند سریعترین زمان اجرا را داشته باشد.
کران پایین زمان اجرا است.
بدترین حالت )W(n
حالتی که زمان اجرای الگوریتم هرگز از آن بیشتر نخواهد شد.
کران باالی زمان اجرا است.
جهت مقایسه منصفانه بین الگوریتم ها به طورمعمول از این تابع استفاده
می شود
حالت میانگین )A(n
برای تحلیل آن نیاز به در نظر گرفتن توزیع های مختلف مقادیر ورودی می باشد.
محاسبه آن مشکل است.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
29
مثال
محاسبه هزینه جستجوی خطی )(linear search
عمل اصلی :تعداد مقایسه
اندازه ورودی :تعداد عناصر آرایه n
بهترین حالت :وقتی که عنصر مورد نظر در اولین خانه باشد
بدترین حالت :وقتی که عنصر مورد نظر در آرایه موجود نباشد
B (n) 1
W (n) n
حالت متوسط:
احتمال وجود عنصر مورد نظر در آرایه برابر با p
احتمال وجود آن در خانه kام برابر با p/nاست.
احتمال عدم وجود عنصر در آرایه 1- p
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
30
حالت متوسط
محاسبه هزینه در حالت متوسط
تعداد گذر(وجود)
تعداد گذر(عدم وجود)
) n * (1 p
n
p
) (k * n
A(n)
k 1
) n * (1 p
)p ( n 1
2
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
31
مرتبه الگوریتم
مرتبه یک الگوریتم با بزرگترین جمله تابع پیچیدگی زمانی آن تعیین می شود.
الگوریتم هایی با پیچیدگی زمانی ازقبیل nو 100nرا الگوریتم های زمانی
خطی می گویند.
مجموعه کامل توابع پیچیدگی را که با توابع درجه دوم محض قابل دسته بندی
باشند θ ( n²) ،می گویند.
تابعی که عضو مجموعه ) θ ( n²باشد ،از مرتبه n2است.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
32
مجموعه ای ازتوابع پیچیدگی که با توابع درجه سوم محض قابل دسته بندی
باشند θ ( n³) ،نامیده می شوند.
برخی از گروه های پیچیدگی متداول در زیر داده شده است:
)θ(lg n) < θ (n) < θ (n lg n) < θ (n²) < θ (n³) < θ (2ⁿ
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
33
زمان اجرا برای الگوریتم هایی با پیچیدگی زمانی مختلف
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
34
سرعت رشد برخی توابع
پیچیدگی
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
35
آشنایی بیشتر با مرتبه الگوریتم ها
برای یک تابع پیچیدگی مفروض ) O” O (ƒ (n))، ƒ(nبزرگ“
مجموعه ای از توابع پیچیدگی ) g(nاست که برای آن ها یک
ثابت حقیقی مثبت cو یک عدد صحیح غیر منفی Nوجود
دارد به قسمی که به ازای همه ی n <= Nداریم:
)g (n) <= c × ƒ (n
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
36
برای یک تابع پیچیدگی مفروض ) Ω (ƒ(n)) ، ƒ(nمجموعه ای از
توابع پیچیدگی ) g (nاست که برای آن ها یک عدد ثابت حقیقی
مثبت cو یک عدد صحیح غیر منفی Nوجود دارد به قسمی که به
ازای همه ی n <= Nداریم:
)g (n) >= c × ƒ (n
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
37
برای یک تابع پیچیدگی مفروض ) ،ƒ(nداریم:
))θ (ƒ(n)) = O (ƒ(n)) ∩ Ω (ƒ(n
یعنی )) θ(ƒ(nمجموعه ای از توابع پیچیدگی ) g (nاست که برای
آن ها ثابت های حقیقی مثبت cو dو عدد صحیح غیر منفی N
وجود دارد به قسمی که :
)c × ƒ (n) <= g(n) <= d × ƒ(n
اگر تابع پیچیدگی زمانی الگوریتمی عضو مجموعه )) θ (ƒ(nباشد،
می گوییم از مرتبه ) f(nاست.
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
38
نمایشی از Ω ،Oو θ
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
39
مثالی از مجموعه های ) Ω(n2) ،O(n2و )θ(n2
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
40
برای یک تابع پیچیدگی ) ƒ(nمفروض o” o(ƒ(n)) ،کوچک”
عبارت ازمجموعه کلیه توابع پیچیدگی) g(nاست که این شرط را
برآورده می سازند :به ازای هر ثابت حقیقی مثبت ، cیک عدد
صحیح غیر منفی Nوجود دارد به قسمی که به ازای n <= N
داریم:
)g (n) <= c × ƒ (n
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
41
ویژگی های مرتبه
g (n) Є O (ƒ(n)) -1اگروفقط اگر)).ƒ (n) Є Ω (g(n
g (n) Є θ (ƒ(n)) -2اگروفقط اگر)).ƒ (n) Є θ (g (n
-3اگر b >1و ،a > 1در آن صورت:
)loga n Є θ (logb n
-4اگر ،b > a > 0در آن صورت:
)aⁿ Є o (bⁿ
42
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
-5به ازای همه ی مقادیر a > 0داریم :
ⁿ
)!a Є o (n
-6اگر g (n) Є O (ƒ(n)) ، d >0 ،c >= 0و
)) h(n) Є θ(ƒ(nباشد ،درآن صورت:
))c × g(n) + d × h (n) Є θ (ƒ(n
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
43
-7ترتیب دسته های پیچیدگی زیر را در نظربگیرید:
)!θ (lg n) θ (n) θ(n lg n) θ(n²) θ(nj) θ (nk) θ (aⁿ) θ (bⁿ) θ (n
که در آن k > j > 2و b > a > 1است .اگر تابع پیچیدگی ) g (nدر دسته
ای واقع در طرف چپ دسته ی حاوی ) ƒ (nباشد ،در آن صورت:
))g (n) Є o (ƒ(n
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
44
استفاده از حد برای تعیین مرتبه
قضیه
c0
)) g ( n ) ( f ( n
)g (n) o( f (n
)) f ( n ) o ( g ( n
c
g (n)
0
f (n)
درس طراحی الگوریتم ها -فصل اول -کارائی ،تحلیل و مرتبه الگوریتم ها -مدرس :بیدکی
lim
n
45