آموزش روش تقسیم و حل در طراحی الگوریتم (مرور – تست...

Post on 09-Jan-2017

66 Views

Category:

Education

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

:مدرسفرشید شیرافکن

دکتری دانشگاه تهران دانشجوی (بیو انفورماتیک: دکتری( )کامپیوتر نرم افزار: کارشناسی و کارشناسی ارشد )

کارشناسی ارشد کنکور طراحی الگوریتم

روش تقسیم و حل

1

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

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

(Divide-and-Conquer)روش تقسیم و حل

:مراحل

کوچکترنمونهچندیایکبهمسئلهیکازاینمونهتقسیم-1

کوچکترهاینمونهحل-2

(نیازصورتدر)اولیهنمونهحلآوردنبدستبرایکوچکترهاینمونهحلترکیب-3

نمونهیکبهفقطنمونهدودوییجستجویمانندهاالگوریتمبعضیدرکهاستاین"نیازصورتدر"گوئیممیاینکهدلیل

.نیستهاحلترکیببهنیازیویابدمیکاهشکوچکتر

2

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

مثال

تقسیممساویبیشوکمبخش2بهراnیاندازهبهمسئلهورودیهرالگوریتمی

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

.آوردمیدستبهرامسئلهجوابوکردهترکیبهمبارادو

:بازگشتیرابطه

nT(n) 2T( ) O(n) T(n) O(nlgn)

2

3

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

اصلیقضیه

n:باشیمداشتهاگرT(n) aT( ) f (n)

b

a 1,b 1

a ab b

ab

ab

log log

log

log

(n ) f (n) n

T(n) (f (n).lgn) f (n) n

(f (n)) f (n) n

4

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

5

nT(n) 4T( ) lgn

2

42log

lg nn

)( 2n

a 4

b 2

f (n) lgn

nT(n) 8T( ) nlgn

9

89log

lg nnn

)lg( nn

2nT(n) T( ) 1

3

12/3log

1 n

)(lg n

a 8

b 9

f (n) nlgn

a 1

3b

2

f (n) 1

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

:با الگوریتم تقسیم و غلبه سه روش به شرح زیر امکان پذیر استnبرای حل یک مسئله با اندازه

زیر مسئله به اندازه و ترکیب آن ها با هزینه 3حل : روش اول

زیر مسئله به اندازه و ترکیب آن ها با هزینه 4حل : روش دوم

زیر مسئله به اندازه و ترکیب آن ها با هزینه 5حل : روش سوم

کدام روش دارای هزینه کمتری است؟

.هر سه روش یکسان هستند( 4روش سوم ( 3روش دوم ( 2روش اول ( 1

n

2

2(n n)

n

2

2(n )

n

2(nlgn)

(86دولتی -ITمهندسی )

6

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

2:اولروش 2nT(n) 3T( ) (n n) T(n) (n n)

2

: روش دوم2 2n

T(n) 4T( ) (n ) T(n) (n lgn)2

5: روش سوم2lgn

T(n) 5T( ) (nlgn) T(n) (n )2

7

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

:مرتبآرایهدر10عددکردنپیدا

8

1 2 3 4 5 6 7 8 9

5 9 10 20 35 50 60 70 75

5 9 10 20 35 50 60 70 75

5 9 10 20 35 50 60 70 75

5 9 10 20 35 50 60 70 75

جستجوی دودویی

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

bsearch (a[ ] , x , low , high ){

if (low <=high ) {

mid = ( low+high ) / 2;

if ( x < a[mid] )

bsearch( a , x , low , mid-1 );

else if ( x > a[mid] )

bsearch (a , x , mid+1 , high );

else

return mid;

}

return -1;

}9

1)2

()( n

TnT )(lg nO

highmid+1midmid-1low

……

الگوریتم

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103 مرتب سازی ادغامی(Merge Sort)

10

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

mergesort ( S[ ] , n ) {

h = [n/2];

m = n – h;

if (n > 1)

{

copy S[1..h] to U[1..h];

copy S[h +1..n] to V[1..m];

mergesort ( U , h );

mergesort ( V , m );

merge (U , h , V , m , S);

}

}11

)lg(

)1(lg)(

1)2

(2)(

nn

nnnnT

nn

TnT

الگوریتم

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

(Quick sort)مرتب سازی سریع

QuickSort (A , p , r)

{

if ( p < r )

{

q = Partition (A , p , r) ;

QuickSort (A , p , q-1) ;

QuickSort (A , q+1, r ) ;

}

}12

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

الگوریتم پارتیشن بندی

13

46531782

46531782

46531782

46531782

46538712

46578312

46578312

46578312

86574312

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

عملکرد مرتب سازی سریع

:میانگینوخوبحالت

T(n) = T(n/2) + T(n/2)+O(n) O(nlogn)

14

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

بدترین حالت مرتب سازی سریع

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

T(n) = T(n-1) + O(n) O(n^2)

15

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

ازبهتر(تفریقوجمعلحاظازهمچنینو(ضربلحاظازآن،پیچیدگیکهدادارائهراالگوریتمیاستراسن.استسومدرجهپیچیدگی

ضرب ماتریس های استراسن

16

Strassen’s matrix multiplication

1111011010110010

1101010010010000

1110

0100

1110

0100

****

*****

BABABABA

BABABABA

BB

BB

AA

AA

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

623142

537541

1110

0100

1110

0100*

MMMMMM

MMMMMM

BB

BB

AA

AA

M1=(A00+A11)*(B00+B11)

M2=(A10+A11)*B00

M3=A00*(B01-B11)

M4=A11*(B10-B00)

M5=(A00+A01)*B11

M6=(A10-A00)*(B00+B01)

M7=(A01-A11)*(B10+B11) 17

استراسن

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

3 17 5 7 3 10 5 9 86 75

11 17 13 7 11 10 13 9 278 227

18

1 2 2 3 8 9 9 1 3 5 17 10

5 6 6 7 3 4 4 5 11 13 7 9

M1محاسبه : مثال

M1=(A00+A11)*(B00+B11)

623142

537541

1110

0100

1110

0100*

MMMMMM

MMMMMM

BB

BB

AA

AA

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103استراسنالگوریتمزمانیپیچیدگیتحلیل

(:استعمل اصلی ضرب )دستور بازگشتی

nT(n) 7T( )

2

T(1) 1

lg7 2.81T(n) (n ) (n )

19

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

باشد،هایماتریسضربکوچکمساله،(Strassen)استراسنروشبهماتریس هاضربدراگر

می پذیرد؟صورتعددیضربچند،ماتریسدوضرببرای

2 2

8 8

1 )572 )3433 )3924 )512

nT(n) 7T( )

2

T(2) 8

T(4) 7T(2) 7 8 56

T(8) 7T(4) 7 56 392

(85دولتی -ITمهندسی )

20

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

فراخوانیچندباباشد،ماتریس هایضربکوچک،مسالهاستراسن،روشبهماتریس هاضربدراگر

می پذیرد؟انجامماتریسدوضربعملاستراسن،الگوریتمبهبازگشتی

2 2

8 8

1 )3432 )573 )494 )7

