+ All Categories
Home > Documents > Algorithm(Poor Ameni)

Algorithm(Poor Ameni)

Date post: 22-Nov-2014
Category:
Upload: rightsum
View: 117 times
Download: 5 times
Share this document with a friend
Popular Tags:
249
م ها ت ی ور گ ل ی ا ح را ط درس م ها ت ی ور گ ل ی ا ح را ط درس( ( کد های ه ب ش ا ب کد های ه ب ش ا بc ++ c ++ ) ) واحد:اد عد ت واحد:اد عد ت3 3 ی ن ی م ورا, پ ر عف ج ده : ن3 ی ک ه ب ه ت ی ن ی م ورا, پ ر عف ج ده : ن3 ی ک ه ب ه ت ها م ت ی ور گ ل ی ا ح را ط اب ن ک ع : ب ی م م : = ج ر مت م : = ج ر مت ادB ژ ن ر عف ج ادB ژ ن ر عف ج ی م ق ی م ق
Transcript
Page 1: Algorithm(Poor Ameni)

ها الگوریتم ها درسطراحی الگوریتم درسطراحی(( های کد شبه های با کد شبه ((++ c ++c با

: واحد : تعداد واحد 33تعداد

پورامینی : جعفر کننده پورامینی : تهیه جعفر کننده تهیهالگوریتمها : طراحی کتاب منبع

قمی قمی جعفر نژادجعفر نژادمترجم : مترجم :

Page 2: Algorithm(Poor Ameni)

: اول :فصل اول فصل

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

Page 3: Algorithm(Poor Ameni)

حل به مربوط های تکنیک باره در کتاب حل این به مربوط های تکنیک باره در کتاب این. است .مسائل است مسائل

. است مسائل حل در استفاده مورد روش ، .تکنیک است مسائل حل در استفاده مورد روش ، تکنیک

آن پاسخ دنبال به که است پرسشی ، آن مسئله پاسخ دنبال به که است پرسشی ، مسئلههستیم.هستیم.

Page 4: Algorithm(Poor Ameni)

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

تحلیل یعنی الگوریتم، یک بودن تحلیل منظورازسریع یعنی الگوریتم، یک بودن منظورازسریع. حافظه و زمان لحاظ از .آن حافظه و زمان لحاظ از آن

Page 5: Algorithm(Poor Ameni)

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

شیوه- 11 این به پیچیده های الگوریتم شیوه- نوشتن این به پیچیده های الگوریتم نوشتن. است .دشوار است دشوار

الگوریتم- 22 فارسی توصیف از نیست الگوریتم- مشخص فارسی توصیف از نیست مشخصچگونه چگونه

. کرد ایجاد کامپیوتری برنامه یک توان .می کرد ایجاد کامپیوتری برنامه یک توان می

Page 6: Algorithm(Poor Ameni)

ترتیبی : : 11--11الگوریتم الگوریتم جوی و ترتیبی جست جوی و جست

Void Void seqsearch ) seqsearch ) int int nn

const keytype const keytype SS] [] [

keytype keytype xx,,

index& locationindex& location))

location = 1location = 1;;

whilewhile )location <= n )location <= n &&&& S]location[ ! = x( S]location[ ! = x(

locationlocation;++;++

if if )location > n ( )location > n (

location = 0location = 0; ;

Page 7: Algorithm(Poor Ameni)

آرایه ::11--22الگوریتم الگوریتم عناصر مجموع آرایه محاسبه عناصر مجموع محاسبه

numbernumber sum ) sum )intint n , n , const numberconst number s] [( s] [(

indexindex i i;;

numbernumber result result;;

result = 0result = 0;;

forfor )i = 1; i <= n; i++( )i = 1; i <= n; i++(

result = result + s]i[result = result + s]i[;;

returnreturn result result;;

Page 8: Algorithm(Poor Ameni)

تعویضی مرتبمرتب::11--33الگوریتم الگوریتم تعویضی سازی سازی

.nnمسئله: مسئله: کنید سازی مرتب نزولی غیر ترتیب به را .کلید کنید سازی مرتب نزولی غیر ترتیب به را کلید

voidvoid exchangesort ) exchangesort )intint n , n , keytypekeytype S] [( S] [(

indexindex i,j i,j;;

forfor )i = 1 ; i<= n -1; i++( )i = 1 ; i<= n -1; i++(

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

ifif ) S]j[ < S]i[( ) S]j[ < S]i[(

exchange S]i[ and S]j[exchange S]i[ and S]j[;;

Page 9: Algorithm(Poor Ameni)

ماتریسها ماتریسها ضربضرب::11--44 الگوریتمالگوریتم

voidvoid matrixmult ) matrixmult )intint n n

const number Aconst number A ,] [ ] [,] [ ] [

const number Bconst number B ,] [ ] [ ,] [ ] [

number Cnumber C ,] [ ] [ ,] [ ] [

index i , j, kindex i , j, k;;

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

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

C ]i[ ]j[ = 0C ]i[ ]j[ = 0;;

Page 10: Algorithm(Poor Ameni)

for for )k = 1 ; k <= n ; k++()k = 1 ; k <= n ; k++( C ]i[]j[ = C]i[ ]j[ + A ]i[]k[ * B ]k[]j[ C ]i[]j[ = C]i[ ]j[ + A ]i[]k[ * B ]k[]j[

Page 11: Algorithm(Poor Ameni)

کارآمد 11- - 22 های الگوریتم ساخت کارآمد اهمیت های الگوریتم ساخت اهمیت

دودویی جوی و دودویی جست جوی و جستتر سریع بسیار تر معموال سریع بسیار معموالترتیبی جوی و ترتیبی ازجست جوی و ازجست

است.است. انجام های مقایسه انجام تعداد های مقایسه تعداد

و جست توسط و شده جست توسط شدهبا برابر دودویی با جوی برابر دودویی lg n lg nجوی

است .است . 1 +1 +

تعداد تعداد های های مقایسه مقایسه

شده شده انجام انجامتوسط توسط

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

دودوییدودویی

تعداد تعداد مقایسه مقایسه

انجام انجام های هایتوسط توسط شده شده

جستجوی جستجوی ترتیبیترتیبی

آرایه آرایه اندازه اندازه

88128128128128

11111024102410241024

21211048576104857610485761048576

33334294967294429496729442949672944294967294

Page 12: Algorithm(Poor Ameni)

ترتیبی : : 11--11الگوریتم الگوریتم جوی و ترتیبی جست جوی و جست

Void Void seqsearch ) seqsearch ) int int nn const keytype const keytype SS] [] [

keytype keytype xx,, index& locationindex& location))

location = 1location = 1;;

whilewhile )location <= n )location <= n &&&& S]location[ ! = x( S]location[ ! = x( locationlocation;++;++

if if )location > n ( )location > n ( location = 0location = 0; ;

Page 13: Algorithm(Poor Ameni)

دودویی ::11--55الگوریتم الگوریتم جوی و دودویی جست جوی و جست

Void Void binsearch )binsearch )intint n n,,

const keytypeconst keytype S S,] [,] [

keytypekeytype x x,,

index&index& location location))

indexindex low, high, mid low, high, mid;;

low = 1 ; high = nlow = 1 ; high = n;;

location = 0location = 0;;

whilewhile )low <= high )low <= high && && location = = 0( location = = 0(

mid = Į)low + high(/2mid = Į)low + high(/2;⌡;⌡

Page 14: Algorithm(Poor Ameni)

ifif ) x = = S ]mid[( ) x = = S ]mid[(

location = midlocation = mid;;

else ifelse if )x < S ]mid[( )x < S ]mid[(

high = mid – 1high = mid – 1;;

elseelse

low = mid + 1low = mid + 1;;

Page 15: Algorithm(Poor Ameni)

فیبوناچی nnجمله جمله : : 11--66الگوریتم الگوریتم فیبوناچی ام ام) (بازگشتی) بازگشتی)

.nnجمله جمله مسئله :مسئله : کنید تعیین را فیبوناچی دنباله از .ام کنید تعیین را فیبوناچی دنباله از ام

intint fib ) fib )intint n( n(

if ) n <= 1(if ) n <= 1(

returnreturn n n;;

elseelse

return return fib )n – 1( + fib )n – 2(fib )n – 1( + fib )n – 2(;;

Page 16: Algorithm(Poor Ameni)

(nn جملهجمله::11--77الگوریتم الگوریتم تکراری ) فیبوناچی (ام تکراری ) فیبوناچی ام intint fib2 ) fib2 )intint n( n(

indexindex i i;;

int f ]0..n[int f ]0..n[;; f]0[ = 0f]0[ = 0;;

ifif )n > 0( )n > 0( f]1[ = 1f]1[ = 1;;

for for )i = 2 ; I <= n; i++()i = 2 ; I <= n; i++( f]i[ = f ]i -1[ + f ]i -2[f]i[ = f ]i -1[ + f ]i -2[;;

returnreturn f]n[ f]n[;;

Page 17: Algorithm(Poor Ameni)

ها 3-13-1 الگوریتم ها تحلیل الگوریتم تحلیل باید را الگوریتم یک کارایی میزان تعیین باید برای را الگوریتم یک کارایی میزان تعیین برای

. کرد .تحلیل کرد تحلیل

زمانی 1-3-11-3-1 پیچیدگی زمانی تحلیل پیچیدگی تحلیل تعیین ، الگوریتم یک زمانی پیچیدگی تعیین تحلیل ، الگوریتم یک زمانی پیچیدگی تحلیل

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

Page 18: Algorithm(Poor Ameni)

T(n)T(n) حالت در الگوریتم زمانی پیچیدگی حالت را در الگوریتم زمانی پیچیدگی را. گویند می .معمول گویند می معمول

W(n)W(n) بدترین در زمانی پیچیدگی تحلیل بدترین را در زمانی پیچیدگی تحلیل راحالت حالت

نامند نامند می ..میA(n)A(n) میانگین حالت در زمانی پیچیدگی میانگین را حالت در زمانی پیچیدگی را

. گویند .می گویند می

Page 19: Algorithm(Poor Ameni)

برای معمول حالت برای زمانی پیچیدگی برای تحلیل معمول حالت برای زمانی پیچیدگی تحلیل) عناصرآرایه) کردن جمع (الگوریتم عناصرآرایه) کردن جمع الگوریتم

: اصلی :عمل اصلی به عمل آرایه از عنصر یک به افزودن آرایه از عنصر یک ..sumsumافزودن

: ورودی :اندازه ورودی .nn اندازه آرایه عناصر تعداد ،. آرایه عناصر تعداد ،

T)n( = nT)n( = n

Page 20: Algorithm(Poor Ameni)

برای معمول حالت برای زمانی پیچیدگی برای تحلیل معمول حالت برای زمانی پیچیدگی تحلیل) تعویضی) سازی مرتب (الگوریتم تعویضی) سازی مرتب الگوریتم

: اصلی :عمل اصلی . .]i[S]i[Sبا با ]S ]j[S ]jمقایسه مقایسه عمل

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

T)n( = n)n -1( /2T)n( = n)n -1( /2

Page 21: Algorithm(Poor Ameni)

برای حالت دربدترین زمانی پیچیدگی برای تحلیل حالت دربدترین زمانی پیچیدگی تحلیل) ترتیبی) جوی و جست (الگوریتم ترتیبی) جوی و جست الگوریتم

: اصلی :عمل اصلی با عمل آرایه عنصر یک با مقایسه آرایه عنصر یک ..xxمقایسه

: ورودی :اندازه ورودی .nn, , اندازه آرایه در موجود عناصر .تعداد آرایه در موجود عناصر تعداد

W )n( = nW )n( = n

Page 22: Algorithm(Poor Ameni)

برای حالت بهترین در زمانی پیچیدگی برای تحلیل حالت بهترین در زمانی پیچیدگی تحلیل) ترتیبی) وجوی جست (الگوریتم ترتیبی) وجوی جست الگوریتم

: اصلی :عمل اصلی با عمل آرایه عنصر یک با مقایسه آرایه عنصر یک ..xxمقایسه

: ورودی :اندازه ورودی .nn, , اندازه آرایه عناصر .تعداد آرایه عناصر تعداد

B )n( = 1B )n( = 1

Page 23: Algorithm(Poor Ameni)

الگوریتم 4-14-1 الگوریتم مرتبه مرتبه

ازقبیل زمانی پیچیدگی با یی ها ازقبیل الگوریتم زمانی پیچیدگی با یی ها nnالگوریتم100n100nوو

. گویند می خطی زمانی های الگوریتم .را گویند می خطی زمانی های الگوریتم را

توابع با که را پیچیدگی توابع کامل توابع مجموعه با که را پیچیدگی توابع کامل مجموعهباشند، بندی دسته قابل محض دوم باشند، درجه بندی دسته قابل محض دوم )nn²(²درجه

)) θθ . گویند .می گویند می

Page 24: Algorithm(Poor Ameni)

درجه توابع با که پیچیدگی ازتوابع ای درجه مجموعه توابع با که پیچیدگی ازتوابع ای مجموعهباشند، بندی دسته قابل محض باشند، سوم بندی دسته قابل محض nn³(³( )) θθسوم

. شوند می .نامیده شوند می نامیده

زیر در متداول پیچیدگی های گروه از زیر برخی در متداول پیچیدگی های گروه از برخی: است شده :داده است شده داده

θθ)lg n()lg n( < < θθ )n( < )n( < θθ )n lg n( < )n lg n( < θθ )n²( < )n²( < θθ )n³( < )n³( < θθ )2 )2 ⁿn((

Page 25: Algorithm(Poor Ameni)

با 2-4-12-4-1 بیشتر با آشنایی بیشتر ها آشنایی الگوریتم ها مرتبه الگوریتم مرتبه

مفروض پیچیدگی تابع یک مفروض برای پیچیدگی تابع یک ƒ)n(ƒ)n( ،،O )ƒ )n(O )ƒ )n( ””OOبرایبزرگ“بزرگ“

پیچیدگی توابع از ای پیچیدگی مجموعه توابع از ای برای g (n)g (n)مجموعه که برای است که استمثبت حقیقی ثابت یک ها مثبت آن حقیقی ثابت یک ها صحیح ccآن عدد یک صحیح و عدد یک و

منفی منفی غیر همه NNغیر ازای به که قسمی به دارد همه وجود ازای به که قسمی به دارد وجود: NN =< =< nnی ی :داریم داریم

g )n( >= c × ƒ )n(g )n( >= c × ƒ )n(

Page 26: Algorithm(Poor Ameni)

مفروض پیچیدگی تابع یک مفروض برای پیچیدگی تابع یک ، ، )ƒƒ)n()nبرای ))Ω Ω ))ƒƒ)n()n( پیچیدگی توابع از ای پیچیدگی مجموعه توابع از ای که g (n)g (n)مجموعه که است است

مثبت حقیقی ثابت عدد یک ها آن مثبت برای حقیقی ثابت عدد یک ها آن عدد ccبرای یک عدد و یک ومنفی غیر منفی صحیح غیر به NNصحیح که قسمی به دارد به وجود که قسمی به دارد وجود

ی همه ی ازای همه : NN =< =< nnازای :داریم داریم

g )n( =< c × ƒ )n(g )n( =< c × ƒ )n(

Page 27: Algorithm(Poor Ameni)

مفروض پیچیدگی تابع یک مفروض برای پیچیدگی تابع یک :)ƒƒ)n()nبرای داریم ،: داریم ،

θθ ) )ƒƒ)n(( = O ))n(( = O )ƒƒ)n(( )n(( ∩∩ ΩΩ ) )ƒƒ)n(()n((

پیچیدگی ))θθ))ƒƒ)n(()nیعنی یعنی توابع از ای پیچیدگی مجموعه توابع از ای g (n)g (n)مجموعهمثبت حقیقی های ثابت ها آن برای که مثبت است حقیقی های ثابت ها آن برای که و و ddو و ccاست

منفی غیر صحیح منفی عدد غیر صحیح که :NNعدد قسمی به دارد که :وجود قسمی به دارد وجود

c × ƒ )n( <= d × ƒ)n(c × ƒ )n( <= d × ƒ)n(

Page 28: Algorithm(Poor Ameni)

پیچیدگی تابع یک پیچیدگی برای تابع یک n()n( ” ”oo(ƒƒ(o(o ))مفروض، مفروض، )ƒƒ)n()nبرایپیچیدگی” توابع کلیه ازمجموعه عبارت پیچیدگی” کوچک توابع کلیه ازمجموعه عبارت )g )n(g )nکوچک

ازای : به سازند می برآورده را شرط این که ازای : است به سازند می برآورده را شرط این که استمثبت حقیقی مثبت هرثابت حقیقی منفی ccهرثابت غیر صحیح عدد منفی ،یک غیر صحیح عدد ،یک

NN ازای به که قسمی به دارد ازای وجود به که قسمی به دارد وجود

ی ی همه : NN =< =< nnهمه :داریم داریم

g )n( =< c × ƒ )n(g )n( =< c × ƒ )n(

Page 29: Algorithm(Poor Ameni)

مرتبه های مرتبه ویژگی های ویژگی

11-- O )ƒ)n((O )ƒ)n(( ЄЄ g )n(g )n( اگر اگر اگروفقط ))ƒ )n( ƒ )n( ЄЄ ΩΩ )g)n(( )g)n..اگروفقط

22-- ((ƒ)n(ƒ)n()) θθ ЄЄ g )n(g )n( اگر اگر اگروفقط ..))ƒ )n( ƒ )n( ЄЄ θθ )g )n(( )g )nاگروفقط

:a > 1a > 1و و b >1b >1اگر اگر --33 صورت آن در ،: صورت آن در ،

