Upload
faradars
View
66
Download
2
Embed Size (px)
Citation preview
تقسیم و حل در روش الگوریتمطراحی
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