:را از رابطه بازگشتی زیر محاسبه کردT(8)باید مقدار

nT(n) 7T( ) 1

2

T(2) 1

T(4) 7T(2) 1 8

T(8) 7T(4) 1 7 8 1 57

(86دولتی -ITمهندسی )

21

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

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

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

اینردهمباعناصرمقایسه هایدقیقتعداد.می کنیمپیدارانهاییجوابآنهابینومی آوریمدست

()چندتاست؟الگوریتم

n n

n n

2 2

kn 2

1 )2 )3 )4) 2n 12n 13lgn3(lgn 1)

(89دولتی -هوش-مهندسی کامپیوتر )

22

nT(n) 4T( ) 3

2

T(2) 3

42lg 2

T(n) (n ) (n )

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103ضرب دو عدد صحیح بزرگ

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

باyدیگریورقمباxیکیصحیحعدددوبهراآنباشد،uصحیحعددارقامتعدادnاگر

.که:صورتبهمی کنیمتبدیل

n / 2 n / 2

mu x 10 y m n / 2

212345 123 10 45

23

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

vوuضرب

m m 2m muv (x 10 y)(w 10 z) xw 10 (xz wy) 10 yz

عملیاتاجرایو(ارقامازنیمیحدودبا)صحیحاعدادرویضربعمل4باراuوvتوانمیپس.کنیمضربهمدرخطی،زمان

24

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

:9423723و567832عدددوضرب

:می کنیمضربروالهمینباراکوچکترصحیحاعداداینسپس

2 2

2 2

567 9423 (5 10 67)(94 10 23)

5 94 10 (5 23 67 94) 10 67 23

.دهیممیانجاممعمولیطریقبهرارقمیدوحداکثراعدادضربعملصورتایندر

3 3

6 3

567,832 9,423,723 (567 10 832)(9423 10 723)

567 9,423 10 (567 723 9423 832) 10 832 723

مثال

25

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103حالتبدتریندرالگوریتمتحلیل

26

:سریعترالگوریتمعمل3بهراآنتعدادجالبابتکاریکباکهبودنیازضربعمل4بهعدددوضربمحاسبهبرایقبلیالگوریتمدر