log ⁿa log ⁿa ЄЄ θθ )log ⁿb( )log ⁿb(

: b > a > 0b > a > 0اگر اگر - - 44 صورت آن :،در صورت آن ،در

aⁿ aⁿ ЄЄ o )bⁿ( o )bⁿ(

Page 30: Algorithm(Poor Ameni)

مقادیر --55 ی همه ازای مقادیر به ی همه ازای داریم :داریم :a > 0a > 0به

aⁿ aⁿ ЄЄ o )n!( o )n!(

c >= 0c >= 0اگر اگر --66 ، ، d >0d >0 ، ، g )n( g )n( ЄЄ o )ƒ)n(( o )ƒ)n(( و و

h)n( h)n( Є Є θθ)ƒ)n(()ƒ)n(( : صورت درآن :باشد، صورت درآن باشد،

c c × × g)n( + d g)n( + d × × h )n( h )n( ЄЄ θθ )ƒ)n(( )ƒ)n((

Page 31: Algorithm(Poor Ameni)

77--: نظربگیرید در را زیر پیچیدگی های دسته :ترتیب نظربگیرید در را زیر پیچیدگی های دسته ترتیب θθ )lg n( )lg n( θθ )n( )n( θθ)n lg n( )n lg n( θθ)n²( )n²( θθ)n^j( )n^j( θθ )n^k( )n^k( θθ )aⁿ( )aⁿ( θθ )bⁿ( )bⁿ( θθ )n!( )n!(

آن در آن که در . b > a > 1b > a > 1و و k > j > 2k > j > 2که تابع اگر . است تابع اگر استپیچیدگیپیچیدگی

g )n(g )n( ی دسته چپ طرف در واقع ای دسته ی در دسته چپ طرف در واقع ای دسته در)ƒƒ )n( )nحاوی حاوی

: صورت آن در :باشد، صورت آن در باشد،

g )n( g )n( ЄЄ o )ƒ)n(( o )ƒ)n((

Page 32: Algorithm(Poor Ameni)

: دوم :فصل دوم فصل

حل و حل روشتقسیم و روشتقسیم

Page 33: Algorithm(Poor Ameni)

. است پایین به باال روش یک حل و تقسیم .روش است پایین به باال روش یک حل و تقسیم روش

به رفتن با مسئله باالی سطح نمونه یک به حل رفتن با مسئله باالی سطح نمونه یک حلکوچکتر های نمونه حل آوردن بدست و کوچکتر جزء های نمونه حل آوردن بدست و جزء

. شود می .حاصل شود می حاصل

Page 34: Algorithm(Poor Ameni)

: باید ، بازگشتی الگوریتم یک ریزی پی :هنگام باید ، بازگشتی الگوریتم یک ریزی پی هنگام

از- 11 نمونه یک حل آوردن دست به برای از- راهی نمونه یک حل آوردن دست به برای راهینمونه چند یا یک حل ازروی نمونه یک حل نمونه روی چند یا یک حل ازروی نمونه یک حل روی

. کنیم طراحی تر .کوچک کنیم طراحی تر کوچک

22 ) ( به- شدن نزدیک نهایی شرایط ) ( شرط به- شدن نزدیک نهایی شرایط شرط. ) کنیم) تعیین را تر کوچک های .نمونه ) کنیم) تعیین را تر کوچک های نمونه

33 ) تعیین- ) نهایی شرایط شرط حالت در را ( حل تعیین- ) نهایی شرایط شرط حالت در را حلکنیم.کنیم.

Page 35: Algorithm(Poor Ameni)

( ::22--11الگوریتمالگوریتم بازگشتی ) دودویی جوی و (جست بازگشتی ) دودویی جوی و جست

index index location ) location ) indexindex low, low, indexindex high ( high (

indexindex mid mid;;

ifif )low > high ( )low > high ( returnreturn 0 0;;

elseelse

mid = mid = Į Į )low + high( /2)low + high( /2;⌡;⌡ ifif )x = = S ]mid[( )x = = S ]mid[(

returnreturn mid mid;;

Page 36: Algorithm(Poor Ameni)

else ifelse if ) x < S ]mid[( ) x < S ]mid[(

returnreturn location )low , mid – 1( location )low , mid – 1(;;

elseelse

returnreturn location )mid + 1, high( location )mid + 1, high(;;

Page 37: Algorithm(Poor Ameni)

الگوریتم برای حالت دربدترین زمانی پیچیدگی الگوریتم تحلیل برای حالت دربدترین زمانی پیچیدگی تحلیلبازگشتی دودویی جوی و بازگشتی جست دودویی جوی و جست

: اصلی : عمل اصلی ..]S ]mid[S ]midبا با xxمقایسه مقایسه عمل

: ورودی : اندازه ورودی .nnاندازه آرایه عناصر تعداد ،. آرایه عناصر تعداد ،

W )n( = W )n / 2( + 1W )n( = W )n / 2( + 1

، ، n >1n >1برای برای nn از از توانی )W )n( = W )n / 2( W )n( = W )n / 2است است 22توانی+ 1+ 1

W )1( = 1W )1( = 1

W )n( = Į lg n ⌡+ 1 W )n( = Į lg n ⌡+ 1 ЄЄ θθ )lg n( )lg n(

Page 38: Algorithm(Poor Ameni)

ادغامی 2-22-2 سازی ادغامی مرتب سازی مرتب

. است سازی مرتب با مرتبط فرآیند یک .ادغام است سازی مرتب با مرتبط فرآیند یک ادغام

مرتب آرایه دو ترکیب معنای به دوطرفه مرتب ادغام آرایه دو ترکیب معنای به دوطرفه ادغام. است مرتب ی آرایه یک در .شده است مرتب ی آرایه یک در شده

Page 39: Algorithm(Poor Ameni)

می زیر مراحل شامل ادغامی سازی می مرتب زیر مراحل شامل ادغامی سازی مرتبشود:شود:

با- 11 یک هر آرایه، زیر دو به آرایه با- تقسیم یک هر آرایه، زیر دو به آرایه n/2n/2تقسیمعنصر.عنصر.

22. آن- سازی مرتب با آرایه زیر هر .حل آن- سازی مرتب با آرایه زیر هر حل

ادغام ترکیبترکیب- - 33 طریق از ها آرایه زیر های ادغام حل طریق از ها آرایه زیر های حل. مرتب آرایه یک در ها .آن مرتب آرایه یک در ها آن

Page 40: Algorithm(Poor Ameni)

ادغامی : : 22--22الگوریتمالگوریتم سازی ادغامی مرتب سازی مرتب

voidvoid mergsort ) mergsort )intint n , n , keytypekeytype S ] [( S ] [(

const intconst int h = Į n/2 ⌡ , m = n – h h = Į n/2 ⌡ , m = n – h;; keytypekeytype U ]1...h[,V ]1..m[ U ]1...h[,V ]1..m[;;

ifif )n >1( )n >1( copy S]1[ through S]h[ to U]h[copy S]1[ through S]h[ to U]h[;;

copy S ]h + 1[ through S]h[ to V]1[ through V]m[copy S ]h + 1[ through S]h[ to V]1[ through V]m[;; mergesort)h, U(mergesort)h, U(;; mergesort)m,V(mergesort)m,V(;;

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

Page 41: Algorithm(Poor Ameni)

ادغامادغام ::22--33الگوریتمالگوریتم

voidvoid merg ) merg ) intint h , h , intint m, m, const keytypeconst keytype U U,] [,] [

const keytypeconst keytype V V ,] [ ,] [

keytype keytype S S) ] [) ] [

indexindex i , j , k i , j , k;;

i = 1; j = 1 ; k = 1i = 1; j = 1 ; k = 1;;

whilewhile )i <= h )i <= h &&&& j <= m( j <= m(

ifif )U ]i[ < V ]j[( )U ]i[ < V ]j[(

S ]k[ = U ]i[S ]k[ = U ]i[

ii; + +; + +

Page 42: Algorithm(Poor Ameni)

elseelse

S ]k[ = V ]j[S ]k[ = V ]j[;;

jj;+ +;+ +

kk;+ +;+ +

if ) i > h(if ) i > h(

copy V ]j[ through V ]m[ to S ]k[ through S ] h + m [copy V ]j[ through V ]m[ to S ]k[ through S ] h + m [

elseelse

copy U ]i[ through U ]h[ to S ]k[ through S ] h + m [copy U ]i[ through U ]h[ to S ]k[ through S ] h + m [

Page 43: Algorithm(Poor Ameni)

الگوریتم برای حالت دربدترین زمانی پیچیدگی الگوریتم تحلیل برای حالت دربدترین زمانی پیچیدگی --33تحلیل22) (ادغام) ادغام)

: اصلی : عمل اصلی ]j[V]j[V. . با با ]U ]i[U ]iمقایسهمقایسهعمل

: ورودی :اندازه ورودی دو mmو و hhاندازه از یک هر در موجود عناصر دو ،تعداد از یک هر در موجود عناصر ،تعداد. ورودی .آرایه ورودی آرایه

W ) h , m( = h + m - 1W ) h , m( = h + m - 1

Page 44: Algorithm(Poor Ameni)

الگوریتم برای حالت دربدترین زمانی پیچیدگی الگوریتم تحلیل برای حالت دربدترین زمانی پیچیدگی --22تحلیل22) ادغامی) سازی (مرتب ادغامی) سازی مرتب

: اصلی : عمل اصلی .عمل پذیرد می صورت درادغام که ای .مقایسه پذیرد می صورت درادغام که ای مقایسه

: ورودی : اندازه ورودی آرایه nnاندازه عناصر تعداد آرایه ، عناصر تعداد ،SS..

W )n( = W )h( + W ) m( + h + m – 1W )n( = W )h( + W ) m( + h + m – 1

↓ ↓ ↓ ↓ ↓ ↓ مرتبسازی برای الزم زمان ادغام برای الزم مرتبسازی زمان برای الزم زمان ادغام برای الزم مرتب VV زمان برای الزم مرتب زمان برای الزم زمان

UU سازی سازی

از nnکه که n >1n >1برای برای از توانی W (n) = 2 W( n / 2)W (n) = 2 W( n / 2) + + n -1n -1 است است 22توانی

W (1) = 0W (1) = 0

W) n ( W) n ( ЄЄ θθ ) n lg n( ) n lg n(

Page 45: Algorithm(Poor Ameni)

ادغامی : : 22--44الگوریتمالگوریتم سازی ادغامی مرتب سازی ( (mergesort 2mergesort 2))22مرتب

void void mergesort2 )mergesort2 )indexindex low, low, indexindex high( high(

index midindex mid;;

if )low < high(if )low < high(

mid = Į ) low + high( / 2mid = Į ) low + high( / 2;⌡ ;⌡

mergesort 2 )low, mid(mergesort 2 )low, mid(;;

mergesort 2 )mid +1, high(mergesort 2 )mid +1, high(;;

merge2)low,mid,high(merge2)low,mid,high(

Page 46: Algorithm(Poor Ameni)

22ادغامادغام::22--55الگوریتمالگوریتم

مرتب مسئله:مسئله: ی آرایه دو مرتب ادغام ی آرایه دو . mergesortmergesortدردر کهکه SSادغام اند شده .ایجاد اند شده ایجاد

voidvoid mrge2 ) mrge2 )indexindex low, low, index index mid, mid, indexindex high( high(

indexindex i, j , k i, j , k;; keytypekeytype U ] low..high[ U ] low..high[

i = low; j = mid +1 ; k = lowi = low; j = mid +1 ; k = low;; while while ) i <= mid ) i <= mid && && j <= high(j <= high(

ifif ) S ]i[ < S ]j[ ( ) S ]i[ < S ]j[ ( U ]k[ = S ]i[U ]k[ = S ]i[;;

ii; + + ; + +

Page 47: Algorithm(Poor Ameni)

elseelse

U ]k[ = S ]j[U ]k[ = S ]j[ jj;++ ;++

kk;++ ;++

if if ) i > mid () i > mid (

move S ]j[ through S ]high[ to U ]k[ through U ]high[move S ]j[ through S ]high[ to U ]k[ through U ]high[ elseelse

move S ]i[ through S ]mid[ to U ]k[ through U ]high[move S ]i[ through S ]mid[ to U ]k[ through U ]high[

move U ]low[ through U ]high[ to S ]low[ through S ]high[move U ]low[ through U ]high[ to S ]low[ through S ]high[

Page 48: Algorithm(Poor Ameni)

حل 3-23-2 و حل روشتقسیم و روشتقسیم

زیر مراحل شامل حل و تقسیم طراحی زیر راهبرد مراحل شامل حل و تقسیم طراحی راهبرداست:است:

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

22 . تر- کوچک های نمونه اگر کوچکتر نمونه هر . حل تر- کوچک های نمونه اگر کوچکتر نمونه هر حلنبودند، کوچک کافی قدر به تر کوچک قدر نبودند، به کوچک کافی قدر به تر کوچک قدر به

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

را- 33 تر کوچک های نمونه حل نیاز، صورت را- در تر کوچک های نمونه حل نیاز، صورت در. آید دست به اولیه نمونه حل تا کنید .ترکیب آید دست به اولیه نمونه حل تا کنید ترکیب

Page 49: Algorithm(Poor Ameni)

سریع )4-24-2 سازی سریع )مرتب سازی ((quicksortquicksortمرتب

چگونگی از آنها ترتیب سریع، سازی مرتب چگونگی در از آنها ترتیب سریع، سازی مرتب در. شود می ناشی ها آرایه .افراز شود می ناشی ها آرایه افراز

در محوری عنصر آز تر کوچک عناصر در همه محوری عنصر آز تر کوچک عناصر همهدرطرف تر، عناصربزرگ وهمه آن چپ درطرف طرف تر، عناصربزرگ وهمه آن چپ طرف

. هستند واقع آن .راست هستند واقع آن راست

Page 50: Algorithm(Poor Ameni)

بازگشتی طور به سریع، سازی بازگشتی مرتب طور به سریع، سازی مرتبتا شود می تا فراخوانی شود می فراخوانی

افراز نیز ها آن کند، مرتب را دوآرایه از یک افراز هر نیز ها آن کند، مرتب را دوآرایه از یک هرشوند شوند می می

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

. است مرتب ` ذاتا ای آرایه . چنین است مرتب ` ذاتا ای آرایه چنین

Page 51: Algorithm(Poor Ameni)

سریع : :22--66الگوریتمالگوریتم سازی سریع مرتب سازی مرتب

سازی مسئله:مسئله: سازی مرتب نزولی nn مرتب غیر ترتیب با نزولی کلید غیر ترتیب با ..کلید

voidvoid quicksort )index low , index high( quicksort )index low , index high(

index pivotpointindex pivotpoint;;

if ) high > low(if ) high > low(

partition )low , high , pivotpoint(partition )low , high , pivotpoint(

quicksort )low , pivotpoint – 1(quicksort )low , pivotpoint – 1(

quicksort )pivotpoint + 1 , high(quicksort )pivotpoint + 1 , high(;;

Page 52: Algorithm(Poor Ameni)

آرایه : : 22--77الگوریتمالگوریتم آرایه افراز افراز

: :مسئله آرایه مسئله آرایه افراز .SSافراز سریع سازی مرتب .برای سریع سازی مرتب برای

void void partition )partition )indexindex low, low, indexindex high( high(

index &index & pivotpoint pivotpoint))

indexindex i , j i , j;;

keytypekeytype pivotitem pivotitem;;

pivotitem = S ]low[pivotitem = S ]low[;;

j = lowj = low

for for ) i = low +1 ; i <= high; i ++() i = low +1 ; i <= high; i ++(

Page 53: Algorithm(Poor Ameni)

if if ) S ]i[ < pivotitem () S ]i[ < pivotitem (

jj;++;++

exchange S ]i[ and S ]j[exchange S ]i[ and S ]j[;;

pivotpoint = jpivotpoint = j;;

exchange S ]low[ and S ] pivotpoint[exchange S ]low[ and S ] pivotpoint[;;

Page 54: Algorithm(Poor Ameni)

الگوریتم برای معمول حالت در زمانی پیچیدگی الگوریتم تحلیل برای معمول حالت در زمانی پیچیدگی --77تحلیل22) (افراز) افراز)

: اصلی : عمل اصلی . .pivotitempivotitemبا با S [i]S [i]مقایسهمقایسهعمل

: ورودی : اندازه ورودی عناصرموجود n = high – how +1n = high – how +1اندازه تعداد عناصرموجود ، تعداد ،. آرایه زیر .در آرایه زیر در

T)n( = n - 1T)n( = n - 1

Page 55: Algorithm(Poor Ameni)

الگوریتم برای حالت بدترین در زمانی پیچیدگی الگوریتم تحلیل برای حالت بدترین در زمانی پیچیدگی --66تحلیل22) سریع) سازی (مرتب سریع) سازی مرتب

: اصلی : عمل اصلی روال pivotitempivotitemبا با S [i]S [i]مقایسهمقایسهعمل روال در . .partitionpartitionدر

: ورودی : اندازه ورودی درآرایه nnاندازه موجود عناصر تعداد درآرایه ، موجود عناصر تعداد ،SS..

T)n( = T)0( + T) n – 1( + n – 1T)n( = T)0( + T) n – 1( + n – 1

↓ ↓ ↓ ↓ ↓ ↓ افراز برای الزم افراز زمان برای الزم سازی زمان مرتب برای الزم سازی زمان مرتب برای الزم زمان زمان زمان

سازی مرتب برای سازی الزم مرتب برای الزمراست طرف راست زیرآرایه طرف طرفچپ زیرآرایه آرایه طرفچپ زیر آرایه زیر

Page 56: Algorithm(Poor Ameni)

ازای ازای به n > 0 n > 0 T )n( = T )n – 1( + n – 1 T )n( = T )n – 1( + n – 1به

T )0( = 0T )0( = 0

W )n( = n )n – 1( / 2 W )n( = n )n – 1( / 2 ЄЄ θθ )n²( )n²(

Page 57: Algorithm(Poor Ameni)

الگوریتم برای میانگین حالت در زمانی پیچیدگی الگوریتم تحلیل برای میانگین حالت در زمانی پیچیدگی تحلیل66--22) سریع) سازی (مرتب سریع) سازی مرتب

: اصلی : عمل اصلی . .partitionpartitionدر در pivotitempivotitemبا با S [i]S [i]مقایسهمقایسهعمل

