ﺎﻫ ﻢﺘﯾرﻮﮕﻟا ﯽﺣاﺮﻃbayanbox.ir/view/956075013985805488/ch01.pdf ·...

Preview:

Citation preview

طراحی الگوریتم هاسیده حمیده عرفانی

دامغاندانشگاه

zamzam
Pencil
zamzam
Rectangle
zamzam
Rectangle
zamzam
Rectangle

به طور معمول براي حل یک مسئله مشخص بیش از یک الگوریتم وجود دارد.برخی از این الگوریتم ها از بقیه کاراتر می باشند.الگوریتمی انتخاب می شود که بیشترین کارایی را داشته باشد.چه مواردي را باید بررسی کنیم:

آیا الگوریتمی که ارائه می شود درست است یا خیر؟چگونه الگوریتم هاي مربوط به یک مسئله مقایسه می شوند؟ کارایی(efficiency) هر الگوریتم چگونه تعیین می شود؟

براي این کار نیاز به تحلیل الگوریتم ها داریم .

هدف از مطالعه درس طراحی الگوریتم ها

2

سرفصل درستحلیل و ارزیابی کارایی الگوریتم هابازگشت پذیري و الگوریتم هاي بازگشتیروش تقسیم و حلروش حریصانهروش برنامه سازي پویاروش بازگشت به عقبجستجو در درختها و گرافهاانشعاب و تحدید

3

درسی منابعمنبع اصلی

طراحی الگوریتم هادکتر محمود نقیب زاده

منابع فرعی Foundations of algorithms

Richard Neapolitan & Kumarss Naimipour

ترجمه مهندس سید حجت اهللا جلیلی

Introduction to algorithms Thomas Cormen

4

ارزیابی نحوهنمره 12امتحان پایان ترم94/2/13نمره 4امتحان میان ترمنمره 3 تمرین نمره 2فعالیت کالسی کوئیز ونمره 21مجموع

براي دریافت اسالیدها و تمرین ها در گروه زیر عضو شویدAlgorithmDesign_du@yahoogroups.com

5

zamzam
Rectangle
zamzam
Rectangle

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

اول فصل

6

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

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

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

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

الگوریتم

7