.دهیممیکاهشضرب،

cnn

TnT )2

(3)( )()( 58.132

lognn

cnn

TnT )2

(4)( )()( 242

lognn

3: رقمی kضرب دو عددمرتبه 2lg

k

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

:برایرقموباترتیببهوعدددوضرببرای ABn4n5000 n 10000

.بهتر است از روش معمولی و کالسیک برای ضرب آن ها استفاده کرد( 1

.ترتیبیچهبهکندنمیفرقیوکرداستفادهحلوتقسیمالگوریتمازاستبهتر(2

.و با روش تقسیم و حل ضرب کردAرقمی، هر کدام از این بخش ها را در nبخش 4به Bبهتر است پس از قسمت کردن ( 4

.کردضربBدرحلوتقسیمالگوریتمکمکباراحاصل،عددAچپسمتبهصفر3nکردناضافهازپساستبهتر(3

(83دولتی -مهندسی کامپیوتر )

27

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

32lg

k

:بااستبرابرآنها،ضربمرتبهکهداریمرقمی4nعدددوحالتایندر

3 3 3 4 3 32 2 2 2 2 2lg lg lg lg lg lg

(4n) 4 n 3 n 9n

28

: است بابرابر رقمی با استفاده از روش تقسیم و حل kضرب دو عددکه مرتبه می دانیم

.کنیمرقمی4nآن،چپسمتبهصفرکردناضافهبارااسترقمیnکهAعدد:3گزینه

درراهابخشاینازکدامهروکنیمتبدیلرقمیnبخشچهاربهرااسترقمی4nکهBعدد:4گزینهAضربچهارمرتبه.کردضربحلوتقسیمالگوریتمکمکباn،بااستبرابررقمی:

32lg

4n

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

(iرتبهباعنصر)عنصریnآرایهدرعنصرکوچکترینامینiانتخاب

i=1:مینیمم

i=n:ماکزیمم

i = ⎣(n+1) / 2⎦ or ⎡(n+1)/2⎤:میانه

29

مسئله انتخاب

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

:نظر می گیریم و پارتیشن بندی می کنیمرا محور در عنصر اول

30

پیدا کردن هفتمین کوچکترین عنصر

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

(2,3,5,6,8,10,11,13)

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103الگوریتم انتخاب

select (A[ ] , p , r , i ){if (p == r) return A[p];

q = R-partition(A,p,r);

k = q-p+1; // k =rank(A[q])

if ( i == k ) return A[q];

else if ( i < k )

return select ( A , p , q-1 , i )

else

return select ( A , q+1 , r , i-k )

}

.است2این الگوریتم در بدترین حالت از مرتبه توان

31

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

.ممی کنیتقسیم(دستهیکاحتماالًجزبه)تایی5هایدستهبهراعناصرهمهابتدا

شتیبازگصورتبهراهامیانهمیانهسپسومی آوریمدستبهرادستههرمیانه

.می کنیمپیدا

آرایهرویبرراpartitionعملومی کنیمانتخابمحورعنوانبهراعنصراین

.می دهیمانجامعناصر

بخش هاازیکیرویبر(دیگرkیکبرایو)بازگشتیبصورتراالگوریتمهمین

.شودپیدانظرموردعنصرتامی کنیماجرا

32

(میانه میانه ها)امین عنصرkالگوریتم انتخاب

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

(گروه خواهیم داشت11در نتیجه ) عنصر n/5عنصر به گروهایی با 54تقسیم

33

مثال

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103 مرتب کردن هر گروه

34

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103مشخص کردن میانه هر گروه

35(28عدد )انتخاب میانه میانه ها

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

36

تعداد میانه های بزرگتر از میانه میانه ها حداقل

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

عناصر بزرگتر از میانه میانه ها حداقل

37

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103 عناصر کوچکتر از میانه میانه هاحداقل

:ود عناصری که تابع انتخاب برای آن ها به طور بازگشتی صدا زده می شتعداد 3n 7n

n 6 610 10

38

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

SELECT(A, i )

1. Divide n elements into ⎣n/5⎦ groups of 5, plus extra O(n)

2. Find medians of each group by insertion sort. O(n)

3. Find median x of the ⎣n/5⎦ medians by calling SELECT( ) T( n/5 )

4. Partition the n elements around pivot x . Let k = rank(x) O(n)5. if (i = k) then T(7n/10 + 6)

return x

if (i < k) then

SELECT( left partition , i )

else SELECT ( right partition , i-k )

39

n 7nT(n) T T 6 O(n)

5 10

O(n)

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

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

عنصری3های گروه

n 2nT(n) T T 4 O(n) O(n.lgn)

3 3

40

n 5nT(n) T T( 8) O(n) O(n)

7 7

n (3m 1)nT(n) T T c O(n)

m 4m

عنصری 7های گروه

عنصریmهای گروه

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

خطیکاراییبهمنجرکهاستفردمقدارکوچکترین،m=5مقدار

هایهدستبهراعناصرانتخاب،الگوریتمتوضیحدرعلتهمینبه.شودمی

.کردیمتقسیمتاییپنج

41

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

تقسیم(دستهیکاحتماالًجزبه)تایی5هایدستهبهراعناصرهمهابتداعنصر،امینkکردنپیداالگوریتمدر

این.ممی کنیپیدابازگشتیصورتبهراهامیانهمیانهسپسومی آوریمدستبهرادستههرمیانهمی کنیم،

آنازپس.می دهیمانجامعناصرآرایهرویبرراpartitionعملومی کنیمانتخابمحورعنوانبهراعنصر

نظرموردعنصرتامی کنیماجرابخش هاازیکیرویبر(دیگرkیکبرایو)بازگشتیبصورتراالگوریتمهمین

می شود؟بیانزیربازگشتیرابطه هایازیککدامتوسطالگوریتمایناجرایزمان.شودپیدا

1 )2)

3 )4)

n 3nT(n) T( ) T( 6) O(n)

5 10

n 3nT(n) T( ) T( 6) O(n)

5 10

n 7nT(n) T( ) T( 6) O(n)

5 10

n 7nT(n) T( ) T( 6) O(n)

5 10

(82دولتی -مهندسی کامپیوتر )

42

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

کردیمتقسیمتایی5هایدستهبهراعناصرعنصر،nیمیانهعنصریافتنبرایکالسیکحلراهدر

بهعنصراین.آوردیمدستبهبازگشتیصورتبهراهامیانهیمیانهسپسوکدامهریمیانهو

هایدستهازتایی،5هایدستهجایبهاگر.شودمیمحسوبعناصربندیبخشبرایمحورعنوان

شود؟میبیانبازگشتییرابطهکدامتوسطاجرازمانکنیم،استفادهتایی3

1 )2)