: ورودی : اندازه ورودی در nnاندازه موجود عناصر تعداد در ، موجود عناصر تعداد ،SS..

A )n( A )n( ЄЄ θθ )n lg n( )n lg n(

Page 58: Algorithm(Poor Ameni)

ماتریساستراسن 5-25-2 ضرب ماتریساستراسن الگوریتم ضرب الگوریتم

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

های ماتریس ضرب مورد در استراسن های روش ماتریس ضرب مورد در استراسن روش22××22. ندارد چندانی .ارزش ندارد چندانی ارزش

Page 59: Algorithm(Poor Ameni)

استراسناستراسن ::22--88الگوریتم الگوریتم

ماتریس مسئله : مسئله : دو حاصلضرب ماتریس تعیین دو حاصلضرب آن n n ×n×nتعیین در آن که در توانی توانی nnکه.22از از .است است

void starssen ) int nvoid starssen ) int n

n × n _ matrix An × n _ matrix A,,

n × n _ matrix Bn × n _ matrix B,,

n × n _ matrix & Cn × n _ matrix & C))

if ) n <= threshold(if ) n <= threshold(

compute C = A × B using the standard algorithmcompute C = A × B using the standard algorithm;;

Page 60: Algorithm(Poor Ameni)

elseelse

partition A into four submatrics Apartition A into four submatrics A11, 11, AA12 , 12 , AA2121,A,A2222;;

partition B into four submatrics Bpartition B into four submatrics B11, 11, BB12 , 12 , BB2121,B,B2222;;

compute C = A × B using Starssen’s Methodcompute C = A × B using Starssen’s Method;;

Page 61: Algorithm(Poor Ameni)

الگوریتم در ها ضرب تعداد زمانی پیچیدگی الگوریتم تحلیل در ها ضرب تعداد زمانی پیچیدگی --88تحلیل22 ) معمول) حالت در ( استرسن معمول) حالت در استرسن

: اصلی : عمل اصلی .عمل ساده ضرب .یک ساده ضرب یک

: ورودی :اندازه ورودی . nnاندازه ماتریس در ها ستون و سطرها تعداد ،. ماتریس در ها ستون و سطرها تعداد ،

ازای ازای به از nnکه که n > 1n > 1به از توانی / T )n( = 7 T )n / T )n( = 7 T )n استاست22توانی2(2(

T )1( = 1T )1( = 1

T )n( T )n( ЄЄ θθ ) n ^2.81( ) n ^2.81(

Page 62: Algorithm(Poor Ameni)

تفریقهای هاو تعدادجمع زمانی پیچیدگی تفریقهای تحلیل هاو تعدادجمع زمانی پیچیدگی تحلیل ) معمول ) درحالت استرسن ( الگوریتم معمول ) درحالت استرسن الگوریتم

: اصلی : عمل اصلی .عمل ساده تفریق یا جمع .یک ساده تفریق یا جمع یک

: ورودی :اندازه ورودی . nnاندازه ماتریس در ها ستون و سطرها تعداد ،. ماتریس در ها ستون و سطرها تعداد ،

ازای ازای به از nnکه که n > 1n > 1به از توانی = )² ² +) +)T )n( = T )n((n/2n/2 ) )1818استاست22توانی7T)n/27T)n/2

T ) 1 ( = 1T ) 1 ( = 1

T ) n ( T ) n ( ЄЄ θθ ) n ^ 2.81( ) n ^ 2.81(

Page 63: Algorithm(Poor Ameni)

بزرگ : : 22--99الگوریتمالگوریتم صحیح اعداد بزرگ ضرب صحیح اعداد ضرب

بزرگ مسئله: مسئله: صحیح عدد دو بزرگ ضرب صحیح عدد دو vvو و uu ضرب

large _ integer large _ integer prod ) large_integer u, large_integer v(prod ) large_integer u, large_integer v(

large_inregerlarge_inreger x , y , w , z x , y , w , z; ;

intint n , m n , m; ;

n = maximum)number of digits in u,number of digits in v(n = maximum)number of digits in u,number of digits in v(

if )u = = 0 || v = = 0(if )u = = 0 || v = = 0(

return 0return 0; ;

Page 64: Algorithm(Poor Ameni)

else ifelse if )n < = threshold )n < = threshold)) returnreturn u × v obtained in the usual way u × v obtained in the usual way;;

elseelse

m = Į n / 2m = Į n / 2;⌡ ;⌡

x = u x = u dividedivide 10 ^ 10 ^ m m ; y = ; y = remrem 10 ^ 10 ^ mm;;

w = v w = v dividedivide 10 ^ 10 ^ m m ; z =; z = rem rem 10 ^ 10 ^ mm;;

returnreturn prod )x ,w( × 10 ^ prod )x ,w( × 10 ^2m2m + ) prod ) x, z( + prod + ) prod ) x, z( + prod )w, y (( × 10 ^ m + prod ) y, z( )w, y (( × 10 ^ m + prod ) y, z(;;

Page 65: Algorithm(Poor Ameni)

لگوریتم ا برای حالت بدترین در زمانی پیچیدگی لگوریتم تحلیل ا برای حالت بدترین در زمانی پیچیدگی --99تحلیل22) صحیح) اعداد (ضرب صحیح) اعداد ضرب

: اصلی : عمل اصلی در عمل بزرگ صحیح عدد یک در دهدهی رقم یک در دستکاری بزرگ صحیح عدد یک در دهدهی رقم یک دستکاری

اعمال انجام یا کردن، تفریق ، کردن جمع اعمال هنگام انجام یا کردن، تفریق ، کردن جمع ، ، divide 10 ^ divide 10 ^ mmهنگام

rem 10 ^rem 10 ^mm 1010×× یایا ^ ^ mm .یک یک. هر را هر اعمال این را از اعمال این . mmاز دهد می انجام .بار دهد می انجام بار

: ورودی :اندازه ورودی . nn اندازه صحیح عدد دو از یک هر ارقام تعداد ،. صحیح عدد دو از یک هر ارقام تعداد ،

ازای ازای به از nnکه که n > sn > sبه از توانی W ) n ( = 4 W )n / 2( + cnW ) n ( = 4 W )n / 2( + cnاستاست22توانی

W ) s ( = 0W ) s ( = 0

W ( n ) W ( n ) ЄЄ θθ ( n² ) ( n² )

Page 66: Algorithm(Poor Ameni)

بزرگ ::22--1010الگوریتم الگوریتم صحیح اعداد بزرگ ضرب صحیح اعداد 22ضرب

large_integerlarge_integer prod2 ) prod2 )large_integerlarge_integer u , u , large_ integerlarge_ integer v( v(

large_integerlarge_integer x , y , w , z , r , p , q x , y , w , z , r , p , q;;

intint n , m n , m;;

n = maximum )number of digits in u,number of digits in v(n = maximum )number of digits in u,number of digits in v(;;

if if )u = = 0 || v = = 0( )u = = 0 || v = = 0(

return return 00; ;

else ifelse if )n < = threshold )n < = threshold)) returnreturn u × v obtained in the usual way u × v obtained in the usual way ; ;

Page 67: Algorithm(Poor Ameni)

elseelse

m = Į n / 2m = Į n / 2;⌡ ;⌡

x = u x = u dividedivide 10 ^ 10 ^ m m ; y = ; y = remrem 10 ^ 10 ^ mm ; ;

w = v w = v dividedivide 10 ^ 10 ^ m m ; z =; z = rem rem 10 ^ 10 ^ mm;;

r = prod2 )x + y, w + z (r = prod2 )x + y, w + z (;;

p = prod2 ) x , w (p = prod2 ) x , w (

q = prod2 ) y , z (q = prod2 ) y , z (;;

return p ×10 ^ 2m + ) r – p – q ( × 10 ^ m +qreturn p ×10 ^ 2m + ) r – p – q ( × 10 ^ m +q ; ;

Page 68: Algorithm(Poor Ameni)

الگوریتم برای حالت بدترین در زمانی پیچیدگی الگوریتم تحلیل برای حالت بدترین در زمانی پیچیدگی ) ) 22--1010تحلیلصحیح اعداد صحیح ضرب اعداد ((22ضرب

: اصلی : عمل اصلی بزرگ عمل صحیح عدد یک در دهدهی رقم یک بزرگ دستکاری صحیح عدد یک در دهدهی رقم یک دستکاریدردر

اعمال انجام یا کردن، تفریق ، کردن جمع اعمال هنگام انجام یا کردن، تفریق ، کردن جمع ، ، divide 10 ^ divide 10 ^ mmهنگام

rem 10 ^rem 10 ^mm 1010×× یایا ^ ^ mm .یک یک. هر را هر اعمال این را از اعمال این می mmاز انجام می بار انجام باردهد.دهد.

: ورودی :اندازه ورودی . nn اندازه صحیح عدد دو از یک هر ارقام تعداد ،. صحیح عدد دو از یک هر ارقام تعداد ،

ازای ازای به از nnکه که n > sn > sبه از توانی استاست22توانی

3W)n/2(+ c n <=W )n( <= 3W )n / 2 +1( + c n3W)n/2(+ c n <=W )n( <= 3W )n / 2 +1( + c n

W )s( = 0W )s( = 0

W (n) = W (n) = θθ (n ^ 1.58) (n ^ 1.58)

Page 69: Algorithm(Poor Ameni)

: سوم :فصل سوم فصل

پویا نویسی پویا برنامه نویسی برنامه

Page 70: Algorithm(Poor Ameni)

به نمونه که لحاظ این از پویا، نویسی به برنامه نمونه که لحاظ این از پویا، نویسی برنامهمشابه ، شود می تقسیم کوچکتر های مشابه نمونه ، شود می تقسیم کوچکتر های نمونه ، روش این در ولی است حل و تقسیم ، روش روش این در ولی است حل و تقسیم روش

، کنیم می حل را تر کوچک های نمونه ، نخست کنیم می حل را تر کوچک های نمونه نخستاز یکی به گاه هر بعدا و کنیم می ذخیره را از نتایج یکی به گاه هر بعدا و کنیم می ذخیره را نتایج

دوباره محاسبه جای به شد، پیدا نیاز ها دوباره آن محاسبه جای به شد، پیدا نیاز ها آن. کنیم بازیابی را آن است .کافی کنیم بازیابی را آن است کافی

Page 71: Algorithm(Poor Ameni)

به پویا نویسی برنامه الگوریتم یک بسط به مراحل پویا نویسی برنامه الگوریتم یک بسط مراحل: است زیر :شرح است زیر شرح

ای- 11 نمونه حل برای بازگشتی ویژگی یک ای- ارائه نمونه حل برای بازگشتی ویژگی یک ارائهمسئله . مسئله .از از

با- 22 کل به جزء شیوه به مسئله از ای نمونه با- حل کل به جزء شیوه به مسئله از ای نمونه حل. تر کوچک های نمونه .حل تر کوچک های نمونه حل

Page 72: Algorithm(Poor Ameni)

از ::11--33الگوریتم الگوریتم استفاده با ای جمله دو از ضریب استفاده با ای جمله دو ضریبحل و حل تقسیم و تقسیم

intint bin ) bin ) int int n , n , int int k(k(

if if ) k == 0 || n ==k () k == 0 || n ==k (

returnreturn 1 1; ;

elseelse

return return bin )n – 1 , k -1 ( + bin ) n-1 , k(bin )n – 1 , k -1 ( + bin ) n-1 , k(;;

Page 73: Algorithm(Poor Ameni)

از ::33--22الگوریتم الگوریتم استفاده با ای جمله دو از ضریب استفاده با ای جمله دو ضریبپویا نویسی پویا برنامه نویسی برنامه

intint bin2 ) bin2 ) intint n , n , intint k ( k (

indexindex i , j i , j; ;

intint B ]0..n[]0..k[ B ]0..n[]0..k[ forfor ) i = 0; i ≤ n ; i ++( ) i = 0; i ≤ n ; i ++(

if if ) j == 0 || j == i () j == 0 || j == i ( B ]i[ ]j[ = 1B ]i[ ]j[ = 1;;

elseelse B ]i[ ]j[ = B ] i – 1 [ ] j -1 [ + B ] i -1 [ ]j[B ]i[ ]j[ = B ] i – 1 [ ] j -1 [ + B ] i -1 [ ]j[;;

return return B]n[ ]k[B]n[ ]k[::

Page 74: Algorithm(Poor Ameni)

کوتاه ::33--33الگوریتم الگوریتم یافتن برای فلوید کوتاه الگوریتم یافتن برای فلوید الگوریتممسیر مسیر ترین ترین

voidvoid floyd ) floyd ) int int n n const numberconst number W W,][][ ,][][

numbernumber D D,][][ ,][][

indexindex i , j , k i , j , k; ; D = WD = W; ;

forfor ) k = 1 ; k ≤ n ; k ++( ) k = 1 ; k ≤ n ; k ++( for for ) i = 1; i ≤ n ; i++() i = 1; i ≤ n ; i++( forfor ) j = 1 ; j ≤ n ; j ++( ) j = 1 ; j ≤ n ; j ++(

D ]i[ ]j[ = minimum ) D ]i[]j[, D]i[]k[ + D]k[]j[(D ]i[ ]j[ = minimum ) D ]i[]j[, D]i[]k[ + D]k[]j[(;;

Page 75: Algorithm(Poor Ameni)

لگوریتم ا برای حالت بدترین در زمانی پیچیدگی لگوریتم تحلیل ا برای حالت بدترین در زمانی پیچیدگی --33تحلیل33

) مسیر) کوتاهترین یافتن برای فلوید (الگوریتم مسیر) کوتاهترین یافتن برای فلوید الگوریتم

: اصلی : عمل اصلی حلقه عمل در موجود حلقه دستورهای در موجود . .forforدستورهای

: ورودی :اندازه ورودی . nnاندازه گراف رئوس تعداد ،. گراف رئوس تعداد ،

T )n( = n × n × n = n³ T )n( = n × n × n = n³ ЄЄ θθ )n³( )n³(

Page 76: Algorithm(Poor Ameni)

یافتن ::33--44الگوریتم الگوریتم برای فلوید یافتن الگوریتم برای فلوید الگوریتممسیر مسیر کوتاهترین 22کوتاهترین

void void floyd2 )floyd2 ) int int nn,,

const numberconst number W W,][][ ,][][

numbernumber D D,][][ ,][][

index index P P)][][ )][][

indexindex i , j , k i , j , k; ;

for for ) i = 1 ; i ) i = 1 ; i ≤≤ n ; i ++( n ; i ++(

for for ) j = 1 ; j ) j = 1 ; j ≤≤ n ; j++( n ; j++(

Page 77: Algorithm(Poor Ameni)

P ]i[ ]j[ = 0P ]i[ ]j[ = 0 ; ;

D = WD = W;;

for for ) k = 1 ; k <= n ; k ++() k = 1 ; k <= n ; k ++(

forfor ) i = 1 ; i <= n ; i ++( ) i = 1 ; i <= n ; i ++(

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

if if ) D ]i[ ]k[ + D ]k[ ]j[ < D ]i[ ]j[ () D ]i[ ]k[ + D ]k[ ]j[ < D ]i[ ]j[ (

P ]i[ ]j[ = kP ]i[ ]j[ = k;;

D ]i[ ]j[ = D ]i[ ]k[ + D ]k[ ]j[D ]i[ ]j[ = D ]i[ ]k[ + D ]k[ ]j[;;

Page 78: Algorithm(Poor Ameni)

مسیر چاپچاپ::33--55الگوریتم الگوریتم مسیر کوتاهترین کوتاهترین

دیگر مسئله: مسئله: راس به راسی از مسیر ترین کوتاه روی واسطه رئوس دیگر چاپ راس به راسی از مسیر ترین کوتاه روی واسطه رئوس چاپ. موزون گراف یک .در موزون گراف یک در

voidvoid path ) path ) indexindex q , r( q , r(

if if )P ]q[ ]r[ != 0 ( )P ]q[ ]r[ != 0 ( path )q , P ]q[ ]r[ (path )q , P ]q[ ]r[ (;;

coutcout << “v” << P ]q[ ]r[ << “v” << P ]q[ ]r[;; path )P ]q[ ]r[ , r (path )P ]q[ ]r[ , r (;;

Page 79: Algorithm(Poor Ameni)

بهینه 3-33-3 مسائل و پویا نویسی بهینه برنامه مسائل و پویا نویسی برنامهسازیسازی

الگوریتم یک بسط از مرحله سومین ، بهینه الگوریتم حل یک بسط از مرحله سومین ، بهینه حلسازی بهینه مسائل برای پویا نویسی سازی برنامه بهینه مسائل برای پویا نویسی برنامه

شرح. به الگوریتمی چنین بسط مراحل شرح. است به الگوریتمی چنین بسط مراحل است: است :زیر است زیر

Page 80: Algorithm(Poor Ameni)

ی- 11 بهینه حل که بازگشتی ویژگی یک ی- ارائه بهینه حل که بازگشتی ویژگی یک ارائه. دهد می دست به را مسئله از ای .نمونه دهد می دست به را مسئله از ای نمونه

به- 22 جزء ی شیوه به بهینه حل مقدار به- محاسبه جزء ی شیوه به بهینه حل مقدار محاسبهکل.کل.

33. کل- به جزء ی شیوه به نمونه حل یک کردن .بنا کل- به جزء ی شیوه به نمونه حل یک کردن بنا

Page 81: Algorithm(Poor Ameni)

استفاده با توان نمی را سازی بهینه مسئله استفاده هر با توان نمی را سازی بهینه مسئله هراصل باید که چرا کرد حل پویا نویسی برنامه اصل از باید که چرا کرد حل پویا نویسی برنامه از

. کند صدق مسئله در .بهینگی کند صدق مسئله در بهینگی

اگریک کند می صدق مسئله یک در بهینگی اگریک اصل کند می صدق مسئله یک در بهینگی اصلهمواره ، مسئله از ای نمونه برای بهینه همواره حل ، مسئله از ای نمونه برای بهینه حل

ها نمونه زیر ی همه برای بهینه حل ها حاوی نمونه زیر ی همه برای بهینه حل حاویباشد.باشد.

Page 82: Algorithm(Poor Ameni)

ماتریسها 4-34-3 ای زنجیره ماتریسها ضرب ای زنجیره ضرب

را بهینه ترتیب که است الگوریتمی بسط را هدف بهینه ترتیب که است الگوریتمی بسط هدف. nnبرای برای کند معین .ماتریس کند معین ماتریس

بستگی ها ماتریس ابعاد به فقط بهینه بستگی ترتیب ها ماتریس ابعاد به فقط بهینه ترتیبدارد.دارد.

بر بر عالوه الگوریتم nnعالوه های ورودی تنها ابعاد این الگوریتم ، های ورودی تنها ابعاد این ،هستند.هستند.

. است نمایی صورت به حداقل الگوریتم .این است نمایی صورت به حداقل الگوریتم این

Page 83: Algorithm(Poor Ameni)

ها ::33--66الگوریتم الگوریتم ضرب ها حداقل ضرب حداقل

intint minimult ) minimult ) intint n n,,