خواص الگوریتم ها محدود(متناهی(

بدون ابهام

بیان دقیق

ترتیب و توالی

خروجی-ورودي

الگوریتم

8

اغلب یک الگوریتم تا رسیدن به وضعیتی که بتوان آن را به کامپیوتر منتقل کرد مراحل:مختلفی را طی می کند

زبان انسان(زبان طبیعی(

نمودار گردشی)FlowChart(

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

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

بیان الگوریتم

9

ارزیابی کارایی الگوریتم هابراي اکثر مسائل قابل حل الگوریتم هاي متفاوتی وجود دارد.

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

سوال اینجاست که معیار برتري یک الگوریتم نسبت به الگوریتم دیگر چیست؟

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

میزان حافظه الزم در زمان اجراي الگوریتم

تحلیل الگوریتم ها

10

ارزیابی کارایی الگوریتم هازمان الزم براي اجراي کامل یک الگوریتم به کامپیوتري که آن را اجرا می کند بستگی دارد.

میزان حافظه الزم براي اجراي الگوریتم به نوع سیستم عامل کامپیوتر و روش مدیریت حافظه.اصلی بستگی دارد

باید براي مقایسه کارایی دو الگوریتم شرایط یکسانی را در نظر گرفت.

دو معیار زیر را جایگزین دو معیار قبل می کنیم: مرتبه زمانی اجراي کامل الگوریتمT(n)

تعداد دفعات تکرار عمل یا اعمال اصلی به ازاي هر مقدار از اندازه مسئله

مرتبه مکانی اجراي الگوریتمS(n)

مقدار حافظه اي که عمل یا اعمال اصلی الگوریتم به ازاي هر مقدار از اندازه مسئله نیاز دارد

تحلیل الگوریتم ها

11

از آنجایی که امروزه محدودیت حافظه تا حد زیادي برطرف شده است، براي مقایسه کارایی.الگوریتم ها بیشتر بر روي مرتبه زمانی آنها متمرکز می شویم

اندازه مسئله و عمل براي تشریح مرتبه زمانی و در نتیجه تحلیل کارایی الگوریتم ها مفهوم.باید تشریح گردند) اصلی(کلیدي

مرتبه زمانی یک الگوریتم بر اساس اعمال کلیدي یا اصلی الگوریتم محاسبه می شود.اندازه مسئله

طول داده ها یا اندازه مسئله، تعداد داده هاي ورودي، تعداد نتایج و یا ترکیبی از آنها می باشد.ضرب ماتریس: مثالدر اغلب مسائل مرتبه زمانی الگوریتم تابعی از اندازه مسئله است.

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

تحلیل الگوریتم ها

12

مرتبه زمانی معموال پیچیدگی زمانی الگوریتم باT(n) نشان داده می شود که در آنn اندازه مسئله

.است مثال

float sum (float List [], int n){

int i;float s=0; for (i=0;i< n ;i++)

s=s + List [i];return s;

}

13

T (n) =2n+3

0

n+1

n

1

1

14

مثال For (i=a; i<=b; i++)

x+=1;

For (i=1; i<=n; i++)For (j=1; j<=n; j++)

x+=1;

T (n) =b-a+1

T (n) = 2n

عمل کلیدی

عمل کلیدی

15

مثال پیچیدگی زمانی الگوریتم هاي زیر را بدست آورید

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

x+=1;

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

x+=1;

for i=1 to nfor j=1 to i

for k=1 to ix=x+1

2)1(...211

11 1

nnnin

i

n

i

i

j

6)12)(1(...21

1

22

1

2

1 11 1 1

nnnn

iin

i

n

i

i

j

n

i

i

j

i

k

2

11 1

1 nnn

i

n

i

n

j

16

مثال با فرض اینکه (پیچیدگی زمانی الگوریتم هاي زیر را بدست آوریدn است 2توانی از.(

for (i=1; i<=n; i=i*2)cout<<i;

پیچیدگی زمانی الگوریتم= جمع یک هاي سطر دوم واضح است که تعداد یک هاي سطر دومk+1 است.با توجه به اینکه بنابراین داریم: nk 2log

1log1)( 2 nKnT

مرتب سازي حبابی: مثالvoid bubblesort (int n , int S[ ]){

int i,j;for (i = 1 ; i < n ; i++)

for (j = i +1; j < n ; j++)if ( S[j] < S[i])

swap(S[i] , S[j]);}

17

عمل کلیدي

)(22

)1(21 22

1

1

1

1

1

nnnnninn

i

n

i

n

ij

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

خروج از الگوریتم را داشته باشیم، احتماال حالت هاي بهترین، متوسط و بدترین از یکدیگر .جدا می شوند

محاسبه حالت متوسطمشخص کردن همه حاالتi محاسبه تعداد تکرار عمل کلیديمحاسبه احتمال رخداد هر حالت

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

مرتبه زمانی

18

i

k

ii spnT

1

)(

ipis

جستجوي ترتیبی: مثالint seqsearch (int n , int x, int S[ ]){

int i;for (i = 0 ; i < n ; i++)

if (x == S[i])return (i);

return -1;}

19

عمل کلیديبهترین حالت؟بدترین حالت؟حالت متوسط؟

20

رشد توابعاز نظر کارایی الگوریتم ها به دو دسته بزرگ تقسیم می شوند:

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

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

دسته هاي مختلفی از پیچیدگی وجود دارد: نمایی، ...، 2ثابت، لگاریتمی، خطی، خطی لگاریتمی، درجه ،...ترتیب زیر قابل اثبات است

nnn nnnnnnnn !...32...lglg1 32

21

نمادهاي مجانبی نمادO)بدترین حالت:(

و ثابت صحیح وجود داشته باشندکه براي cاگر و فقط اگر ثابت همه مقادیر آنگاه

g(n) بزرگترین تابع کوچکتر ازf(n) استاُ بزرگ، مرتبه زمانی الگوریتم را با فرض اجراي بیشترین تعداد اعمال مشخص می کند.

مثال)}()(0:,0,:)({))(( 00 nCgnfnnnCnfngO

,...}20,lg,2,lg,,{...,)( 222 nnnnnnnnO

))(()( ngOnf

0nn |)(||)(| ngcnf 0n

22

نمادهاي مجانبیقضیه چند جمله اي

اگر ، تعداد اعمال الزم براي اجراي یک.باشد آنگاه mالگوریتم، یک چند جمله اي از درجه

مثال:)()(3)( 323 nnTnnnnT

011

1 ...)( ananananA mm

mm

)()( mnnA

23

نمادهاي مجانبی

)}()(0:,0,:)({))(( 00 nfnCgnnnCnfng

,...}lg,2,12,1{...,)( 2322 nnnnn n

نمادΩ)بهترین حالت:(و ثابت صحیح وجود داشته باشندکه براي cاگر و فقط اگر ثابت

همه مقادیر آنگاه

مثال

))(()( ngnf

0nn |)(||)(| ngcnf 0n

24

نمادهاي مجانبی

)}()()(0:,0,,:)({))(( 210021 ngCnfngCnnnCCnfng

)(321 22 nnn

21

141

3213

21

21

212

122

1

CC

Cn

CnCnnnC

نمادӨ)حالت متوسط:(و ثابت صحیح وجود داشته c2 و c1اگر و فقط اگر ثابت هاي

باشندکه براي همه مقادیر آنگاه

مثال

))(()( ngnf

0nn |)(|2|)(||)(|1 ngcnfngc 0n

25

مقایسه نمادها

در این مثال الگوریتمی مد نظر است که مقدار متغیرx را به توان عدد صحیح.برساند

float powern (float x , int n){

int i;float result = x;for (i = 2 ; i <= n ; i++)

result = result * x;return (result);

}

الگوریتم توان رسانی: مثال

26

0n

عمل کلیدي )()(1)( nnTnnT

در این مثال الگوریتمی مد نظر است که ماکزیمم عناصر یک آرایه را بیابد.float maximum(float b[] , int n){

float max = b[0];for (i = 1 ; i < n ; i++)

if (b[i] > max)max = b[i];

return max;}

الگوریتم یافتن بزرگترین عدد: مثال

27

عمل کلیدي )()(1)( nnTnnT

28

:1تمرینالگوریتم ضرب ماتریس ها را نوشته و مرتبه زمانی آن را محاسبه نمایید.

Recommended