3 )4)

2nT(n) T( ) cn

3

nT(n) T( ) cn

3

nT(n) 2T( ) cn

3

n 2nT(n) T( ) T( ) cn

3 3

(91دولتی -مهندسی کامپیوتر )

43

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103 (تتورنمن)یافتن بزرگ ترین کلید دوم

(n-1).داشتخواهیممقایسه1آخردورومقایسه2دوم،دور،مقایسه4اول،دوردرباشیم،داشتهکلید8اگر

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

.شودمیاضافهلیستبه،ببازد18بهرامقایسهیککهکلیدی 12,16,15

44

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

(مقایسهارتفاع درخت )logn: اعداد لیست تعداد

logn:ست تعداد مقایسه برای پیداکردن بزرگترین عدد در این لی 1

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

(n 1) (lgn 1) n lgn 2

45

16 log16 2 16 4 2 18

:عنصری16آرایهدرعنصرکوچکتریندومینکردنپیدابراینیازموردمقایسهتعداد:مثال

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

عنصر را با چند مقایسه می توان به دست آورد؟nدومین کوچکترین عنصر بین

1)2)

3)4)

n logn 1 n logn 2

n logn 1 n logn 2

(86دولتی -هوش-مهندسی کامپیوتر )

46

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

nn (k 1) lg( ) k

k 1

(n)

47

:کلیدیnمجموعهامین کوچک ترین کلید در kیافتنحد پایین برای

k 1

کلیدامین کوچک ترین kیافتن

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

عنصرر nکوچکترین عنصرر از میران امین kکمترین مرتبه زمانی الگوریتم پیدا کردن

کدام است؟

1 )2 )3 )4) 3O(n )O(n)O(nlgn)هیچکدام

(85دولتی -ITمهندسی )

48

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

49

پایان

: مشاوره با مدرس شیرافکن(کالس تست زنی-جزوه)

09121972028

فرادرس

FaraDars.org

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

این اسالید ها بر مبنای نکات مطرح شده در فرادرسآموزش روش تقسیم و حل در طراحی الگوریتم»

« (تست کنکور ارشد-مرور ).تهیه شده است

برای کسب اطالعات بیشتر در مورد این آموزش به لینک زیر مراجعه نمایید

faradars.org/fvsfte103

تقسیم و حل در روش الگوریتمطراحی

faradars.org/fvsfte103

فرادرس

FaraDars.org

top related