constconst int int dd,][ ,][

index index P P) ][][ ) ][][

index index i , j , k , diagonal i , j , k , diagonal;;

intint M ]1..n[ ]1..n[ M ]1..n[ ]1..n[;;

forfor ) i = 1 ; i ) i = 1 ; i ≤ ≤ n ; i ++( n ; i ++(

M ]i[ ]i[ = 0M ]i[ ]i[ = 0::

Page 84: Algorithm(Poor Ameni)

forfor )diagonal = 1; diagonal )diagonal = 1; diagonal ≤ ≤ n -1 ; diagonal ++(n -1 ; diagonal ++(

forfor ) i = 1 ; i ) i = 1 ; i ≤≤ n – diagonal ; i ++( n – diagonal ; i ++(

j = i + diagonalj = i + diagonal; ;

M]i[]j[ = minimum )M]i[]k[ + M]k +1 []j[M]i[]j[ = minimum )M]i[]k[ + M]k +1 []j[ + +

d ] i – 1[ * d ]k[ * d ]j[d ] i – 1[ * d ]k[ * d ]j[;);)

P ]i[]j[ = P ]i[]j[ = a value of k that gave the minimuma value of k that gave the minimum;;

returnreturn M]1[]n[ M]1[]n[;;

Page 85: Algorithm(Poor Ameni)

لگوریتم ا برای معمول حالت زمانی پیچیدگی لگوریتم تحلیل ا برای معمول حالت زمانی پیچیدگی --66تحلیل33) ها) ضرب (حداقل ها) ضرب حداقل

: اصلی : عمل اصلی مقدار عمل هر برای شده اجرا دستورات توان مقدار می هر برای شده اجرا دستورات توان میkk . برای که را ای مقایسه بگیریم نظر در اصلی عمل . را برای که را ای مقایسه بگیریم نظر در اصلی عمل را

در اصلی عمل عنوان به شود، می انجام حداقل در آزمون اصلی عمل عنوان به شود، می انجام حداقل آزمون. گیریم می .نظر گیریم می نظر

: ورودی : اندازه ورودی . nnاندازه شوند ضرب باید که ها ماتریس تعداد ،. شوند ضرب باید که ها ماتریس تعداد ،

N )n -1( )n + 1( / 6 N )n -1( )n + 1( / 6 ЄЄ θθ )n³( )n³(

Page 86: Algorithm(Poor Ameni)

بهینه ::33--77الگوریتم الگوریتم ترتیب بهینه چاپ ترتیب چاپضرب مسئله:مسئله: برای بهینه ترتیب ضرب چاپ برای بهینه ترتیب .nnچاپ .ماتریس ماتریس

void void order ) order ) indexindex i, i, indexindex j( j(

ifif ) i == j( ) i == j( cout cout << “A” << i<< “A” << i; ;

elseelse k = P ]i[ ]j[k = P ]i[ ]j[;; coutcout;“(“ >> ;“(“ >> order ) i , k(order ) i , k(;;

order ) k +1 , j (order ) k +1 , j (;; coutcout;”)“ >> ;”)“ >>

Page 87: Algorithm(Poor Ameni)

بهینه 5-35-3 دودویی جوی و جست های بهینه درخت دودویی جوی و جست های درخت

از دودویی یک دودویی جوی و جست از درخت دودویی یک دودویی جوی و جست درخت ) از) که است شوند می نامیده کلید معموال که ( عناصر از) که است شوند می نامیده کلید معموال که عناصر

: که قسمی به شود، می حاصل مرتب مجموعه :یک که قسمی به شود، می حاصل مرتب مجموعه یک

11. است- کلید یک حاوی گره .هر است- کلید یک حاوی گره هر

Page 88: Algorithm(Poor Ameni)

گره- 22 یک چپ زیردرخت در موجود های گره- کلید یک چپ زیردرخت در موجود های کلیدگره آن کلید مساوی یا تر کوچک گره مفروض، آن کلید مساوی یا تر کوچک مفروض،

هستند.هستند.

گره- 33 یک راست درزیردرخت موجود گره- کلیدهای یک راست درزیردرخت موجود کلیدهایگره آن کلید مساوی یا تر بزرگ گره مفروض، آن کلید مساوی یا تر بزرگ مفروض،

هستند.هستند.

Page 89: Algorithm(Poor Ameni)

دودویی ::33--88الگوریتم الگوریتم جوی و دودویی درختجست جوی و درختجست

voidvoid search ) search ) node _ pointernode _ pointer tree tree, ,

keytype keytype keyin keyin,,

node _ poiner &node _ poiner & p p))

boolbool found found; ;

p = treep = tree;;

found = falsefound = false;;

whilewhile )! found( )! found(

Page 90: Algorithm(Poor Ameni)

ifif ) p - > key == keyin ( ) p - > key == keyin (

found = truefound = true; ;

else ifelse if ) keyin < p - > key ( ) keyin < p - > key (

p = p -> leftp = p -> left; ;

elseelse

p = p - > rightp = p - > right; ;

Page 91: Algorithm(Poor Ameni)

بهینه : :33--99الگوریتم الگوریتم جوی و بهینه درختجست جوی و درختجست

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

void void optsearchtree ) optsearchtree ) intint n n, ,

const floatconst float p p;][;][

float &float & minavg minavg,,

indexindex R R)][][)][][

indexindex i , j , k , diagonal i , j , k , diagonal; ;

Page 92: Algorithm(Poor Ameni)

floatfloat A ]1..n + 1[ ]0..n[ A ]1..n + 1[ ]0..n[;;

for for ) i = 1 ; i ) i = 1 ; i ≤≤ n ; i ++( n ; i ++(

A ]i[ ]i -1[ = 0A ]i[ ]i -1[ = 0

A ]i[ ]i[ = p ]i[A ]i[ ]i[ = p ]i[;;

R ]i[ ]i[ = iR ]i[ ]i[ = i; ;

R ]i[ ] i – 1 [ = 0R ]i[ ] i – 1 [ = 0;;

A] n + 1 [ ]n[ = 0A] n + 1 [ ]n[ = 0; ;

R] n + 1 [ ]n[ = 0R] n + 1 [ ]n[ = 0; ;

Page 93: Algorithm(Poor Ameni)

forfor )diagonal = 1;diagonal )diagonal = 1;diagonal ≤≤ n – 1; diagonal++( n – 1; diagonal++(

for ) i = 1; i for ) i = 1; i ≤≤ n – diagonal ; i ++( n – diagonal ; i ++(

j = i + diagonalj = i + diagonal; ;

A]i[]j[ = minimum)A]i[]k-1[+A]k+1[]j[(+∑pA]i[]j[ = minimum)A]i[]k-1[+A]k+1[]j[(+∑pmm

R]i[]j[ = R]i[]j[ = a value of k that gave the minimuma value of k that gave the minimum;;

minavg = A ]1[]n[minavg = A ]1[]n[;;

Page 94: Algorithm(Poor Ameni)

لگوریتم ا برای معمول حالت زمانی پیچیدگی لگوریتم تحلیل ا برای معمول حالت زمانی پیچیدگی تحلیلبهینه دودویی جستجوی بهینه درخت دودویی جستجوی درخت

: اصلی : عمل اصلی از عمل مقدار هر ازای به شده اجرا از دستورات مقدار هر ازای به شده اجرا دستوراتkk . حداقل آزمون برای مقایسه یک شامل دستورات حداقل . این آزمون برای مقایسه یک شامل دستورات این

است.است.

: ورودی :اندازه ورودی .، ، nn اندازه کلید .تعداد کلید تعداد

T)n( = n ) n -1( ) n + 4 ( / 6 T)n( = n ) n -1( ) n + 4 ( / 6 ЄЄ θθ ) n³ ( ) n³ (

Page 95: Algorithm(Poor Ameni)

جوی ::33 - -1010الگوریتم الگوریتم و درختجست جوی ساخت و درختجست ساختبهینه بهینه دودویی دودویی

node _ pointernode _ pointer tree ) tree ) index index i , j ( i , j (

index index kk; ;

node _ pointernode _ pointer p p; ;

k = R ]i[ ]j[k = R ]i[ ]j[;;

if if ) k == 0 () k == 0 (

returnreturn NULL NULL;;

elseelse

Page 96: Algorithm(Poor Ameni)

p =p = new nodetypenew nodetype; ; p - > key = key [k]p - > key = key [k]; ;

p - > left = tree (i , k – 1)p - > left = tree (i , k – 1);; p - > right = tree ( k+1 , j)p - > right = tree ( k+1 , j);;

return return P P;;

Page 97: Algorithm(Poor Ameni)

برای ::33--1111الگوریتمالگوریتم پویا نویسی برنامه برای الگوریتم پویا نویسی برنامه الگوریتمگرد دوره فروشنده گرد مسئله دوره فروشنده مسئله

voidvoid tarvel ) int , n tarvel ) int , n

const numberconst number W W, ] [] [, ] [] [

index index P P, ] [ ] [, ] [ ] [

number &number & minlength minlength))

index index i , j , k i , j , k; ;

numbernumber D]1..n[]subset of V - v D]1..n[]subset of V - v11 [ [; ;

forfor ) i = 2 ; i ) i = 2 ; i ≤≤ n ; i ++( n ; i ++(

Page 98: Algorithm(Poor Ameni)

D]i[ ]Ø[ = W ]i[ ]1[D]i[ ]Ø[ = W ]i[ ]1[; ;

for )k = 1 ; k for )k = 1 ; k ≤≤ n - 2 ; k ++( n - 2 ; k ++(

for )all subsets A Ç V – v1 containing k vertices(for )all subsets A Ç V – v1 containing k vertices(

for )i such that i != 1 and vfor )i such that i != 1 and vii is not inA( is not inA(

D]i[ ]A[ = minimum ) W ]i[ ]j[ + D ]j[ ]A – vj[(D]i[ ]A[ = minimum ) W ]i[ ]j[ + D ]j[ ]A – vj[(;;

P ]i[ ]A[ = value of j that gave the minimumP ]i[ ]A[ = value of j that gave the minimum;;

Page 99: Algorithm(Poor Ameni)

D ]1[ ] V – vD ]1[ ] V – v11 [ = minimum ) W ]1[ ]j[ [ = minimum ) W ]1[ ]j[ + +

D ]j[ ] V – vD ]j[ ] V – v11 – v – v jj [ [;) ;)

P ]1[ ] V – vP ]1[ ] V – v11 [ = value of j that gave the [ = value of j that gave the minimum minimum;;

minlength = D ]1[ ] V – vminlength = D ]1[ ] V – v11 [ [;;

Page 100: Algorithm(Poor Ameni)

ا برای معمول حالت در زمان و فضا پیچیدگی ا تحلیل برای معمول حالت در زمان و فضا پیچیدگی تحلیلمسئله ) 33--1111لگوریتم لگوریتم برای پویا نویسی برنامه مسئله ) الگوریتم برای پویا نویسی برنامه الگوریتم

) گرد دوره (فروشنده گرد دوره فروشنده

: اصلی : عمل اصلی در عمل ، آخر و اول ی حلقه دو هر در در زمان ، آخر و اول ی حلقه دو هر در زمانحلقه زیرا نیست، چشمگیر میانی حلقه در زمان با حلقه مقایسه زیرا نیست، چشمگیر میانی حلقه در زمان با مقایسه

تویی تودر گوناگون سطوح حاوی تویی میانی تودر گوناگون سطوح حاوی دستورات . میانی دستورات . است استمقدار هر برای شده مقدار اجرا هر برای شده توان را را v v jjاجرا توان می در می اصلی در عمل اصلی عمل

. گرفت .نظر گرفت نظر

ورودی : ورودی : اندازه رئوس ، ، nnاندازه رئوس تعداد . تعداد گراف در .موجود گراف در موجود

T )n( = n 2ⁿ T )n( = n 2ⁿ ЄЄ θθ ) n 2ⁿ ( ) n 2ⁿ (

Page 101: Algorithm(Poor Ameni)

: چهارم :فصل چهارم فصل

طراحی در طراحی روشحریصانه در روشحریصانهالگوریتمالگوریتم

Page 102: Algorithm(Poor Ameni)

، گرفته را عناصر ترتیب به ، حریصانه ، الگوریتم گرفته را عناصر ترتیب به ، حریصانه الگوریتممعین مالکی طبق که را عنصری آن بار معین هر مالکی طبق که را عنصری آن بار هر “ به” توجه بدون رسد، می نظر به “ بهترین به” توجه بدون رسد، می نظر به بهترین

انجام آینده در یا داده انجام قبال که هایی انجام انتخاب آینده در یا داده انجام قبال که هایی انتخاب. دارد می بر داد، .خواهد دارد می بر داد، خواهد

Page 103: Algorithm(Poor Ameni)

پویا نویسی برنامه همانند ، حریصانه پویا الگوریتم نویسی برنامه همانند ، حریصانه الگوریتممی کار به سازی بهینه مسائل حل برای می غالبا کار به سازی بهینه مسائل حل برای غالبا

بیشتری صراحت حریصانه روش ولی بیشتری روند، صراحت حریصانه روش ولی روند،دارد.دارد.

کوچک های نمونه به تقسیم ، حریصانه روش کوچک در های نمونه به تقسیم ، حریصانه روش در. پذیرد نمی صورت .تر پذیرد نمی صورت تر

Page 104: Algorithm(Poor Ameni)

که انتخاب، سری یک انجام با حریصانه که الگوریتم انتخاب، سری یک انجام با حریصانه الگوریتممی نظر به ،بهترین خاص ای لحظه در یک می هر نظر به ،بهترین خاص ای لحظه در یک هرخود جای در انتخاب یعنی کند، می عمل خود رسد جای در انتخاب یعنی کند، می عمل رسد

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

نیست.نیست.

آیا که کرد تعیین باید مفروض الگوریتم یک آیا برای که کرد تعیین باید مفروض الگوریتم یک برای. خیر یا است بهینه همواره .حل خیر یا است بهینه همواره حل

Page 105: Algorithm(Poor Ameni)

تهی مجموعه یک با را کار ، حریصانه تهی الگوریتم مجموعه یک با را کار ، حریصانه الگوریتماضافه مجموعه به عناصری ترتیب به کرده اضافه آغاز مجموعه به عناصری ترتیب به کرده آغاز

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

: است زیر های مولفه شامل ، تکرار دور :هر است زیر های مولفه شامل ، تکرار دور هر

Page 106: Algorithm(Poor Ameni)

انتخاب - - 11 انتخاب روال به روال باید که را عنصربعدی به ، باید که را عنصربعدی ، . انتخاب کند می شود،انتخاب اضافه . مجموعه انتخاب کند می شود،انتخاب اضافه مجموعه

. است حریصانه مالک یک .طبق است حریصانه مالک یک طبق

سنجی - - 22 امکان سنجی بررسی امکان که بررسی کند می تعیین که ، کند می تعیین ،حل،عملی به رسیدن برای جدید مجموعه حل،عملی آیا به رسیدن برای جدید مجموعه آیا

. خیر یا . است خیر یا است

حل - - 33 راه حل بررسی راه آیا بررسی که کند می تعیین آیا ، که کند می تعیین ،یا کند می ارائه را نمونه حل ، جدید یا مجموعه کند می ارائه را نمونه حل ، جدید مجموعه

خیر.خیر.

Page 107: Algorithm(Poor Ameni)

کمینه 1-41-4 شای پو های کمینه درخت شای پو های درخت

شهر چند خواهد می شهری طراح کنید شهر فرض چند خواهد می شهری طراح کنید فرضکه قسمی به کند، وصل هم به جاده با را که معین قسمی به کند، وصل هم به جاده با را معین

. بروند دیگر شهر به شهر هر از بتوانند . مردم بروند دیگر شهر به شهر هر از بتوانند مردمممکن ، باشد کار در ای بودجه محدودیت ممکن اگر ، باشد کار در ای بودجه محدودیت اگر

مقدار حداقل با را کار این بخواهد طراح مقدار است حداقل با را کار این بخواهد طراح است. دهد انجام کشی .جاده دهد انجام کشی جاده

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

Page 108: Algorithm(Poor Ameni)

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

حریصانه الگوریتم یک که ندارد وجود حریصانه تضمینی الگوریتم یک که ندارد وجود تضمینیکه شود می ثابت بدهد، بهینه حل که همواره شود می ثابت بدهد، بهینه حل همواره

درخت همواره پریم و کروسکال های درخت الگوریتم همواره پریم و کروسکال های الگوریتم. کنند می ایجاد را کمینه پوشای .های کنند می ایجاد را کمینه پوشای های

Page 109: Algorithm(Poor Ameni)

پریم 1-1-41-1-4 پریم الگوریتم الگوریتم

یال از تهی ای مجموعه زیر با پریم یال الگوریتم از تهی ای مجموعه زیر با پریم الگوریتمرئوس FFهای های از ای زیرمجموعه رئوس و از ای زیرمجموعه می YYو می آغاز آغاز

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

به به را به . YYرا س را ترین نزدیک دهیم به . می س را ترین نزدیک دهیم ، ، YYمیدر در راسی وزن V – YV – Yراسی با یالی توسط که وزن است با یالی توسط که است

در راسی به در کمینه راسی به متصل متصل YYکمینهاست.است.

Page 110: Algorithm(Poor Ameni)

پریم ::44--11الگوریتم الگوریتم پریم الگوریتم الگوریتم

voidvoid prim ) prim ) intint n n,,

const numberconst number W W,] [ ] [,] [ ] [

set_ of_edges &set_ of_edges & F F) )

indexindex i , vnear i , vnear;;

number number min min;;

edgeedge e e;;

index index nearest ]2..n[ nearest ]2..n[;;

Page 111: Algorithm(Poor Ameni)

numbernumber distance ]2..n[ distance ]2..n[;;

F = ØF = Ø; ;

for for ) i = 2 ; i ) i = 2 ; i ≤≤ n ; i ++( n ; i ++(

narest ]i[ = 1narest ]i[ = 1; ;

distance ]i[ = W ]1[ ]i[distance ]i[ = W ]1[ ]i[; ;

repeatrepeat ) n-1 times ( ) n-1 times (

minmin; ∞ = ; ∞ =

forfor ) i = 2 ; i < = n ; i ++( ) i = 2 ; i < = n ; i ++(

ifif ) 0 ) 0 ≤ ≤ distance ]i[ < min (distance ]i[ < min (

Page 112: Algorithm(Poor Ameni)

min = distance ]i[min = distance ]i[; ;

vnear = ivnear = i; ;

e = edge connecting vertices indexed by e = edge connecting vertices indexed by near and nearest ] vnear [ near and nearest ] vnear [ ; ;

add e to Fadd e to F; ;

distance ] vnear [ = -1distance ] vnear [ = -1; ;

forfor ) i = 2 ; i ) i = 2 ; i ≤≤ n ; i ++( n ; i ++(

Page 113: Algorithm(Poor Ameni)

if if ) W]i[ ] vnear [ < distance ]i[() W]i[ ] vnear [ < distance ]i[(

distance ]i[ = W ]i[ ] vnear [distance ]i[ = W ]i[ ] vnear [; ;

nearest ]i[ = vnearnearest ]i[ = vnear; ;

Page 114: Algorithm(Poor Ameni)

لگوریتم ا برای معمول حالت در زمانی پیچیدگی لگوریتم تحلیل ا برای معمول حالت در زمانی پیچیدگی تحلیل11--44) پریم) (الگوریتم پریم) الگوریتم

: اصلی : عمل اصلی حلقه عمل حلقه در حلقه repeatrepeatدر حلقه دو یک ) دو هر که دارد یک )وجود هر که دارد n – 1n – 1وجود))

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

. گرفت نظر در اصل عمل اجرای بار یک عنوان .به گرفت نظر در اصل عمل اجرای بار یک عنوان به

: ورودی : اندازه ورودی . nnاندازه رئوس تعداد ،. رئوس تعداد ،

T )n( = 2 ) n – 1( ) n – 1( T )n( = 2 ) n – 1( ) n – 1( ЄЄ θθ ) n²( ) n²(

Page 115: Algorithm(Poor Ameni)

44--11قضیه قضیه

پوشای درخت یک همواره پریم پوشای الگوریتم درخت یک همواره پریم الگوریتم. کند می تولید .کمینه کند می تولید کمینه

مجموعه اثبات : اثبات : دهیم نشان که ن آ مجموعه برای دهیم نشان که ن آ از FFبرای از پس پستکرارحلقه بار تکرارحلقه هر بار است repeatrepeatهر بخش امید است ، بخش امید ،

. کنیم می استفاده .ازاستقرا کنیم می استفاده ازاستقرا

استقرا : استقرا :مبنای مجموعه مبنای که است مجموعه واضح که است امید امید ØØواضح. است .بخش است بخش

Page 116: Algorithm(Poor Ameni)

کروسکال ::22--44الگوریتم الگوریتم کروسکال الگوریتم الگوریتم

voidvoid kruskal ) kruskal ) int int n ,n , int int m m,,

set _ of _ edgesset _ of _ edges E E,,

set _ of _edgesset _ of _edges & F & F) )

indexindex i , j i , j; ;

set _pointerset _pointer p , q p , q;;

edgeedge e e; ;

sort the m edges in E by weight insort the m edges in E by weight in

Page 117: Algorithm(Poor Ameni)

nondecreasing ordernondecreasing order;;

F = ØF = Ø; ;

intitial )n(intitial )n(; ;

whilewhile) number of edges in F is less than n-1() number of edges in F is less than n-1(

e = edge with least weight not yete = edge with least weight not yet

consideredconsidered; ;

i , j = indices of vertices connected by ei , j = indices of vertices connected by e;;

p = find )i(p = find )i(; ;

q = find )i(q = find )i(; ;

Page 118: Algorithm(Poor Ameni)

ifif )! equal ) p, q (( )! equal ) p, q ((

merge ) p , q (merge ) p , q (; ;

add e to Fadd e to F; ;

Page 119: Algorithm(Poor Ameni)

لگوریتم ا برای حالت بدترین در زمانی پیچیدگی لگوریتم تحلیل ا برای حالت بدترین در زمانی پیچیدگی تحلیل22--44) کروسکال) (الگوریتم کروسکال) الگوریتم

: اصلی : عمل اصلی .عمل مقایسه دستور .یک مقایسه دستور یک

ورودی : ورودی : اندازه و nnاندازه رئوس تعداد و ، رئوس تعداد ،mm . ها یال .تعداد ها یال تعداد

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

ها- 11 یال سازی مرتب برای الزم ها- زمان یال سازی مرتب برای الزم . .زمان

W )m( W )m( ЄЄ θθ ) m lg m( ) m lg m(

Page 120: Algorithm(Poor Ameni)

حلقه- 22 در حلقه- زمان در .. whilewhileزمان

W )m( W )m( ЄЄ θθ ) m lg m( ) m lg m( به- 33 اولیه دهی مقدار ی برا الزم به- زمان اولیه دهی مقدار ی برا الزم مجموعه مجموعه nnزمان

متمایز.متمایز.

W ) m, n ( W ) m, n ( ЄЄ θθ) m lg m() m lg m(

: حالت بدترین ، نتیجه :در حالت بدترین ، نتیجه در

( (n² lg n²n² lg n² = ) = ) θθ ) n²lg n ( ) n²lg n ( W ) m, n ( W ) m, n ( ЄЄ θθ

Page 121: Algorithm(Poor Ameni)

44--22قضیه قضیه

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

از اثبات : اثبات : شروع با استقرا طریق از از اثبات شروع با استقرا طریق از اثبات. شود می آغاز ها یال از تهی ای .مجموعه شود می آغاز ها یال از تهی ای مجموعه

Page 122: Algorithm(Poor Ameni)

کوتاهترین 2-42-4 برای دیکسترا کوتاهترین الگوریتم برای دیکسترا الگوریتممبدا تک مبدا مسیر تک مسیر

همه به راس هر از مسیر کوتاهترین همه برای به راس هر از مسیر کوتاهترین برایجهت بدون و موزون گراف یک در دیگر جهت رئوس بدون و موزون گراف یک در دیگر رئوس

) الگوریتم (یک الگوریتم که θθ(n²(n²یک داریم، حریصانه روش که از داریم، حریصانه روش از. دارد نام دیکسترا .آن دارد نام دیکسترا آن

Page 123: Algorithm(Poor Ameni)

از که دهیم می ارائه فرض این با را از الگوریتم که دهیم می ارائه فرض این با را الگوریتمدیگر، رئوس از یک هر به نظر مورد دیگر، راس رئوس از یک هر به نظر مورد راس

. دارد وجود .مسیری دارد وجود مسیری

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

Page 124: Algorithm(Poor Ameni)

دیکسترا ::44--33الگوریتمالگوریتم دیکسترا الگوریتم الگوریتم

voidvoid dijkstra ) dijkstra ) int int n n,,

const numberconst number W W,] [ ] [,] [ ] [

set _ of _ edges &set _ of _ edges & F F))

index index i , vneari , vnear,,

edgeedge e e; ;

indexindex touch ]2..n[ touch ]2..n[;;

numbernumber length]2..n[ length]2..n[;;

Page 125: Algorithm(Poor Ameni)

F = ØF = Ø; ;

forfor ) i = 2; i ) i = 2; i ≤ ≤ n ; i ++ ( n ; i ++ ( touch ]i[ = 1touch ]i[ = 1; ;

length ]i[ = W ]1[]i[length ]i[ = W ]1[]i[;;

repeat ) n – 1 times (repeat ) n – 1 times ( minmin; ∞ = ; ∞ =

forfor ) i = 2 ; i ) i = 2 ; i ≤ ≤ n ; i ++(n ; i ++( ifif ) 0 <= length ]i[ < min ( ) 0 <= length ]i[ < min (

min = length ]i[min = length ]i[; ;

Page 126: Algorithm(Poor Ameni)

vnear = ivnear = i; ;

e = edge from vertix indexed by touch ]vnear[e = edge from vertix indexed by touch ]vnear[ to vertex indexed by vnearto vertex indexed by vnear;;

add e to Fadd e to F;; forfor ) i = 2 ; i ) i = 2 ; i ≤≤ n; i ++( n; i ++(

if if ) length ]vnear[ + W ]vnear[ ]i[ < length]i[() length ]vnear[ + W ]vnear[ ]i[ < length]i[(

length ]i[ = length ]vnear[ + W ]vnear[ ]i[length ]i[ = length ]vnear[ + W ]vnear[ ]i[;;

Page 127: Algorithm(Poor Ameni)

touch ]i[ = vneartouch ]i[ = vnear; ;

length ]vnear[ = -1length ]vnear[ = -1;;

Page 128: Algorithm(Poor Ameni)

44--33قضیه قضیه

را درسیستم کل زمان که بندی زمان را تنها درسیستم کل زمان که بندی زمان تنهاکه است بندی زمان کند، می سازی که کمینه است بندی زمان کند، می سازی کمینهارائه افزایشزمان حسب بر کارها آن ارائه در افزایشزمان حسب بر کارها آن در

. شوند می مرتب .خدمات شوند می مرتب خدمات

Page 129: Algorithm(Poor Ameni)

معین : :44--44الگوریتم الگوریتم مهلت با بندی معین زمان مهلت با بندی زمان

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

. شود انجام مقررش مهلت در کار آن که .است شود انجام مقررش مهلت در کار آن که است

void void schedule ) schedule ) int int nn, ,

const intconst int deadline deadline, ] [ , ] [

sequence _ of _ integer&sequence _ of _ integer& j j) )

index iindex i; ;

Page 130: Algorithm(Poor Ameni)

sequence_ of_integersequence_ of_integer K K; ;

j = ]1[j = ]1[;;

forfor ) i = 2 ; i ) i = 2 ; i ≤≤ n ; i ++( n ; i ++(

K = J with i added according to nondecreasingK = J with i added according to nondecreasing

values of deadline ]i[values of deadline ]i[;;

ifif ) K is feasible( ) K is feasible(

J = KJ = K;;

Page 131: Algorithm(Poor Ameni)

لگوریتم ا برای حالت بدترین در زمانی پیچیدگی لگوریتم تحلیل ا برای حالت بدترین در زمانی پیچیدگی تحلیلمعین مهلت با بندی معین زمان مهلت با بندی زمان

: اصلی : عمل اصلی هایی عمل مقایسه کارها، سازی مرتب برای هایی باید مقایسه کارها، سازی مرتب برای بایدکه هنگامی و پذیرد که انجام هنگامی و پذیرد کار ) JJبا با KK انجام شدن افزوده از کار ) پس شدن افزوده از پس

ii ) بیشتری های مقایسه شود،به می داده قرار مساوی بیشتری ( ام های مقایسه شود،به می داده قرار مساوی امبودن پذیر امکان که هنگامی و داریم بودن نیاز پذیر امکان که هنگامی و داریم شود، KKنیاز می شود، چک می چک

. مقایسه اصلی عمل است نیاز بیشتری های یسه مقا . به مقایسه اصلی عمل است نیاز بیشتری های یسه مقا بهاست.است.

ورودی : ورودی : اندازه .nnاندازه کارها تعداد ،. کارها تعداد ،

W )n( W )n( ЄЄ θθ )n²( )n²(

Page 132: Algorithm(Poor Ameni)

44--44قضیه قضیه

معین ) ( 44--44الگوریتم الگوریتم مهلت با بندی معین ) ( زمان مهلت با بندی زمان. کند می تولید بهینه مجموعه یک .همواره کند می تولید بهینه مجموعه یک همواره

کارها، اثبات:اثبات: تعداد روی استقرا کارها، ازطریق تعداد روی استقرا می nnازطریق می ،صورت ،صورتپذیرد.پذیرد.

: استقرا :مبنای استقرا بر مبنای قضیه ، باشیم داشته کار یک بر اگر قضیه ، باشیم داشته کار یک اگرقراراست.قراراست.

Page 133: Algorithm(Poor Ameni)

44--55قضیه قضیه

بهینه دودویی کد یک هافمن بهینه الگوریتم دودویی کد یک هافمن الگوریتم. کند می .تولید کند می تولید

. اثبات :اثبات : این با گیرد می صورت استقرا . ازطریق این با گیرد می صورت استقرا ازطریقدرمرحله آمده دست به های درخت که درمرحله فرض آمده دست به های درخت که ، ، iiفرض

بهینه کد با متناظر دودویی درخت در هایی بهینه انشعاب کد با متناظر دودویی درخت در هایی انشعابدر آمده بدست های درخت که دهیم می نشان در اند، آمده بدست های درخت که دهیم می نشان اند،

دودویی i + 1i + 1) ) مرحله )مرحله ) درخت در هایی انشعاب دودویی نیز درخت در هایی انشعاب نیز. اند بهینه کد یک با .متناظر اند بهینه کد یک با متناظر

Page 134: Algorithm(Poor Ameni)

: پنجم :فصل پنجم فصل

عقبگرد عقبگرد راهبرد راهبرد

Page 135: Algorithm(Poor Ameni)

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

. گیرد می بر در را کی مال ، دنباله این .که گیرد می بر در را کی مال ، دنباله این که

مسئله عقبگرد، از کالسیک مثال مسئله یک عقبگرد، از کالسیک مثال وزیر وزیر nnیکاست.است.

Page 136: Algorithm(Poor Ameni)

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

یکسان قطر یا ستون سطر، یک در نباید یکسان ای قطر یا ستون سطر، یک در نباید ایباشند.باشند.

Page 137: Algorithm(Poor Ameni)

جوی و جست ی شده اصالح حالت جوی عقبگرد و جست ی شده اصالح حالت عقبگرد. است درخت یک .عمقی است درخت یک عمقی

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

. باشد نداشته وجود حلی گره آن در .باشدو باشد نداشته وجود حلی گره آن در باشدو

Page 138: Algorithm(Poor Ameni)

مسئله ::55--11الگوریتم الگوریتم برای عقبگرد مسئله الگوریتم برای عقبگرد nnالگوریتموزیروزیر

void void queens )queens ) index index i( i(

indexindex j j;;

if if ) promising)i(() promising)i((

if if ) i == n() i == n(

cout cout << col ]1[ through col ]n[<< col ]1[ through col ]n[;;

elseelse

for for ) j = 1 ; j ) j = 1 ; j ≤≤ n ; j++ ( n ; j++ (

Page 139: Algorithm(Poor Ameni)

col ] i +1 [ = jcol ] i +1 [ = j;;

queens ) i + 1(queens ) i + 1(;;

boolbool promising ) promising ) indexindex i ( i (

indexindex k k; ;

bool bool switch switch;;

k = 1k = 1;;

switch = trueswitch = true; ;

Page 140: Algorithm(Poor Ameni)

while while ) k < i && switch () k < i && switch (

if if )col ]i[ == col]k[ || abs)col]i[ – col]k[ == i-k()col ]i[ == col]k[ || abs)col]i[ – col]k[ == i-k(

switch = falseswitch = false;;

kk;++;++

returnreturn switch switch;;

Page 141: Algorithm(Poor Ameni)

برای 5-35-3 کارلو مونت الگوریتم از برای استفاده کارلو مونت الگوریتم از استفادهیک کارایی کردن یک برآورد کارایی کردن برآورد

عقبگرد عقبگرد الگوریتم الگوریتم

احتمالی ، کارلو مونت های احتمالی الگوریتم ، کارلو مونت های الگوریتمطور به گاه بعدی اجرایی دستور طور هستند،یعنی به گاه بعدی اجرایی دستور هستند،یعنی

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

. هستند .قطعی هستند قطعی

Page 142: Algorithm(Poor Ameni)

یک انتظار مورد مقدار کارلو مونت یک الگوریتم انتظار مورد مقدار کارلو مونت الگوریتمساده فضای یک روی که را تصادفی ساده متغیر فضای یک روی که را تصادفی متغیر

آن میانگین مقدار از استفاده با ، ود می آن تعریف میانگین مقدار از استفاده با ، ود می تعریفمی آورد بر ساده فضای از تصادفی نمونه می روی آورد بر ساده فضای از تصادفی نمونه روی

کند.کند.

Page 143: Algorithm(Poor Ameni)

مقدار به برآورد این که ندارد وجود مقدار تضمینی به برآورد این که ندارد وجود تضمینیانتظار انتظار مورد مورد

آن، شدن نزدیک احتمال ولی باشد، نزدیک آن، واقعی شدن نزدیک احتمال ولی باشد، نزدیک واقعیالگوریتم، برای دسترس در زمان افزایش الگوریتم، با برای دسترس در زمان افزایش با

. یابد می .افزایش یابد می افزایش

Page 144: Algorithm(Poor Ameni)

کارلو : : 55--22الگوریتمالگوریتم مونت کارلو برآورد مونت برآورد

int int estimateestimate)( )(

nodenode v v; ;

intint m, mprod , numnodes m, mprod , numnodes;;

v = root of state space treev = root of state space tree;;

numnodes = 1numnodes = 1;;

m = 1m = 1;;

mprod = 1mprod = 1;;

Page 145: Algorithm(Poor Ameni)

whilewhile ) m != 0( ) m != 0( t = number of children of vt = number of children of v; ;

mprod - mprod * mmprod - mprod * m;; numnodes = numnodes + mprod * tnumnodes = numnodes + mprod * t;; m = number of promising children of vm = number of promising children of v;;

ifif ) m != 0( ) m != 0( v = randomly selected promisingv = randomly selected promising

child of vchild of v; ;

returnreturn numnodes numnodes;;

Page 146: Algorithm(Poor Ameni)

الگوریتم ::55--33الگوریتم الگوریتم برای کارلو مونت آورد الگوریتم بر برای کارلو مونت آورد برالگوریتم)الگوریتم) 55--11

مسئله برای مسئله عقبگرد برای ( nnعقبگرد (وزیر وزیر

int int ostimate _ n_ queens )ostimate _ n_ queens )intint n( n(

indexindex i , j , col ]1..n[ i , j , col ]1..n[;;

intint m , mprod , numnodes m , mprod , numnodes; ;

set _of_ indexset _of_ index prom _children prom _children;;

i = 0i = 0;;

numnodes =1numnodes =1; ;

m = 1m = 1;;

Page 147: Algorithm(Poor Ameni)

mprod = 1mprod = 1; ;

whilewhile ) m != 0 ) m != 0 &&&& i != n ( i != n ( mprod = mprod * mmprod = mprod * m; ;

numnodes = numnodes + mprod * nnumnodes = numnodes + mprod * n;; ii;++ ;++

m = 0m = 0; ; prom_childern = Øprom_childern = Ø;;

forfor ) j = 1 ; j ) j = 1 ; j ≤≤ n ; j++;( n ; j++;(

col ]i[ = jcol ]i[ = j; ; if if ) promising)i(() promising)i((

Page 148: Algorithm(Poor Ameni)

mm;++;++

prom_children = prom _ children U iprom_children = prom _ children U i;;

ifif ) m != 0( ) m != 0(

j = random selection from promj = random selection from prom_ _

childrenchildren; ;

col ]i[col ]i[;;

returnreturn numnodes numnodes;;

Page 149: Algorithm(Poor Ameni)

مسئله ::55--44الگوریتم الگوریتم برای عقبگرد مسئله الگوریتم برای عقبگرد الگوریتمزیر جمع زیر حاصل جمع حاصلها ها مجموعه مجموعه

یک مسئله : مسئله : در موجود صحیح اعداد ترکیبات ی همه یک تعیین در موجود صحیح اعداد ترکیبات ی همه تعیینها nnمجموعه مجموعه آن جمع حاصل که طوری به ، صحیح ها عدد آن جمع حاصل که طوری به ، صحیح عدد

معین مقدار معین مساوی مقدار .WWمساوی .شود شود

voidvoid sum _of _subsets ) sum _of _subsets ) index index i i, , intint weight , weight , intint total total))

if if )promising)i(()promising)i((

if if ) weight == W () weight == W ( cout << include ]1[ through include ]i[cout << include ]1[ through include ]i[ ; ;

elseelse

Page 150: Algorithm(Poor Ameni)

include ]i +1[ = “yesinclude ]i +1[ = “yes; ”; ”

sum_ of_subsets ) i +1 , weight + w ]i +1[sum_ of_subsets ) i +1 , weight + w ]i +1[,,

total – w ] i + 1 [total – w ] i + 1 [;);)

boolbool promising ) index i( promising ) index i(;;

returnreturn )weight + total ≥ W( )weight + total ≥ W( &&&&) weight == W) weight == W|| ||

weight + w ] i + 1 [ ≤ Wweight + w ] i + 1 [ ≤ W;) ;)

Page 151: Algorithm(Poor Ameni)

گراف 5-55-5 آمیزی گراف رنگ آمیزی رنگ

آمیزی رنگ آمیزی مسئله رنگ ی mmمسئله همه یافتن از عبارت ی ، همه یافتن از عبارت ،گراف یک آمیزی رنگ برای ممکن ی ها گراف راه یک آمیزی رنگ برای ممکن ی ها راه

حداکثر از استفاده با ، جهت حداکثر بدون از استفاده با ، جهت رنگ رنگ mmبدونراس دو هیچ که طوری به است، راس متفاوت دو هیچ که طوری به است، متفاوت

. نباشند رنگ هم .مجاوری نباشند رنگ هم مجاوری

Page 152: Algorithm(Poor Ameni)

رنگ ::55--55الگوریتمالگوریتم مسئله برای عقبگرد رنگ الگوریتم مسئله برای عقبگرد الگوریتمmm آمیزیآمیزی

voidvoid m_coloring ) m_coloring )indexindex i ( i (

int int colorcolor; ;

if if ) promising )i(() promising )i((

if if ) i == n() i == n(

cout cout << vcolor]1[ through vcolor ]n[<< vcolor]1[ through vcolor ]n[ ; ;

elseelse

forfor )color = 1; color ≤ m; color ++( )color = 1; color ≤ m; color ++(

Page 153: Algorithm(Poor Ameni)

vcolor ] i + 1[ = colorvcolor ] i + 1[ = color; ;

m_coloring )i + 1(m_coloring )i + 1(;;

boolbool promising ) promising ) indexindex i ( i (

indexindex j j; ;

bool switchbool switch; ;

switch = trueswitch = true;;

Page 154: Algorithm(Poor Ameni)

j = 1j = 1 ; ;

whilewhile ) j < i ) j < i &&&& switch ( switch (

if if ) W ]i[ ]j[ ) W ]i[ ]j[ && && vcolor ]i[ == vcolor]j[(vcolor ]i[ == vcolor]j[(

switch = falseswitch = false; ;

jj;++ ;++

returnreturn switch switch; ;

Page 155: Algorithm(Poor Ameni)

مسئله ::55--66الگوریتم الگوریتم برای عقبگرد مسئله الگوریتم برای عقبگرد الگوریتمها ها مدارهای میلتونیمیلتونی مدارهای

void void hamiltonian ) hamiltonian ) indexindex i ( i (

indexindex j j; ; ifif ) promising )i( ) promising )i(

ifif ) i == n - 1( ) i == n - 1( cout << vindex ]0[ through vindex ] n-1[cout << vindex ]0[ through vindex ] n-1[;;

elseelse for ) j = 2 ; j ≤ n ; j ++(for ) j = 2 ; j ≤ n ; j ++(

Page 156: Algorithm(Poor Ameni)

vindex ] i +1[ = jvindex ] i +1[ = j; ;

hamiltonian ) i +1 (hamiltonian ) i +1 (;;

boolbool promising ) promising ) index index i ( i (

index index jj; ;

boolbool switch switch; ;

ifif) i == n -1 ) i == n -1 &&!&&! W ]vindex ] n-1 [[ ] vindex ]0[[( W ]vindex ] n-1 [[ ] vindex ]0[[(

switch = falseswitch = false ; ;

Page 157: Algorithm(Poor Ameni)

elseelse

switch = trueswitch = true; ; j = 1j = 1;;

whilewhile ) j < i && switch ( ) j < i && switch ( if if )vindex ]i[ == vindex ]j[()vindex ]i[ == vindex ]j[(

switch = falseswitch = false; ; jj;++;++

return return switchswitch;;

Page 158: Algorithm(Poor Ameni)

یک 5-75-7 و صفر پشتی کوله یک مسئله و صفر پشتی کوله مسئله

که داریم قطعات از ای عه مجمو مسئله این که در داریم قطعات از ای عه مجمو مسئله این در. است معین ارزش و وزن دارای یک .هر است معین ارزش و وزن دارای یک هر

. هستند مثبتی اعداد ها ارزش و .اوزان هستند مثبتی اعداد ها ارزش و اوزان

Page 159: Algorithm(Poor Ameni)

درون دزدد می که قطعاتی دارد درنظر درون دزدی دزدد می که قطعاتی دارد درنظر دزدیکل وزن اگر و دهد قرار پشتی کوله کل یک وزن اگر و دهد قرار پشتی کوله یک

از پشتی کوله آن در شده داده قرار از قطعات پشتی کوله آن در شده داده قرار قطعاتمثبت صحیح عدد مثبت یک صحیح عدد رود، WWیک رود، فراتر فراتر

شود می پاره پشتی شود کوله می پاره پشتی ..کوله

Page 160: Algorithm(Poor Ameni)

کوله ::55--77الگوریتم الگوریتم مسئله برای عقبگرد کوله الگوریتم مسئله برای عقبگرد الگوریتمیک و صفر یک پشتی و صفر پشتی

voidvoid knapsack ) knapsack ) index index i i, , int int profit , profit , intint weight weight))

if if ) weight ≤ W ) weight ≤ W && && profit > maxprofit ( profit > maxprofit (

maxprofit = profitmaxprofit = profit; ; numbest = inumbest = i; ;

bestset = includebestset = include;;

if if ) promising )i(() promising )i((

Page 161: Algorithm(Poor Ameni)

include ] i + 1 [ = “yesinclude ] i + 1 [ = “yes;”;”

knapsack ) i + 1, profit + p ] i + 1[ , weightknapsack ) i + 1, profit + p ] i + 1[ , weight+ +

w ] i +1 [w ] i +1 [;);)

include ] i +1[ = “ noinclude ] i +1[ = “ no;”;”

knapsachk ) i +1 , profit , weight (knapsachk ) i +1 , profit , weight (;;

boolbool promising ) promising ) indexindex i ( i (

indexindex j , k j , k; ;

Page 162: Algorithm(Poor Ameni)

int totweightint totweight; ;

float boundfloat bound;;

if if ) weight ≥ W() weight ≥ W(

return return false false; ;

j = i +1j = i +1; ;

bound = profitbound = profit; ;

totweight = weighttotweight = weight; ;

while while ) j <= n ) j <= n &&&& totweight + w]j[ <= W( totweight + w]j[ <= W(

totweight = totweight + W ]j[totweight = totweight + W ]j[;;

Page 163: Algorithm(Poor Ameni)

bound = bound + p]j[bound = bound + p]j[;;

jj;++;++

k = jk = j;;

if if ) k <= n() k <= n(

bound = bound + )W – totweight( * p ]k[/w]k[bound = bound + )W – totweight( * p ]k[/w]k[;;

return return bound > max profitbound > max profit; ;

Page 164: Algorithm(Poor Ameni)

پویا 2-5-72-5-7 نویسی برنامه الگوریتم پویا مقایسه نویسی برنامه الگوریتم مقایسهکوله مسئله برای عقبگرد الگوریتم کوله و مسئله برای عقبگرد الگوریتم و

یک و صفر یک پشتی و صفر پشتی

برنامه الگوریتم توسط که عناصری برنامه تعداد الگوریتم توسط که عناصری تعدادیک و صفر پشتی کوله مسئله برای پویا یک نویسی و صفر پشتی کوله مسئله برای پویا نویسی

به حالت دربدترین شود می به محاسبه حالت دربدترین شود می O Oمحاسبه(minimum (2ⁿ , nW))(minimum (2ⁿ , nW)). دارد .تعلق دارد تعلق

( عقبگرد الگوریتم ، حالت بدترین عقبگرد )در الگوریتم ، حالت بدترین گره گره ⁿn 22))θθدر. کند می چک .را کند می چک را

Page 165: Algorithm(Poor Ameni)

نسبت بیشتری کارایی معموال عقبگرد نسبت الگوریتم بیشتری کارایی معموال عقبگرد الگوریتم. دارد پویا نویسی برنامه الگوریتم .به دارد پویا نویسی برنامه الگوریتم به

با را حل و تقسیم روش ، شانی و با هوروویتز را حل و تقسیم روش ، شانی و هوروویتزکرده ترکیب پویا نویسی برنامه کرده روش ترکیب پویا نویسی برنامه روش

یک و صفر پشتی کوله مسئله برای یک الگوریتمی و صفر پشتی کوله مسئله برای الگوریتمیبه حالت دربدترین که اند داده به بسط حالت دربدترین که اند داده O(2^n/2)O(2^n/2)بسط

. دارد .تعلق دارد تعلق

Page 166: Algorithm(Poor Ameni)

: ششم :فصل ششم فصل

حد و شاخه حد راهبرد و شاخه راهبرد

Page 167: Algorithm(Poor Ameni)

شبا عقبگرد به لحاظ ازآن حد و شاخه شبا راهبرد عقبگرد به لحاظ ازآن حد و شاخه راهبردکه دارد که هت دارد هت

حالت فضای درخت از مسئله حل بریا حالت درآن، فضای درخت از مسئله حل بریا درآن،. شود می .استفاده شود می استفاده

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

Page 168: Algorithm(Poor Ameni)

را عددی گره هر در ، حد و شاخه را الگوریتم عددی گره هر در ، حد و شاخه الگوریتمآیا) ( که شود تاتعیین کند می رامحاسبه آیا) ( حدی که شود تاتعیین کند می رامحاسبه حدی

. خیر یا هست بخش امید گره .این خیر یا هست بخش امید گره این

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

. است بخش امید ، صورت این غیر .در است بخش امید ، صورت این غیر در

Page 169: Algorithm(Poor Ameni)

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

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

حل به کرد، مالحظه شده تعیین پیش از حل ترتیب به کرد، مالحظه شده تعیین پیش از ترتیب . یافت دست . بهینه یافت دست بهینه

Page 170: Algorithm(Poor Ameni)

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

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

. است حد و شاخه کردن هرس عرضی جوی .و است حد و شاخه کردن هرس عرضی جوی و

Page 171: Algorithm(Poor Ameni)

با : : 66--11الگوریتم الگوریتم عرضی جوی و جست با الگوریتم عرضی جوی و جست الگوریتمشاخه شاخه هرسکردن هرسکردن

یک و صفر پشتی کوله مسئله برای حد یک و و صفر پشتی کوله مسئله برای حد و

void void knapsack ) knapsack ) int int nn, ,

const intconst int p ] [ , p ] [ , const intconst int w w,] [ ,] [ intint W W, ,

int &int & maxprofit maxprofit) )

queue _of _ nodequeue _of _ node Q Q;; node node u , v u , v; ; intialize )Q(intialize )Q(;;

Page 172: Algorithm(Poor Ameni)

v.level = 0 ; v.profit = 0 ; v.weight = 0v.level = 0 ; v.profit = 0 ; v.weight = 0; ;

maxprofit = 0maxprofit = 0; ; enqueue )Q , v(enqueue )Q , v(;;

whilewhile )!empty )Q(( )!empty )Q(( dequeue ) Q , v (dequeue ) Q , v (;;

u.level = v.level + 1u.level = v.level + 1;; u.weight = v. weight + w ] u.level[u.weight = v. weight + w ] u.level[;;

u. profit = v.profit + p ] u.level[u. profit = v.profit + p ] u.level[;; ifif ) u.weight <= W && u.profit > maxprofit( ) u.weight <= W && u.profit > maxprofit(

maxprofit = u.profitmaxprofit = u.profit ; ;

Page 173: Algorithm(Poor Ameni)

ifif ) bound )u( > maxprofit ( ) bound )u( > maxprofit ( enqueue )Q, u(enqueue )Q, u(; ;

u.weight = v. weightu.weight = v. weight;; u. profit = v.profitu. profit = v.profit;;

if if ) bound )u( > maxprofit () bound )u( > maxprofit ( enqueue )Q , u(enqueue )Q , u(;;

float bound ) node u(float bound ) node u(

Page 174: Algorithm(Poor Ameni)

indexindex j, k j, k; ; int int totweight totweight;; floatfloat result result; ;

if if ) u.weight >= W() u.weight >= W( returnreturn 0 0;;

elseelse result = u.profitresult = u.profit;;

j = u.level + 1j = u.level + 1;; totweight = u.weighttotweight = u.weight;;

whilewhile) j <= n) j <= n && && totweight +w ]j[ <= W( totweight +w ]j[ <= W(

Page 175: Algorithm(Poor Ameni)

totweight = totweight + w ]j[totweight = totweight + w ]j[;;

result = result + p ]j[result = result + p ]j[;;

jj;++;++

k = jk = j; ;

ifif ) k <= n ( ) k <= n (

result = result +) W – totweight ( * p ]k[ / w ]k[result = result +) W – totweight ( * p ]k[ / w ]k[;;

returnreturn result result;;

Page 176: Algorithm(Poor Ameni)

هرسکردن ::66--22الگوریتم الگوریتم با جو و جست هرسکردن بهترین با جو و جست بهترینیک و صفر پشتی کوله مسئله برای حد و یک شاخه و صفر پشتی کوله مسئله برای حد و شاخه

voidvoid knapsack ) knapsack ) intint n n, ,

const intconst int p ] [ , p ] [ , const intconst int w w,] [ ,] [

intint W W, ,

intint & maxproit & maxproit))

priority _ queue_of _nodepriority _ queue_of _node PQ PQ;;

nodenode u , v u , v; ;

initialize )PQ(initialize )PQ(; ;

Page 177: Algorithm(Poor Ameni)

v.level = 0 ; v.profit = 0 ; v.weight = 0v.level = 0 ; v.profit = 0 ; v.weight = 0; ;

maxprofit = 0maxprofit = 0; ;

v.bound = bound )v(v.bound = bound )v(;;

insert )PQ , v(insert )PQ , v(;;

while while )! Empty)PQ(()! Empty)PQ((

remove )PQ , v(remove )PQ , v(;;

ifif) v.bound > maxprofit () v.bound > maxprofit (

u.level = v.level + 1u.level = v.level + 1;;

u.weight = v.weight + w ] u.level [u.weight = v.weight + w ] u.level [;;

u. profit = v.profit + p ] u.level [u. profit = v.profit + p ] u.level [; ;

Page 178: Algorithm(Poor Ameni)

if if ) u.weight <= W && u.profit > maxprofit () u.weight <= W && u.profit > maxprofit ( maxprofit = u.profitmaxprofit = u.profit;;

u.bound = bound )u(u.bound = bound )u(;; if if ) u.bound > maxprofit () u.bound > maxprofit (

insert )PQ , u(insert )PQ , u(;; u.weight = v.weightu.weight = v.weight; ;

u. profit = v.profitu. profit = v.profit; ; u.bound = bound )u(u.bound = bound )u(; ;

if if ) u.bound > maxprofit () u.bound > maxprofit ( insert )PQ <u (insert )PQ <u (;;

Page 179: Algorithm(Poor Ameni)

گرد 2-62-6 دوره فروشنده گرد مسئله دوره فروشنده مسئله

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

راس هر که آن بر مشروط ، است راس مفروض هر که آن بر مشروط ، است مفروض . یک را مسیری چنین شود مالقات ر با یک . فقط یک را مسیری چنین شود مالقات ر با یک فقط

. گویند می .تور گویند می تور

Page 180: Algorithm(Poor Ameni)

هرس ::66--33الگوریتم الگوریتم با جستجو بهترین هرس الگوریتم با جستجو بهترین الگوریتمدوره فروشنده مسئله برای حد و شاخه دوره کردن فروشنده مسئله برای حد و شاخه کردن

گردگرد

void void travel2 ) int ntravel2 ) int n,,

const numberconst number W W, ] [ ] [ , ] [ ] [ ordered-set &ordered-set & opttour opttour, ,

number &number & minlength minlength) )

priority _ queue _ of _ nodepriority _ queue _ of _ node PQ PQ;; nodenode u , v u , v; ;

initialize ) PQ (initialize ) PQ (; ;

Page 181: Algorithm(Poor Ameni)

v.level = 0v.level = 0; ;

v.path = ]1[v.path = ]1[;;

v.bound = bound )v(v.bound = bound )v(; ;

minlengthminlength; ∞ = ; ∞ =

insert )PQ , v (insert )PQ , v (; ;

whilewhile ) ! Empty )PQ(( ) ! Empty )PQ((

remove) PQ, v (remove) PQ, v (;;

if if ) v.bound < minlength () v.bound < minlength (

u.level = v.level + 1u.level = v.level + 1;;

Page 182: Algorithm(Poor Ameni)

forfor )all i such that 2 ≤ i ≤ n && i is not in v.path( )all i such that 2 ≤ i ≤ n && i is not in v.path(

u.path = v.pathu.path = v.path; ;

put i at the end of u.pathput i at the end of u.path;;

if if ) u.level == n – 2 ( ) u.level == n – 2 (

put index of only vertexput index of only vertex

put in u.path at the end of pathput in u.path at the end of path;;

put 1 at the end of u.pathput 1 at the end of u.path;;

if if ) length )u( < minlength () length )u( < minlength (

minlength = length )u(minlength = length )u(;;

Page 183: Algorithm(Poor Ameni)

opttour = u.pathopttour = u.path; ;

elseelse u.bound = bound )u(u.bound = bound )u(;;

ifif ) u.bound < minlength ( ) u.bound < minlength ( insert )PQ , u (insert )PQ , u (;;

Page 184: Algorithm(Poor Ameni)

بیماری ) (2-32-3 تشخیص ای فرضیه بیماری ) (استنباط تشخیص ای فرضیه استنباط

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

. است ها فته یا .برخی است ها فته یا برخی

محتمل خواهیم می پزشکی در مثال، ی محتمل برا خواهیم می پزشکی در مثال، ی براسری یک از که را ها بیماری از مجموعه سری ترین یک از که را ها بیماری از مجموعه ترین

. کنیم تعیین ، است گیری نتیجه قابل .عالئم کنیم تعیین ، است گیری نتیجه قابل عالئم

Page 185: Algorithm(Poor Ameni)

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

.فرضیهفرضیه میم نا .می میم نا می

باور باور شبکه دادن شبکه نشان برای دادن استانداردی نشان برای استانداردیو بیماری میان روابط نظیر ، احتمالی و روابط بیماری میان روابط نظیر ، احتمالی روابط

. رود می شمار به ها نه .نشا رود می شمار به ها نه نشا

Page 186: Algorithm(Poor Ameni)

با : :66--44الگوریتم الگوریتم جو و جست بهترین با الگوریتم جو و جست بهترین الگوریتمفرضیه استنباط برای حد و شاخه فرضیه هرسکردن استنباط برای حد و شاخه هرسکردن

) کوپر ) الگوریتم (ای کوپر ) الگوریتم ای

voidvoid cooper ) cooper ) intint n n, ,

Bayesian_network_of_n_diseases Bayesian_network_of_n_diseases BN, BN, set _ of _symptomsset _ of _symptoms S S, ,

set_ of _indices &set_ of _indices & best , best , float &float & pbest pbest) )

priority_queue_of_nodepriority_queue_of_node PQ PQ; ;

nodenode u , v u , v; ;

v.level = 0v.level = 0; ;

Page 187: Algorithm(Poor Ameni)

v.D = Øv.D = Ø; ;

best = Øbest = Ø; ;

pbest = p )Ø | S (pbest = p )Ø | S (;;

v.bound = bound )v(v.bound = bound )v(;;

insert )PQ , v (insert )PQ , v (;;

whilewhile ) ! Empty )PQ(( ) ! Empty )PQ((

remove )PQ , v(remove )PQ , v(;;

ifif ) v.bound > pbest ( ) v.bound > pbest (

u.level = v.level + 1u.level = v.level + 1;;

u.D = v.Du.D = v.D ; ;

Page 188: Algorithm(Poor Ameni)

put u.level in u.Dput u.level in u.D;; ifif ) p ) u.D | S ( > pbest( ) p ) u.D | S ( > pbest(

best = u.Dbest = u.D;; pbest = p ) u.D | S (pbest = p ) u.D | S (;;

u.bound = bound)u(u.bound = bound)u(;;

ifif ) u.bouond > pbest ( ) u.bouond > pbest ( insert )PQ, u(insert )PQ, u(;;

u.D = v.Du.D = v.D;; u.bound = bound )u(u.bound = bound )u(;;

if if ) u.bound > pbest () u.bound > pbest (

Page 189: Algorithm(Poor Ameni)

insert )PQ , u (insert )PQ , u (;;

int int bound )bound ) node node u ( u (

if if )u.level == n ()u.level == n ( return return 00; ;

elseelse return return p)u.D | p )S(p)u.D | p )S(;;

Page 190: Algorithm(Poor Ameni)

: هفتم :فصل هفتم فصل

: محاسباتی پیچیدگی بر ای :مقدمه محاسباتی پیچیدگی بر ای مقدمه

سازی مرتب سازی مسئله مرتب مسئله

Page 191: Algorithm(Poor Ameni)

محاسباتی 77- - 11 محاسباتی پیچیدگی پیچیدگی

تمام مطالعه از عبارت محاسباتی تمام پیچیدگی مطالعه از عبارت محاسباتی پیچیدگیمسئله یک حل برای پذیر امکن مسئله الگوهای یک حل برای پذیر امکن الگوهای

. است .مفروض است مفروض

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

. آوریم دست به مفروض مسئله .یک آوریم دست به مفروض مسئله یک

Page 192: Algorithm(Poor Ameni)

محاسباتی تحلیل تحلیل محاسباتی پیچیدگی مسئله پیچیدگی مطالعه با مسئله را مطالعه با راسازی سازی مرتب مرتب

. کنیم می .معرفی کنیم می معرفی: دارد دلیل دو انتخاب :این دارد دلیل دو انتخاب این

حل- 11 را مسئله که که اند شده ابداع الگوریتم حل- چند را مسئله که که اند شده ابداع الگوریتم چند. کنند .می کنند می

است- 22 مسائلی معدود از یکی سازی مرتب است- مسئله مسائلی معدود از یکی سازی مرتب مسئلهزمانی پیچیدگی با هایی الگوریتم بسط در زمانی که پیچیدگی با هایی الگوریتم بسط در که . ایم بوده موفق آن برای پایینی حد به . نزدیک ایم بوده موفق آن برای پایینی حد به نزدیک

Page 193: Algorithm(Poor Ameni)

سازی 2-72-7 مرتب و درجی سازی سازی مرتب مرتب و درجی سازی مرتبانتخابیانتخابی

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

Page 194: Algorithm(Poor Ameni)

درجی ::77--11الگوریتم الگوریتم سازی درجی مرتب سازی مرتب

void void insertionsort )insertionsort ) int int n , n , keytype keytype S] [ ( S] [ (

indexindex i , j i , j; ;

keytype keytype x x; ;

forfor ) i = 2 ; i <= n ; i ++( ) i = 2 ; i <= n ; i ++(

x = S ]i[x = S ]i[;;

j = i + 1j = i + 1;;

Page 195: Algorithm(Poor Ameni)

whilewhile ) j >0 && S ]i[ > x ( ) j >0 && S ]i[ > x (

S ] j + 1 [ = S ]j[S ] j + 1 [ = S ]j[;;

jj; - - ; - -

S ] j + 1 [ = xS ] j + 1 [ = x; ;

Page 196: Algorithm(Poor Ameni)

درا ها کلید های مقایسه تعداد زمانی پیچیدگی درا تحلیل ها کلید های مقایسه تعداد زمانی پیچیدگی تحلیلدرجی سازی مرتب درجی لگوریتم سازی مرتب لگوریتم

حالت بدترین حالت در بدترین در

اصلی : اصلی :عمل .. xxبا با ]S ] j[S ] jمقایسه مقایسه عمل

ورودی : ورودی :اندازه مرتب nn اندازه باید که هایی کلید تعداد مرتب ، باید که هایی کلید تعداد ،شوند.شوند.

W )n( = n) n - 1( / 2W )n( = n) n - 1( / 2

Page 197: Algorithm(Poor Ameni)

درا ها کلید های مقایسه تعداد زمانی پیچیدگی درا تحلیل ها کلید های مقایسه تعداد زمانی پیچیدگی تحلیلدرجی سازی مرتب درجی لگوریتم سازی مرتب لگوریتم

میانگین حالت میانگین در حالت در

اصلی : اصلی :عمل .. xxبا با ]S ] j[S ] jمقایسه مقایسه عمل

ورودی : ورودی :اندازه مرتب nn اندازه باید که هایی کلید تعداد مرتب ، باید که هایی کلید تعداد ،شوند.شوند.

A )n( = n² / 4A )n( = n² / 4

Page 198: Algorithm(Poor Ameni)

الگوریتم برای اضافی فضای از استفاده الگوریتم تحلیل برای اضافی فضای از استفاده ) ) 77--11تحلیل) درجی سازی (مرتب درجی سازی مرتب

با که فضایی با تنها که فضایی ی nnتنها اندازه یابد، می ی افزایش اندازه یابد، می افزایشورودی ورودی آرایه . SSآرایه یک الگوریتم ،این پس . است یک الگوریتم ،این پس است

به اضافی فضای و است درجا سازی به مرتب اضافی فضای و است درجا سازی ((11))مرتبθθ. دارد .تعلق دارد تعلق

Page 199: Algorithm(Poor Ameni)

درجی : 77- - 11جدول جدول ، تعویضی سازی مرتب تحلیل درجی : خالصه ، تعویضی سازی مرتب تحلیل خالصهانتخابی انتخابی و و

استفاده استفاده ازفضایازفضای

اضافیاضافیرکورد رکورد انتساب انتساب

هاهامقایسه مقایسه کلیدکلید

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

درجادرجاW )n( = 3 n²/ 2W )n( = 3 n²/ 2

A )n( = 3 n²/ 2A )n( = 3 n²/ 2

T (n) = nT (n) = n² / 2² / 2

تعویضتعویضیی

درجادرجاW (n) = nW (n) = n² / 2² / 2

A (n) = nA (n) = n² / 4² / 4

W(n) = nW(n) = n² / 2² / 2

A (n) = nA (n) = n² / 4² / 4 درجیدرجی

درجادرجاT (n)= 3nT (n)= 3nT (n) = nT (n) = n² / 2² / 2

انتخابانتخابیی

Page 200: Algorithm(Poor Ameni)

انتخابی ::77--22الگوریتم الگوریتم سازی انتخابی مرتب سازی مرتب

voidvoid selectionsort ) selectionsort ) intint n , n , keytypekeytype S ] [ ( S ] [ (

indexindex i , j , smallest i , j , smallest; ;

forfor ) i = 1; i <= n-1 ; i ++ ( ) i = 1; i <= n-1 ; i ++ ( ifif ) S ]j[ < S ] smallest[( ) S ]j[ < S ] smallest[(

smallest = jsmallest = j; ; exchange S ]i[ and S ]smsllest [exchange S ]i[ and S ]smsllest [; ;

Page 201: Algorithm(Poor Ameni)

77--11قضیه قضیه

که الگوریتمی که هر الگوریتمی از nnهر فقط را متمایز از کلید فقط را متمایز کلیدهر از پس و دهد انجام ها کلید مقایسه هر طریق از پس و دهد انجام ها کلید مقایسه طریق

حذف را وارونگی یک اکثر حد ، مقایسه حذف بار را وارونگی یک اکثر حد ، مقایسه بارحداقل حالت بدترین در باید حداقل کنید، حالت بدترین در باید کنید،

n( n- 1) /4n( n- 1) /4 . دهد انجام ها کلید روی .مقایسه دهد انجام ها کلید روی مقایسه

Page 202: Algorithm(Poor Ameni)

تعویضی سازی مرتب تعویضی الگوریتم سازی مرتب الگوریتم

void void exchangesort ) exchangesort ) int int n , n , keytypekeytype S ] [ ( S ] [ (

indexindex i , j i , j; ;

forfor ) i = 1 ; i <= n -1 ; i ++ ( ) i = 1 ; i <= n -1 ; i ++ (

if if ) S ]j[ < S ]i[ ( ) S ]j[ < S ]i[ (

exchange S ]i[ and S ]j[exchange S ]i[ and S ]j[;;

Page 203: Algorithm(Poor Ameni)

ادغامی 4-74-7 سازی مرتب به دوباره ادغامی نگاهی سازی مرتب به دوباره نگاهی

در ها کلید های مقایسه تعداد زمانی در پیچیدگی ها کلید های مقایسه تعداد زمانی پیچیدگیکه وقتی حالت، بدترین در ادغامی سازی که مرتب وقتی حالت، بدترین در ادغامی سازی مرتب

nn از از توانی به 22توانی کلی طور به به است، کلی طور به θθ(n lg n)(n lg n)است،: دارد :تعلق دارد تعلق

W )n( = n lg n – ) n – 1 (W )n( = n lg n – ) n – 1 (

Page 204: Algorithm(Poor Ameni)

در ها رکورد های مقایسه تعداد زمانی در پیچیدگی ها رکورد های مقایسه تعداد زمانی پیچیدگیبه تقریبا معمول حالت در ادغامی سازی به مرتب تقریبا معمول حالت در ادغامی سازی مرتب

: است زیر :صورت است زیر صورت

T ) n( = 2n lg nT ) n( = 2n lg n

Page 205: Algorithm(Poor Ameni)

ادغامی سازی مرتب به بخشیدن ادغامی بهبود سازی مرتب به بخشیدن بهبود

شیوه سه به را ادغامی سازی مرتب توانیم شیوه می سه به را ادغامی سازی مرتب توانیم می: ببخشیم :بهبود ببخشیم بهبود

روش- 11 به ادغامی سازی ازمرتب ای روش- نسخه به ادغامی سازی ازمرتب ای نسخهپویا نویسی پویا برنامه نویسی برنامه

پیوندی- 22 پیوندی- نسخه نسخه

تر- 33 پیچیده ادغامی تر- الگوریتم پیچیده ادغامی الگوریتم

Page 206: Algorithm(Poor Ameni)

ادغامی: 77--33الگوریتم الگوریتم سازی ادغامی: مرتب سازی نسخه ) نسخه ) 33مرتب) پویا نویسی (برنامه پویا نویسی برنامه

void void mergesort )mergesort ) int int n n , keytype, keytype S ] [ ( S ] [ (

intint m m; ;

indexindex low , mid , high , size low , mid , high , size; ; m = 2 ^ ] lg n[m = 2 ^ ] lg n[; ;

size = 1size = 1; ; repeatrepeat )lgm )lgm timestimes ( (

for for ) low = 1; low <= m -2 * size + 1) low = 1; low <= m -2 * size + 1; ; low = low + 2 * sizelow = low + 2 * size ) )

Page 207: Algorithm(Poor Ameni)

mid = low + size -1mid = low + size -1; ;

high = minimun ) low + 2 * size – 1 , n (high = minimun ) low + 2 * size – 1 , n (;;

merge3 ) low , mid , high , S (merge3 ) low , mid , high , S (;;

size = 2 * sizesize = 2 * size; ;

Page 208: Algorithm(Poor Ameni)

ادغامی : :77--44الگوریتم الگوریتم سازی ادغامی مرتب سازی نسخه ) نسخه ) 44مرتبپیوندی(پیوندی(

voidvoid mergesort4) mergesort4)intint low, low,indexindexhigh,high, index&index&mergedlist(mergedlist(

index mid , list 1 , list 2index mid , list 1 , list 2;;

if ) low == high (if ) low == high (

mergedlist = lowmergedlist = low; ;

S ] mergedlist [.link = 0S ] mergedlist [.link = 0; ;

elseelse

Page 209: Algorithm(Poor Ameni)

mid = Į )low + high ( / 2mid = Į )low + high ( / 2;⌡;⌡

mergesort4 ) low , mid , list1 (mergesort4 ) low , mid , list1 ( ; ;

mergesort4 ) mid + 1, high , list 2(mergesort4 ) mid + 1, high , list 2( ; ;

mergesort4 ) list1 , list 2, mergedlist (mergesort4 ) list1 , list 2, mergedlist (;;

voidvoid merge4) merge4)indexindex list1, list1,indexindexlist2,list2,index&index& mergedlist( mergedlist(

index index lastsortedlastsorted; ;

Page 210: Algorithm(Poor Ameni)

if if S ] list 1[.key < S ]list 2 [ .keyS ] list 1[.key < S ]list 2 [ .key mergedlist = list1mergedlist = list1;;

list1 = S ]list 2 [.linklist1 = S ]list 2 [.link ; ;

elseelse mergedlist = list 2mergedlist = list 2;;

list 2 = S ]list 2 [ .linklist 2 = S ]list 2 [ .link;;

lastsorted = mergedlistlastsorted = mergedlist;;

Page 211: Algorithm(Poor Ameni)

whilewhile ) list1 != 0 ) list1 != 0 &&&& list2 != 0 ( list2 != 0 ( ifif S ]list 1[.key < S ]list 2[.key S ]list 1[.key < S ]list 2[.key

S ] lastsorted [.link = list 1S ] lastsorted [.link = list 1; ; lastsorted = list1lastsorted = list1;;

list 1 = S ] list 1[ .linklist 1 = S ] list 1[ .link;;

elseelse S ] lastsorted [.link = list 2S ] lastsorted [.link = list 2; ;

lastsorted = list2lastsorted = list2;;

Page 212: Algorithm(Poor Ameni)

list 2 = S ] list 2[ .linklist 2 = S ] list 2[ .link;;

ifif ) list 1 ==0( ) list 1 ==0(

S ] lastsorted [.link = list 2S ] lastsorted [.link = list 2; ;

elseelse

S ] lastsorted [ .link = list 1S ] lastsorted [ .link = list 1; ;

Page 213: Algorithm(Poor Ameni)

الگوریتم برای اضافی فضای از استفاده الگوریتم تحلیل برای اضافی فضای از استفاده --44تحلیلادغامی) 77 سازی ادغامی) مرتب سازی ((44مرتب

به اضافی فضای از استفاده حالت هر به در اضافی فضای از استفاده حالت هر θθ ((nn))در. دارد تعلق .پیوند دارد تعلق پیوند

از از منظور ها θθ ((nn))منظور پیوند تعداد که است ها پیونداین پیوند تعداد که است پیونداین θθ ((nn))به به

. دارد .تعلق دارد تعلق

Page 214: Algorithm(Poor Ameni)

سریع 5-75-7 سازی مرتب به دوباره سریع نگاهی سازی مرتب به دوباره نگاهی

voidvoid quicksort ) quicksort ) index index low , low , indexindex high ( high (

index pivotpointindex pivotpoint; ; if if ) high > low () high > low (

partition ) low , high , pivotpoint (partition ) low , high , pivotpoint (; ; quicksort ) low , high , pivotpoint – 1(quicksort ) low , high , pivotpoint – 1(;;

quicksort )pivotpoint + 1 , high (quicksort )pivotpoint + 1 , high (;;

Page 215: Algorithm(Poor Ameni)

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

سازی مرتب در اضافی فضای از سازی استفاده مرتب در اضافی فضای از استفاده: داد کاهش شیوه پنج به توان می را :سریع داد کاهش شیوه پنج به توان می را سریع

روال- 11 روال- در زیر quicksortquicksort در کدام کنیم می تعیین زیر ، کدام کنیم می تعیین ،پشته در را آن همواره و تراست کوچک پشته آرایه در را آن همواره و تراست کوچک آرایه

. داریم می نگه را دیگری و دهیم می . قرار داریم می نگه را دیگری و دهیم می قرار

Page 216: Algorithm(Poor Ameni)

بد در اضافی فضای از استفاده نسخه این بد در در اضافی فضای از استفاده نسخه این دربه حالت به ترین حالت .θθ ((lg nlg n ) )ترین دارد تعلق .اندیس دارد تعلق اندیس

از- 22 ای از- نسخه ای تعداد partitionpartitionنسخه که دارد تعداد وجود که دارد وجودچشمگیر طرزی به را ها رکورد های چشمگیر انتساب طرزی به را ها رکورد های انتساب

. دهد می .کاهش دهد می کاهش

Page 217: Algorithm(Poor Ameni)

تعداد زمانی پیچیدگی نسخه، این تعداد برای زمانی پیچیدگی نسخه، این برایسازی مرتب توسط شده انجام های سازی انتساب مرتب توسط شده انجام های انتساب

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

A (n) = 0.69 ( n + 1 ) lg nA (n) = 0.69 ( n + 1 ) lg n

Page 218: Algorithm(Poor Ameni)

اعمال- 33 از زیادی اعمال- مقدار از زیادی مورد pushpushو و poppopمقدار مورد بی بیاست. است.

نوشتن با توانیم نوشتن می با توانیم و quicksortquicksortمی تکرار شیوه و به تکرار شیوه به

پرهیز بیهوده ازعملیات روال، در پشته پرهیز دستکاری بیهوده ازعملیات روال، در پشته دستکاریکنیم،کنیم،

پشته ، بازگشتی و پشته از استفاده جای به پشته یعنی ، بازگشتی و پشته از استفاده جای به یعنیرارا

. سازیم می .خودمان سازیم می خودمان

Page 219: Algorithm(Poor Ameni)

سازی- 44 مرتب مثل بازگشتی های سازی- الگوریتم مرتب مثل بازگشتی های الگوریتمکه آستانه مقدار یک تعیین با توان می را که سریع آستانه مقدار یک تعیین با توان می را سریع

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

. بخشید .بهبود بخشید بهبود

Page 220: Algorithm(Poor Ameni)

میانه- 55 میانه- انتخاب ، ، S [low]S [low]انتخاب S [ S [ ĮĮ low + high )/2 low + high )/2⌡⌡ ، ،

S [high]S [high]. است محوری ی نقطه .برای است محوری ی نقطه برای

Page 221: Algorithm(Poor Ameni)

سازی 6-76-7 سازی مرتب heapheapمرتب

است دودویی درخت یک کامل دودویی است درخت دودویی درخت یک کامل دودویی درخت: باشد زیر شرایط واجد :که باشد زیر شرایط واجد که

. باشند داشته فرزند دو داخلی های گره ی .همه باشند داشته فرزند دو داخلی های گره ی همه عمق رای دا ها برگ ی عمق همه رای دا ها برگ ی .ddهمه .باشند باشند

Page 222: Algorithm(Poor Ameni)

دودویی درخت یک کامل اساسا دودویی دودویی درخت درخت یک کامل اساسا دودویی درخت: که :است که است

عمق عمق تا .((n – 1n – 1 ) )تا باشد کامل دودویی درخت .یک باشد کامل دودویی درخت یک عمق با هایی عمق گره با هایی طرف dd گره در امکان حد طرف تا در امکان حد تا

. شوند واقع .چپ شوند واقع چپ

Page 223: Algorithm(Poor Ameni)

heapheap به است کامل اساس دودویی درخت به یک است کامل اساس دودویی درخت یک: که :طوری که طوری

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

یا تر بزرگ گره درهر شده نگهداری یا مقادیر تر بزرگ گره درهر شده نگهداری مقادیرآن فرزندان در شده نگهداری مقادیر آن مساوی فرزندان در شده نگهداری مقادیر مساوی

باشد.باشد.

Page 224: Algorithm(Poor Ameni)

سازی 2-6-72-6-7 مرتب سازی سازی پیاده مرتب سازی heapheapپیاده

های داده های ساختمان داده heapheap ساختمان

struct heapstruct heap

keytype S ]1..n[keytype S ]1..n[;;

int heapsizeint heapsize; ;

; ;

void siftdown ) heap& H , index i (void siftdown ) heap& H , index i (

Page 225: Algorithm(Poor Ameni)

indexindex parent, largerchild; keytype siftkey parent, largerchild; keytype siftkey;;

bool spotfoundbool spotfound;;

siftkey = H.S[i]siftkey = H.S[i];;

parent = i ; spotfound = falseparent = i ; spotfound = false;; whilewhile (2* parent <= H.hepsize &&! spotfound) (2* parent <= H.hepsize &&! spotfound)

ifif ( 2 * parent < H.heapsize && H.S [ 2*parent] ( 2 * parent < H.heapsize && H.S [ 2*parent]

largerchild = 2 * parent + 1largerchild = 2 * parent + 1;;

elseelse

largerchild = 2 * parentlargerchild = 2 * parent; ;

Page 226: Algorithm(Poor Ameni)

ifif ( siftkey < H.S[largerchild ]) ( siftkey < H.S[largerchild ])

H.S [parent] = H.S[largerchild ]H.S [parent] = H.S[largerchild ];;

parent = largerhildparent = largerhild; ;

elseelse

spotfound = truespotfound = true;;

H.S[parent] = siftkeyH.S[parent] = siftkey;;

Page 227: Algorithm(Poor Ameni)

keytype keyoutkeytype keyout; ;

keyout = H.S ]1[keyout = H.S ]1[;;

H.S]1[ = H.S]heapsize[H.S]1[ = H.S]heapsize[;;

H.heapsize = H.heapsize -1H.heapsize = H.heapsize -1;;

siftdown )H , 1 (siftdown )H , 1 (;;

returnreturn keyout keyout ; ;

voidvoid removekeys ) removekeys ) intint n n,,

heap&heap& H H

keytypekeytype S S) ] [) ] [

Page 228: Algorithm(Poor Ameni)

indexindex i i; ;

for for ) i = n; i >= 1 ; i --() i = n; i >= 1 ; i --(

S ]i[ = root )H(S ]i[ = root )H(;;

voidvoid makeheap ) makeheap ) int int n n,,

heap& Hheap& H))

indexindex i i; ;

H.heapsize = nH.heapsize = n; ;

Page 229: Algorithm(Poor Ameni)

forfor ) i = Į n/2⌡; i >= 1 ; i --( ) i = Į n/2⌡; i >= 1 ; i --(

siftdown )H,i(siftdown )H,i(;;

Page 230: Algorithm(Poor Ameni)

سازی ::77--55الگوریتم الگوریتم سازی مرتب heapheapمرتب

voidvoid heapsort ) heapsort ) int int n , n , heap&heap& H( H(

makeheap ) n, H (makeheap ) n, H (;;

removekeys ) n, H , H.S (removekeys ) n, H , H.S (;;

Page 231: Algorithm(Poor Ameni)

سریع 7-77-7 سازی مرتب ادغامی، سازی مرتب سریع مقایسه سازی مرتب ادغامی، سازی مرتب مقایسهسازی سازی ومرتب heapheapومرتب

سازی مرتب بر معموال سریع سازی سازی مرتب مرتب بر معموال سریع سازی مرتبheapheap. دارد .ارجحیت دارد ارجحیت

سازی مرتب بر معموال سریع سازی سازی مرتب مرتب بر معموال سریع سازی مرتب. شود می داده ترجیح .ادغامی شود می داده ترجیح ادغامی

Page 232: Algorithm(Poor Ameni)

گیری 1-8-11-8-1 تصمیم ی ها گیری درخت تصمیم ی ها الگوهای درخت الگوهای برای برایسازی سازی مرتب مرتب

برای : : 77--11لم لم قطعی الگوریتم هر با برای متناظر قطعی الگوریتم هر با متناظرسازی سازی مرتب تصمیم nnمرتب درخت یک متمایز، تصمیم کلید درخت یک متمایز، کلید

و معتبر ، دودویی و گیری معتبر ، دودویی دقیقا گیری با شده دقیقا هرس با شده !!nnهرس. دارد وجود .برگ دارد وجود برگ

Page 233: Algorithm(Poor Ameni)

توسط ::77--22لم لم شده انجام های مقایسه توسط تعداد شده انجام های مقایسه تعدادبرابر حالت بدترین در گیری تصمیم درخت برابر یک حالت بدترین در گیری تصمیم درخت یک

. است درخت عمق .با است درخت عمق با

Page 234: Algorithm(Poor Ameni)

اگراگر: : 77--33لم لمmm درخت یک در ها برگ درخت تعداد یک در ها برگ تعدادو و دودویی dd دودویی

: داریم باشد، آن :عمق داریم باشد، آن عمق

d ≥ lg md ≥ lg m

Page 235: Algorithm(Poor Ameni)

77--22قضیه قضیه

که قطعی الگوریتم که هر قطعی الگوریتم متمایزرا nn هر متمایزرا کلید کلیدسازی مرتب ها کلید مقایسه با سازی فقط مرتب ها کلید مقایسه با فقطاقل حد حالت بدترین در باید کند، اقل می حد حالت بدترین در باید کند، می

lg ) n!(lg ) n!( . دهد راانجام ها کلید .مقایسه دهد راانجام ها کلید مقایسه

Page 236: Algorithm(Poor Ameni)

صحیح ::77--44لم لم و مثبت عدد هر ازای صحیح به و مثبت عدد هر ازای ، ، nnبهداریم:داریم:

lg )n!( ≥ n lg n – 1.45 nlg )n!( ≥ n lg n – 1.45 n

Page 237: Algorithm(Poor Ameni)

77--33قضیه قضیه

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

بدترین در باید دهد می انجام ها بدترین کلید در باید دهد می انجام ها کلیدحداقل حداقل حالت حالت

n lg n – 1.45nn lg n – 1.45n را ها کلید را مقایسه ها کلید مقایسه. دهد .انجام دهد انجام

Page 238: Algorithm(Poor Ameni)

حالت 3-8-73-8-7 در رفتار برای پایینی حالت حدود در رفتار برای پایینی حدودمیانگینمیانگین

گیری : : 77--55لم لم تصمیم درخت هر با ظر گیری متنا تصمیم درخت هر با ظر متناسازی مرتب برای شده هرس معتبر سازی دودویی مرتب برای شده هرس معتبر nnدودویی

درخت - یک متمایز، درخت -کلید یک متمایز، معتبر 22کلید گیری معتبر تصمیم گیری تصمیماندازه به اقل حد که دارد وجود شده اندازه هرس به اقل حد که دارد وجود شده هرس

. دارد کارایی اول .درخت دارد کارایی اول درخت

Page 239: Algorithm(Poor Ameni)

که : : 77--66لم لم قطعی الگوریتم که هر قطعی الگوریتم متمایز nnهر متمایز کلید کلیدمی سازی مرتب ها کلید مقایسه با فقط می را سازی مرتب ها کلید مقایسه با فقط را

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

mimEPL )n!( / nmimEPL )n!( / n!!

Page 240: Algorithm(Poor Ameni)

77--77لم لم::- دودویی درخت -هر دودویی درخت دارای 22هر دارای که mmکهو باشد و برگ باشد برگ

EPLEPL برابر برابر آن ی )minEPL)m(minEPL)mآن همه باید ی باشد، همه باید باشد، . باشند سطح ترین پایین در آن های . برگ باشند سطح ترین پایین در آن های برگ

Page 241: Algorithm(Poor Ameni)

درخت -::77--88لم لم درخت -هر دارای 22هر دارای که و mmکه و برگ EplEplبرگبرابر برابر آن آن

minEPL)m(minEPL)m( باید ، باید باشد ، سطح d – md – m^22 باشد در سطح برگ در برگd – 1d – 1

درسطح 2m – 2 ^d2m – 2 ^dو و درسطح برگ برگ ddبرگ و باد برگ داشته و باد داشتهدیگری دیگری

باشد، باشد، نداشته .ddنداشته است درخت .عمق است درخت عمق

Page 242: Algorithm(Poor Ameni)

درخت -: : 77--99لم لم هر ازای درخت -به هر ازای و mmکه که 22به و برگ برگEPLEPL برابربا برابربا آن عمق )minEPL)m(minEPL)mآن عمق باشد، ddباشد،

: از است :عبارت از است عبارت

d = lg md = lg m

Page 243: Algorithm(Poor Ameni)

مقادیر ::77--1010لم لم ی همه ازای مقادیر به ی همه ازای m ≥ 1m ≥ 1بهداریم :داریم :

mimEPL)M( ≥ m Į lg mmimEPL)M( ≥ m Į lg m⌡⌡

Page 244: Algorithm(Poor Ameni)

77--44قضیه قضیه

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

: دهد :انجام دهد انجام

n lg n – 1.45n⌡n lg n – 1.45n⌡ ĮĮ

Page 245: Algorithm(Poor Ameni)

مرتب ) 9-79-7 توزیع طریق از سازی مرتب ) مرتب توزیع طریق از سازی مرتب) مبنایی (سازی مبنایی سازی

مبنایی : : 77--66الگوریتم الگوریتم سازی مبنایی مرتب سازی مرتب

void void radixsort ) radixsort ) node_pointer&node_pointer& mastrrlist mastrrlist ; ;

int int numdigits numdigits))

indexindex i i; ;

node_pointer node_pointer list ]0..9[ list ]0..9[

forfor ) i = 1 ; i <= numdigits ; i ++( ) i = 1 ; i <= numdigits ; i ++(

Page 246: Algorithm(Poor Ameni)

disteibute )i(disteibute )i(;;

coalescecoalesce; ;

void void distrebute ) distrebute ) indexindex i ( i (

indexindex j j; ;

node_pointernode_pointer p p; ;

forfor ) j = 0 ; j <= 9 ; j++( ) j = 0 ; j <= 9 ; j++(

Page 247: Algorithm(Poor Ameni)

list ]j[ = NULLlist ]j[ = NULL;;

p = masterlistp = masterlist; ;

whilewhile ) p != NULL( ) p != NULL(

j = value of ith digit )from the right(in p -> keyj = value of ith digit )from the right(in p -> key;;

link p to the end of list ]j[link p to the end of list ]j[;;

p = p -> linkp = p -> link; ;

voidvoid coalesce coalesce)()(

Page 248: Algorithm(Poor Ameni)

indexindex j j;;

masterlist = NULLmasterlist = NULL;;

forfor ) j = 0 ; j <= 9 ; j++( ) j = 0 ; j <= 9 ; j++(

link the nodes in list ]j[ to the end of masterlistlink the nodes in list ]j[ to the end of masterlist;;

Page 249: Algorithm(Poor Ameni)

تشکر تشکر با با

پایانپایان


Recommended