ها الگوریتم ها درسطراحی الگوریتم درسطراحی(( های کد شبه های با کد شبه ((++ c ++c با
: واحد : تعداد واحد 33تعداد
پورامینی : جعفر کننده پورامینی : تهیه جعفر کننده تهیهالگوریتمها : طراحی کتاب منبع
قمی قمی جعفر نژادجعفر نژادمترجم : مترجم :
: اول :فصل اول فصل
الگوریتم مرتبه و تحلیل ، الگوریتم کارایی مرتبه و تحلیل ، کاراییهاها
حل به مربوط های تکنیک باره در کتاب حل این به مربوط های تکنیک باره در کتاب این. است .مسائل است مسائل
. است مسائل حل در استفاده مورد روش ، .تکنیک است مسائل حل در استفاده مورد روش ، تکنیک
آن پاسخ دنبال به که است پرسشی ، آن مسئله پاسخ دنبال به که است پرسشی ، مسئلههستیم.هستیم.
گام به گام روشی به منجر تکنیک بردن گام بکار به گام روشی به منجر تکنیک بردن بکار. شود) ( می مسئله یک حل در .الگوریتم شود) ( می مسئله یک حل در الگوریتم
تحلیل یعنی الگوریتم، یک بودن تحلیل منظورازسریع یعنی الگوریتم، یک بودن منظورازسریع. حافظه و زمان لحاظ از .آن حافظه و زمان لحاظ از آن
ایراد دو فارسی زبان به الگوریتم ایراد نوشتن دو فارسی زبان به الگوریتم نوشتندارد:دارد:
شیوه- 11 این به پیچیده های الگوریتم شیوه- نوشتن این به پیچیده های الگوریتم نوشتن. است .دشوار است دشوار
الگوریتم- 22 فارسی توصیف از نیست الگوریتم- مشخص فارسی توصیف از نیست مشخصچگونه چگونه
. کرد ایجاد کامپیوتری برنامه یک توان .می کرد ایجاد کامپیوتری برنامه یک توان می
ترتیبی : : 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; ;
آرایه ::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;;
تعویضی مرتبمرتب::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[;;
ماتریسها ماتریسها ضربضرب::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;;
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[
کارآمد 11- - 22 های الگوریتم ساخت کارآمد اهمیت های الگوریتم ساخت اهمیت
دودویی جوی و دودویی جست جوی و جستتر سریع بسیار تر معموال سریع بسیار معموالترتیبی جوی و ترتیبی ازجست جوی و ازجست
است.است. انجام های مقایسه انجام تعداد های مقایسه تعداد
و جست توسط و شده جست توسط شدهبا برابر دودویی با جوی برابر دودویی lg n lg nجوی
است .است . 1 +1 +
تعداد تعداد های های مقایسه مقایسه
شده شده انجام انجامتوسط توسط
جستجوی جستجوی
دودوییدودویی
تعداد تعداد مقایسه مقایسه
انجام انجام های هایتوسط توسط شده شده
جستجوی جستجوی ترتیبیترتیبی
آرایه آرایه اندازه اندازه
88128128128128
11111024102410241024
21211048576104857610485761048576
33334294967294429496729442949672944294967294
ترتیبی : : 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; ;
دودویی ::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;⌡;⌡
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;;
فیبوناچی 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(;;
(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[;;
ها 3-13-1 الگوریتم ها تحلیل الگوریتم تحلیل باید را الگوریتم یک کارایی میزان تعیین باید برای را الگوریتم یک کارایی میزان تعیین برای
. کرد .تحلیل کرد تحلیل
زمانی 1-3-11-3-1 پیچیدگی زمانی تحلیل پیچیدگی تحلیل تعیین ، الگوریتم یک زمانی پیچیدگی تعیین تحلیل ، الگوریتم یک زمانی پیچیدگی تحلیل
ازای به اصلی عمل که است دفعاتی ازای تعداد به اصلی عمل که است دفعاتی تعداد. شود می انجام ورودی از مقدار .هر شود می انجام ورودی از مقدار هر
T(n)T(n) حالت در الگوریتم زمانی پیچیدگی حالت را در الگوریتم زمانی پیچیدگی را. گویند می .معمول گویند می معمول
W(n)W(n) بدترین در زمانی پیچیدگی تحلیل بدترین را در زمانی پیچیدگی تحلیل راحالت حالت
نامند نامند می ..میA(n)A(n) میانگین حالت در زمانی پیچیدگی میانگین را حالت در زمانی پیچیدگی را
. گویند .می گویند می
برای معمول حالت برای زمانی پیچیدگی برای تحلیل معمول حالت برای زمانی پیچیدگی تحلیل) عناصرآرایه) کردن جمع (الگوریتم عناصرآرایه) کردن جمع الگوریتم
: اصلی :عمل اصلی به عمل آرایه از عنصر یک به افزودن آرایه از عنصر یک ..sumsumافزودن
: ورودی :اندازه ورودی .nn اندازه آرایه عناصر تعداد ،. آرایه عناصر تعداد ،
T)n( = nT)n( = n
برای معمول حالت برای زمانی پیچیدگی برای تحلیل معمول حالت برای زمانی پیچیدگی تحلیل) تعویضی) سازی مرتب (الگوریتم تعویضی) سازی مرتب الگوریتم
: اصلی :عمل اصلی . .]i[S]i[Sبا با ]S ]j[S ]jمقایسه مقایسه عمل
: ورودی :اندازه ورودی . اندازه شوند مرتب باید که عناصری .تعداد شوند مرتب باید که عناصری تعداد
T)n( = n)n -1( /2T)n( = n)n -1( /2
برای حالت دربدترین زمانی پیچیدگی برای تحلیل حالت دربدترین زمانی پیچیدگی تحلیل) ترتیبی) جوی و جست (الگوریتم ترتیبی) جوی و جست الگوریتم
: اصلی :عمل اصلی با عمل آرایه عنصر یک با مقایسه آرایه عنصر یک ..xxمقایسه
: ورودی :اندازه ورودی .nn, , اندازه آرایه در موجود عناصر .تعداد آرایه در موجود عناصر تعداد
W )n( = nW )n( = n
برای حالت بهترین در زمانی پیچیدگی برای تحلیل حالت بهترین در زمانی پیچیدگی تحلیل) ترتیبی) وجوی جست (الگوریتم ترتیبی) وجوی جست الگوریتم
: اصلی :عمل اصلی با عمل آرایه عنصر یک با مقایسه آرایه عنصر یک ..xxمقایسه
: ورودی :اندازه ورودی .nn, , اندازه آرایه عناصر .تعداد آرایه عناصر تعداد
B )n( = 1B )n( = 1
الگوریتم 4-14-1 الگوریتم مرتبه مرتبه
ازقبیل زمانی پیچیدگی با یی ها ازقبیل الگوریتم زمانی پیچیدگی با یی ها nnالگوریتم100n100nوو
. گویند می خطی زمانی های الگوریتم .را گویند می خطی زمانی های الگوریتم را
توابع با که را پیچیدگی توابع کامل توابع مجموعه با که را پیچیدگی توابع کامل مجموعهباشند، بندی دسته قابل محض دوم باشند، درجه بندی دسته قابل محض دوم )nn²(²درجه
)) θθ . گویند .می گویند می
درجه توابع با که پیچیدگی ازتوابع ای درجه مجموعه توابع با که پیچیدگی ازتوابع ای مجموعهباشند، بندی دسته قابل محض باشند، سوم بندی دسته قابل محض nn³(³( )) θθسوم
. شوند می .نامیده شوند می نامیده
زیر در متداول پیچیدگی های گروه از زیر برخی در متداول پیچیدگی های گروه از برخی: است شده :داده است شده داده
θθ)lg n()lg n( < < θθ )n( < )n( < θθ )n lg n( < )n lg n( < θθ )n²( < )n²( < θθ )n³( < )n³( < θθ )2 )2 ⁿn((
با 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(
مفروض پیچیدگی تابع یک مفروض برای پیچیدگی تابع یک ، ، )ƒƒ)n()nبرای ))Ω Ω ))ƒƒ)n()n( پیچیدگی توابع از ای پیچیدگی مجموعه توابع از ای که g (n)g (n)مجموعه که است است
مثبت حقیقی ثابت عدد یک ها آن مثبت برای حقیقی ثابت عدد یک ها آن عدد ccبرای یک عدد و یک ومنفی غیر منفی صحیح غیر به NNصحیح که قسمی به دارد به وجود که قسمی به دارد وجود
ی همه ی ازای همه : NN =< =< nnازای :داریم داریم
g )n( =< c × ƒ )n(g )n( =< c × ƒ )n(
مفروض پیچیدگی تابع یک مفروض برای پیچیدگی تابع یک :)ƒƒ)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(
پیچیدگی تابع یک پیچیدگی برای تابع یک n()n( ” ”oo(ƒƒ(o(o ))مفروض، مفروض، )ƒƒ)n()nبرایپیچیدگی” توابع کلیه ازمجموعه عبارت پیچیدگی” کوچک توابع کلیه ازمجموعه عبارت )g )n(g )nکوچک
ازای : به سازند می برآورده را شرط این که ازای : است به سازند می برآورده را شرط این که استمثبت حقیقی مثبت هرثابت حقیقی منفی ccهرثابت غیر صحیح عدد منفی ،یک غیر صحیح عدد ،یک
NN ازای به که قسمی به دارد ازای وجود به که قسمی به دارد وجود
ی ی همه : NN =< =< nnهمه :داریم داریم
g )n( =< c × ƒ )n(g )n( =< c × ƒ )n(
مرتبه های مرتبه ویژگی های ویژگی
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ⁿ(
مقادیر --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((
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((
: دوم :فصل دوم فصل
حل و حل روشتقسیم و روشتقسیم
. است پایین به باال روش یک حل و تقسیم .روش است پایین به باال روش یک حل و تقسیم روش
به رفتن با مسئله باالی سطح نمونه یک به حل رفتن با مسئله باالی سطح نمونه یک حلکوچکتر های نمونه حل آوردن بدست و کوچکتر جزء های نمونه حل آوردن بدست و جزء
. شود می .حاصل شود می حاصل
: باید ، بازگشتی الگوریتم یک ریزی پی :هنگام باید ، بازگشتی الگوریتم یک ریزی پی هنگام
از- 11 نمونه یک حل آوردن دست به برای از- راهی نمونه یک حل آوردن دست به برای راهینمونه چند یا یک حل ازروی نمونه یک حل نمونه روی چند یا یک حل ازروی نمونه یک حل روی
. کنیم طراحی تر .کوچک کنیم طراحی تر کوچک
22 ) ( به- شدن نزدیک نهایی شرایط ) ( شرط به- شدن نزدیک نهایی شرایط شرط. ) کنیم) تعیین را تر کوچک های .نمونه ) کنیم) تعیین را تر کوچک های نمونه
33 ) تعیین- ) نهایی شرایط شرط حالت در را ( حل تعیین- ) نهایی شرایط شرط حالت در را حلکنیم.کنیم.
( ::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;;
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(;;
الگوریتم برای حالت دربدترین زمانی پیچیدگی الگوریتم تحلیل برای حالت دربدترین زمانی پیچیدگی تحلیلبازگشتی دودویی جوی و بازگشتی جست دودویی جوی و جست
: اصلی : عمل اصلی ..]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(
ادغامی 2-22-2 سازی ادغامی مرتب سازی مرتب
. است سازی مرتب با مرتبط فرآیند یک .ادغام است سازی مرتب با مرتبط فرآیند یک ادغام
مرتب آرایه دو ترکیب معنای به دوطرفه مرتب ادغام آرایه دو ترکیب معنای به دوطرفه ادغام. است مرتب ی آرایه یک در .شده است مرتب ی آرایه یک در شده
می زیر مراحل شامل ادغامی سازی می مرتب زیر مراحل شامل ادغامی سازی مرتبشود:شود:
با- 11 یک هر آرایه، زیر دو به آرایه با- تقسیم یک هر آرایه، زیر دو به آرایه n/2n/2تقسیمعنصر.عنصر.
22. آن- سازی مرتب با آرایه زیر هر .حل آن- سازی مرتب با آرایه زیر هر حل
ادغام ترکیبترکیب- - 33 طریق از ها آرایه زیر های ادغام حل طریق از ها آرایه زیر های حل. مرتب آرایه یک در ها .آن مرتب آرایه یک در ها آن
ادغامی : : 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(;;
ادغامادغام ::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; + +; + +
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 [
الگوریتم برای حالت دربدترین زمانی پیچیدگی الگوریتم تحلیل برای حالت دربدترین زمانی پیچیدگی --33تحلیل22) (ادغام) ادغام)
: اصلی : عمل اصلی ]j[V]j[V. . با با ]U ]i[U ]iمقایسهمقایسهعمل
: ورودی :اندازه ورودی دو mmو و hhاندازه از یک هر در موجود عناصر دو ،تعداد از یک هر در موجود عناصر ،تعداد. ورودی .آرایه ورودی آرایه
W ) h , m( = h + m - 1W ) h , m( = h + m - 1
الگوریتم برای حالت دربدترین زمانی پیچیدگی الگوریتم تحلیل برای حالت دربدترین زمانی پیچیدگی --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(
ادغامی : : 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(
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; + + ; + +
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[
حل 3-23-2 و حل روشتقسیم و روشتقسیم
زیر مراحل شامل حل و تقسیم طراحی زیر راهبرد مراحل شامل حل و تقسیم طراحی راهبرداست:است:
نمونه- 11 چند یا یک به مسئله ازیک ای نمونه نمونه- تقسیم چند یا یک به مسئله ازیک ای نمونه تقسیمکوچکتر.کوچکتر.
22 . تر- کوچک های نمونه اگر کوچکتر نمونه هر . حل تر- کوچک های نمونه اگر کوچکتر نمونه هر حلنبودند، کوچک کافی قدر به تر کوچک قدر نبودند، به کوچک کافی قدر به تر کوچک قدر به
. کنید استفاده بازگشت از منظور این .برای کنید استفاده بازگشت از منظور این برای
را- 33 تر کوچک های نمونه حل نیاز، صورت را- در تر کوچک های نمونه حل نیاز، صورت در. آید دست به اولیه نمونه حل تا کنید .ترکیب آید دست به اولیه نمونه حل تا کنید ترکیب
سریع )4-24-2 سازی سریع )مرتب سازی ((quicksortquicksortمرتب
چگونگی از آنها ترتیب سریع، سازی مرتب چگونگی در از آنها ترتیب سریع، سازی مرتب در. شود می ناشی ها آرایه .افراز شود می ناشی ها آرایه افراز
در محوری عنصر آز تر کوچک عناصر در همه محوری عنصر آز تر کوچک عناصر همهدرطرف تر، عناصربزرگ وهمه آن چپ درطرف طرف تر، عناصربزرگ وهمه آن چپ طرف
. هستند واقع آن .راست هستند واقع آن راست
بازگشتی طور به سریع، سازی بازگشتی مرتب طور به سریع، سازی مرتبتا شود می تا فراخوانی شود می فراخوانی
افراز نیز ها آن کند، مرتب را دوآرایه از یک افراز هر نیز ها آن کند، مرتب را دوآرایه از یک هرشوند شوند می می
یک با ای آرایه به تا یابد می ادامه روال یک واین با ای آرایه به تا یابد می ادامه روال واینعنصربرسیم.عنصربرسیم.
. است مرتب ` ذاتا ای آرایه . چنین است مرتب ` ذاتا ای آرایه چنین
سریع : :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(;;
آرایه : : 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 ++(
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[;;
الگوریتم برای معمول حالت در زمانی پیچیدگی الگوریتم تحلیل برای معمول حالت در زمانی پیچیدگی --77تحلیل22) (افراز) افراز)
: اصلی : عمل اصلی . .pivotitempivotitemبا با S [i]S [i]مقایسهمقایسهعمل
: ورودی : اندازه ورودی عناصرموجود n = high – how +1n = high – how +1اندازه تعداد عناصرموجود ، تعداد ،. آرایه زیر .در آرایه زیر در
T)n( = n - 1T)n( = n - 1
الگوریتم برای حالت بدترین در زمانی پیچیدگی الگوریتم تحلیل برای حالت بدترین در زمانی پیچیدگی --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
↓ ↓ ↓ ↓ ↓ ↓ افراز برای الزم افراز زمان برای الزم سازی زمان مرتب برای الزم سازی زمان مرتب برای الزم زمان زمان زمان
سازی مرتب برای سازی الزم مرتب برای الزمراست طرف راست زیرآرایه طرف طرفچپ زیرآرایه آرایه طرفچپ زیر آرایه زیر
ازای ازای به 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²(
الگوریتم برای میانگین حالت در زمانی پیچیدگی الگوریتم تحلیل برای میانگین حالت در زمانی پیچیدگی تحلیل66--22) سریع) سازی (مرتب سریع) سازی مرتب
: اصلی : عمل اصلی . .partitionpartitionدر در pivotitempivotitemبا با S [i]S [i]مقایسهمقایسهعمل
: ورودی : اندازه ورودی در nnاندازه موجود عناصر تعداد در ، موجود عناصر تعداد ،SS..
A )n( A )n( ЄЄ θθ )n lg n( )n lg n(
ماتریساستراسن 5-25-2 ضرب ماتریساستراسن الگوریتم ضرب الگوریتم
و جمع ضرب، لحاظ از الگوریتم این و پیچیدگی جمع ضرب، لحاظ از الگوریتم این پیچیدگی. است سوم درجه پیچیدگی از بهتر .تفریق است سوم درجه پیچیدگی از بهتر تفریق
های ماتریس ضرب مورد در استراسن های روش ماتریس ضرب مورد در استراسن روش22××22. ندارد چندانی .ارزش ندارد چندانی ارزش
استراسناستراسن ::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;;
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;;
الگوریتم در ها ضرب تعداد زمانی پیچیدگی الگوریتم تحلیل در ها ضرب تعداد زمانی پیچیدگی --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(
تفریقهای هاو تعدادجمع زمانی پیچیدگی تفریقهای تحلیل هاو تعدادجمع زمانی پیچیدگی تحلیل ) معمول ) درحالت استرسن ( الگوریتم معمول ) درحالت استرسن الگوریتم
: اصلی : عمل اصلی .عمل ساده تفریق یا جمع .یک ساده تفریق یا جمع یک
: ورودی :اندازه ورودی . 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(
بزرگ : : 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; ;
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(;;
لگوریتم ا برای حالت بدترین در زمانی پیچیدگی لگوریتم تحلیل ا برای حالت بدترین در زمانی پیچیدگی --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² )
بزرگ ::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 ; ;
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 ; ;
الگوریتم برای حالت بدترین در زمانی پیچیدگی الگوریتم تحلیل برای حالت بدترین در زمانی پیچیدگی ) ) 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)
: سوم :فصل سوم فصل
پویا نویسی پویا برنامه نویسی برنامه
به نمونه که لحاظ این از پویا، نویسی به برنامه نمونه که لحاظ این از پویا، نویسی برنامهمشابه ، شود می تقسیم کوچکتر های مشابه نمونه ، شود می تقسیم کوچکتر های نمونه ، روش این در ولی است حل و تقسیم ، روش روش این در ولی است حل و تقسیم روش
، کنیم می حل را تر کوچک های نمونه ، نخست کنیم می حل را تر کوچک های نمونه نخستاز یکی به گاه هر بعدا و کنیم می ذخیره را از نتایج یکی به گاه هر بعدا و کنیم می ذخیره را نتایج
دوباره محاسبه جای به شد، پیدا نیاز ها دوباره آن محاسبه جای به شد، پیدا نیاز ها آن. کنیم بازیابی را آن است .کافی کنیم بازیابی را آن است کافی
به پویا نویسی برنامه الگوریتم یک بسط به مراحل پویا نویسی برنامه الگوریتم یک بسط مراحل: است زیر :شرح است زیر شرح
ای- 11 نمونه حل برای بازگشتی ویژگی یک ای- ارائه نمونه حل برای بازگشتی ویژگی یک ارائهمسئله . مسئله .از از
با- 22 کل به جزء شیوه به مسئله از ای نمونه با- حل کل به جزء شیوه به مسئله از ای نمونه حل. تر کوچک های نمونه .حل تر کوچک های نمونه حل
از ::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(;;
از ::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[::
کوتاه ::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[(;;
لگوریتم ا برای حالت بدترین در زمانی پیچیدگی لگوریتم تحلیل ا برای حالت بدترین در زمانی پیچیدگی --33تحلیل33
) مسیر) کوتاهترین یافتن برای فلوید (الگوریتم مسیر) کوتاهترین یافتن برای فلوید الگوریتم
: اصلی : عمل اصلی حلقه عمل در موجود حلقه دستورهای در موجود . .forforدستورهای
: ورودی :اندازه ورودی . nnاندازه گراف رئوس تعداد ،. گراف رئوس تعداد ،
T )n( = n × n × n = n³ T )n( = n × n × n = n³ ЄЄ θθ )n³( )n³(
یافتن ::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++(
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[;;
مسیر چاپچاپ::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 (;;
بهینه 3-33-3 مسائل و پویا نویسی بهینه برنامه مسائل و پویا نویسی برنامهسازیسازی
الگوریتم یک بسط از مرحله سومین ، بهینه الگوریتم حل یک بسط از مرحله سومین ، بهینه حلسازی بهینه مسائل برای پویا نویسی سازی برنامه بهینه مسائل برای پویا نویسی برنامه
شرح. به الگوریتمی چنین بسط مراحل شرح. است به الگوریتمی چنین بسط مراحل است: است :زیر است زیر
ی- 11 بهینه حل که بازگشتی ویژگی یک ی- ارائه بهینه حل که بازگشتی ویژگی یک ارائه. دهد می دست به را مسئله از ای .نمونه دهد می دست به را مسئله از ای نمونه
به- 22 جزء ی شیوه به بهینه حل مقدار به- محاسبه جزء ی شیوه به بهینه حل مقدار محاسبهکل.کل.
33. کل- به جزء ی شیوه به نمونه حل یک کردن .بنا کل- به جزء ی شیوه به نمونه حل یک کردن بنا
استفاده با توان نمی را سازی بهینه مسئله استفاده هر با توان نمی را سازی بهینه مسئله هراصل باید که چرا کرد حل پویا نویسی برنامه اصل از باید که چرا کرد حل پویا نویسی برنامه از
. کند صدق مسئله در .بهینگی کند صدق مسئله در بهینگی
اگریک کند می صدق مسئله یک در بهینگی اگریک اصل کند می صدق مسئله یک در بهینگی اصلهمواره ، مسئله از ای نمونه برای بهینه همواره حل ، مسئله از ای نمونه برای بهینه حل
ها نمونه زیر ی همه برای بهینه حل ها حاوی نمونه زیر ی همه برای بهینه حل حاویباشد.باشد.
ماتریسها 4-34-3 ای زنجیره ماتریسها ضرب ای زنجیره ضرب
را بهینه ترتیب که است الگوریتمی بسط را هدف بهینه ترتیب که است الگوریتمی بسط هدف. nnبرای برای کند معین .ماتریس کند معین ماتریس
بستگی ها ماتریس ابعاد به فقط بهینه بستگی ترتیب ها ماتریس ابعاد به فقط بهینه ترتیبدارد.دارد.
بر بر عالوه الگوریتم nnعالوه های ورودی تنها ابعاد این الگوریتم ، های ورودی تنها ابعاد این ،هستند.هستند.
. است نمایی صورت به حداقل الگوریتم .این است نمایی صورت به حداقل الگوریتم این
ها ::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::
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[;;
لگوریتم ا برای معمول حالت زمانی پیچیدگی لگوریتم تحلیل ا برای معمول حالت زمانی پیچیدگی --66تحلیل33) ها) ضرب (حداقل ها) ضرب حداقل
: اصلی : عمل اصلی مقدار عمل هر برای شده اجرا دستورات توان مقدار می هر برای شده اجرا دستورات توان میkk . برای که را ای مقایسه بگیریم نظر در اصلی عمل . را برای که را ای مقایسه بگیریم نظر در اصلی عمل را
در اصلی عمل عنوان به شود، می انجام حداقل در آزمون اصلی عمل عنوان به شود، می انجام حداقل آزمون. گیریم می .نظر گیریم می نظر
: ورودی : اندازه ورودی . nnاندازه شوند ضرب باید که ها ماتریس تعداد ،. شوند ضرب باید که ها ماتریس تعداد ،
N )n -1( )n + 1( / 6 N )n -1( )n + 1( / 6 ЄЄ θθ )n³( )n³(
بهینه ::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;”)“ >> ;”)“ >>
بهینه 5-35-3 دودویی جوی و جست های بهینه درخت دودویی جوی و جست های درخت
از دودویی یک دودویی جوی و جست از درخت دودویی یک دودویی جوی و جست درخت ) از) که است شوند می نامیده کلید معموال که ( عناصر از) که است شوند می نامیده کلید معموال که عناصر
: که قسمی به شود، می حاصل مرتب مجموعه :یک که قسمی به شود، می حاصل مرتب مجموعه یک
11. است- کلید یک حاوی گره .هر است- کلید یک حاوی گره هر
گره- 22 یک چپ زیردرخت در موجود های گره- کلید یک چپ زیردرخت در موجود های کلیدگره آن کلید مساوی یا تر کوچک گره مفروض، آن کلید مساوی یا تر کوچک مفروض،
هستند.هستند.
گره- 33 یک راست درزیردرخت موجود گره- کلیدهای یک راست درزیردرخت موجود کلیدهایگره آن کلید مساوی یا تر بزرگ گره مفروض، آن کلید مساوی یا تر بزرگ مفروض،
هستند.هستند.
دودویی ::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(
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; ;
بهینه : :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; ;
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; ;
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[;;
لگوریتم ا برای معمول حالت زمانی پیچیدگی لگوریتم تحلیل ا برای معمول حالت زمانی پیچیدگی تحلیلبهینه دودویی جستجوی بهینه درخت دودویی جستجوی درخت
: اصلی : عمل اصلی از عمل مقدار هر ازای به شده اجرا از دستورات مقدار هر ازای به شده اجرا دستوراتkk . حداقل آزمون برای مقایسه یک شامل دستورات حداقل . این آزمون برای مقایسه یک شامل دستورات این
است.است.
: ورودی :اندازه ورودی .، ، nn اندازه کلید .تعداد کلید تعداد
T)n( = n ) n -1( ) n + 4 ( / 6 T)n( = n ) n -1( ) n + 4 ( / 6 ЄЄ θθ ) n³ ( ) n³ (
جوی ::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
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;;
برای ::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 ++(
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;;
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 [ [;;
ا برای معمول حالت در زمان و فضا پیچیدگی ا تحلیل برای معمول حالت در زمان و فضا پیچیدگی تحلیلمسئله ) 33--1111لگوریتم لگوریتم برای پویا نویسی برنامه مسئله ) الگوریتم برای پویا نویسی برنامه الگوریتم
) گرد دوره (فروشنده گرد دوره فروشنده
: اصلی : عمل اصلی در عمل ، آخر و اول ی حلقه دو هر در در زمان ، آخر و اول ی حلقه دو هر در زمانحلقه زیرا نیست، چشمگیر میانی حلقه در زمان با حلقه مقایسه زیرا نیست، چشمگیر میانی حلقه در زمان با مقایسه
تویی تودر گوناگون سطوح حاوی تویی میانی تودر گوناگون سطوح حاوی دستورات . میانی دستورات . است استمقدار هر برای شده مقدار اجرا هر برای شده توان را را v v jjاجرا توان می در می اصلی در عمل اصلی عمل
. گرفت .نظر گرفت نظر
ورودی : ورودی : اندازه رئوس ، ، nnاندازه رئوس تعداد . تعداد گراف در .موجود گراف در موجود
T )n( = n 2ⁿ T )n( = n 2ⁿ ЄЄ θθ ) n 2ⁿ ( ) n 2ⁿ (
: چهارم :فصل چهارم فصل
طراحی در طراحی روشحریصانه در روشحریصانهالگوریتمالگوریتم
، گرفته را عناصر ترتیب به ، حریصانه ، الگوریتم گرفته را عناصر ترتیب به ، حریصانه الگوریتممعین مالکی طبق که را عنصری آن بار معین هر مالکی طبق که را عنصری آن بار هر “ به” توجه بدون رسد، می نظر به “ بهترین به” توجه بدون رسد، می نظر به بهترین
انجام آینده در یا داده انجام قبال که هایی انجام انتخاب آینده در یا داده انجام قبال که هایی انتخاب. دارد می بر داد، .خواهد دارد می بر داد، خواهد
پویا نویسی برنامه همانند ، حریصانه پویا الگوریتم نویسی برنامه همانند ، حریصانه الگوریتممی کار به سازی بهینه مسائل حل برای می غالبا کار به سازی بهینه مسائل حل برای غالبا
بیشتری صراحت حریصانه روش ولی بیشتری روند، صراحت حریصانه روش ولی روند،دارد.دارد.
کوچک های نمونه به تقسیم ، حریصانه روش کوچک در های نمونه به تقسیم ، حریصانه روش در. پذیرد نمی صورت .تر پذیرد نمی صورت تر
که انتخاب، سری یک انجام با حریصانه که الگوریتم انتخاب، سری یک انجام با حریصانه الگوریتممی نظر به ،بهترین خاص ای لحظه در یک می هر نظر به ،بهترین خاص ای لحظه در یک هرخود جای در انتخاب یعنی کند، می عمل خود رسد جای در انتخاب یعنی کند، می عمل رسد
. بهینه حل یک که است این امید است . بهینه بهینه حل یک که است این امید است بهینهچنین همواره ولی شود، یافت چنین سرتاسری همواره ولی شود، یافت سرتاسری
نیست.نیست.
آیا که کرد تعیین باید مفروض الگوریتم یک آیا برای که کرد تعیین باید مفروض الگوریتم یک برای. خیر یا است بهینه همواره .حل خیر یا است بهینه همواره حل
تهی مجموعه یک با را کار ، حریصانه تهی الگوریتم مجموعه یک با را کار ، حریصانه الگوریتماضافه مجموعه به عناصری ترتیب به کرده اضافه آغاز مجموعه به عناصری ترتیب به کرده آغاز
از ای نمونه برای حلی مجموعه این تا کند از می ای نمونه برای حلی مجموعه این تا کند می. دهد نشان را مسئله .یک دهد نشان را مسئله یک
: است زیر های مولفه شامل ، تکرار دور :هر است زیر های مولفه شامل ، تکرار دور هر
انتخاب - - 11 انتخاب روال به روال باید که را عنصربعدی به ، باید که را عنصربعدی ، . انتخاب کند می شود،انتخاب اضافه . مجموعه انتخاب کند می شود،انتخاب اضافه مجموعه
. است حریصانه مالک یک .طبق است حریصانه مالک یک طبق
سنجی - - 22 امکان سنجی بررسی امکان که بررسی کند می تعیین که ، کند می تعیین ،حل،عملی به رسیدن برای جدید مجموعه حل،عملی آیا به رسیدن برای جدید مجموعه آیا
. خیر یا . است خیر یا است
حل - - 33 راه حل بررسی راه آیا بررسی که کند می تعیین آیا ، که کند می تعیین ،یا کند می ارائه را نمونه حل ، جدید یا مجموعه کند می ارائه را نمونه حل ، جدید مجموعه
خیر.خیر.
کمینه 1-41-4 شای پو های کمینه درخت شای پو های درخت
شهر چند خواهد می شهری طراح کنید شهر فرض چند خواهد می شهری طراح کنید فرضکه قسمی به کند، وصل هم به جاده با را که معین قسمی به کند، وصل هم به جاده با را معین
. بروند دیگر شهر به شهر هر از بتوانند . مردم بروند دیگر شهر به شهر هر از بتوانند مردمممکن ، باشد کار در ای بودجه محدودیت ممکن اگر ، باشد کار در ای بودجه محدودیت اگر
مقدار حداقل با را کار این بخواهد طراح مقدار است حداقل با را کار این بخواهد طراح است. دهد انجام کشی .جاده دهد انجام کشی جاده
: متفاوت حریصانه الگوریتم دو مسئله این متفاوت : برای حریصانه الگوریتم دو مسئله این برای. شود می بررسی کروسکال و .پریم شود می بررسی کروسکال و پریم
بهینه ویژگی یک از ها الگوریتم این از یک بهینه هر ویژگی یک از ها الگوریتم این از یک هر. کند می استفاده .محلی کند می استفاده محلی
حریصانه الگوریتم یک که ندارد وجود حریصانه تضمینی الگوریتم یک که ندارد وجود تضمینیکه شود می ثابت بدهد، بهینه حل که همواره شود می ثابت بدهد، بهینه حل همواره
درخت همواره پریم و کروسکال های درخت الگوریتم همواره پریم و کروسکال های الگوریتم. کنند می ایجاد را کمینه پوشای .های کنند می ایجاد را کمینه پوشای های
پریم 1-1-41-1-4 پریم الگوریتم الگوریتم
یال از تهی ای مجموعه زیر با پریم یال الگوریتم از تهی ای مجموعه زیر با پریم الگوریتمرئوس FFهای های از ای زیرمجموعه رئوس و از ای زیرمجموعه می YYو می آغاز آغاز
. است دلخواه راس یک حاوی زیرمجموعه . شود، است دلخواه راس یک حاوی زیرمجموعه شود،مقداراولیه، عنوان مقداراولیه، به عنوان v1v1به
به به را به . YYرا س را ترین نزدیک دهیم به . می س را ترین نزدیک دهیم ، ، YYمیدر در راسی وزن V – YV – Yراسی با یالی توسط که وزن است با یالی توسط که است
در راسی به در کمینه راسی به متصل متصل YYکمینهاست.است.
پریم ::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[;;
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 (
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 ++(
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; ;
لگوریتم ا برای معمول حالت در زمانی پیچیدگی لگوریتم تحلیل ا برای معمول حالت در زمانی پیچیدگی تحلیل11--44) پریم) (الگوریتم پریم) الگوریتم
: اصلی : عمل اصلی حلقه عمل حلقه در حلقه repeatrepeatدر حلقه دو یک ) دو هر که دارد یک )وجود هر که دارد n – 1n – 1وجود))
اجرای . شود می تکرار اجرای . بار شود می تکرار می بار را ها آن از یک هر داخل می دستورات را ها آن از یک هر داخل دستوراتتوانتوان
. گرفت نظر در اصل عمل اجرای بار یک عنوان .به گرفت نظر در اصل عمل اجرای بار یک عنوان به
: ورودی : اندازه ورودی . nnاندازه رئوس تعداد ،. رئوس تعداد ،
T )n( = 2 ) n – 1( ) n – 1( T )n( = 2 ) n – 1( ) n – 1( ЄЄ θθ ) n²( ) n²(
44--11قضیه قضیه
پوشای درخت یک همواره پریم پوشای الگوریتم درخت یک همواره پریم الگوریتم. کند می تولید .کمینه کند می تولید کمینه
مجموعه اثبات : اثبات : دهیم نشان که ن آ مجموعه برای دهیم نشان که ن آ از FFبرای از پس پستکرارحلقه بار تکرارحلقه هر بار است repeatrepeatهر بخش امید است ، بخش امید ،
. کنیم می استفاده .ازاستقرا کنیم می استفاده ازاستقرا
استقرا : استقرا :مبنای مجموعه مبنای که است مجموعه واضح که است امید امید ØØواضح. است .بخش است بخش
کروسکال ::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
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(; ;
ifif )! equal ) p, q (( )! equal ) p, q ((
merge ) p , q (merge ) p , q (; ;
add e to Fadd e to F; ;
لگوریتم ا برای حالت بدترین در زمانی پیچیدگی لگوریتم تحلیل ا برای حالت بدترین در زمانی پیچیدگی تحلیل22--44) کروسکال) (الگوریتم کروسکال) الگوریتم
: اصلی : عمل اصلی .عمل مقایسه دستور .یک مقایسه دستور یک
ورودی : ورودی : اندازه و nnاندازه رئوس تعداد و ، رئوس تعداد ،mm . ها یال .تعداد ها یال تعداد
: داشت نظر در باید را نکته سه الگوریتم این :درباره داشت نظر در باید را نکته سه الگوریتم این درباره
ها- 11 یال سازی مرتب برای الزم ها- زمان یال سازی مرتب برای الزم . .زمان
W )m( W )m( ЄЄ θθ ) m lg m( ) m lg m(
حلقه- 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 ( ЄЄ θθ
44--22قضیه قضیه
پوشای درخت یک همواره کروسکال پوشای الگوریتم درخت یک همواره کروسکال الگوریتم. کند می تولید .کمینه کند می تولید کمینه
از اثبات : اثبات : شروع با استقرا طریق از از اثبات شروع با استقرا طریق از اثبات. شود می آغاز ها یال از تهی ای .مجموعه شود می آغاز ها یال از تهی ای مجموعه
کوتاهترین 2-42-4 برای دیکسترا کوتاهترین الگوریتم برای دیکسترا الگوریتممبدا تک مبدا مسیر تک مسیر
همه به راس هر از مسیر کوتاهترین همه برای به راس هر از مسیر کوتاهترین برایجهت بدون و موزون گراف یک در دیگر جهت رئوس بدون و موزون گراف یک در دیگر رئوس
) الگوریتم (یک الگوریتم که θθ(n²(n²یک داریم، حریصانه روش که از داریم، حریصانه روش از. دارد نام دیکسترا .آن دارد نام دیکسترا آن
از که دهیم می ارائه فرض این با را از الگوریتم که دهیم می ارائه فرض این با را الگوریتمدیگر، رئوس از یک هر به نظر مورد دیگر، راس رئوس از یک هر به نظر مورد راس
. دارد وجود .مسیری دارد وجود مسیری
مسئله برای پریم الگوریتم مشابه الگوریتم مسئله این برای پریم الگوریتم مشابه الگوریتم این. است کمینه پوشای .درخت است کمینه پوشای درخت
دیکسترا ::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[;;
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[; ;
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[;;
touch ]i[ = vneartouch ]i[ = vnear; ;
length ]vnear[ = -1length ]vnear[ = -1;;
44--33قضیه قضیه
را درسیستم کل زمان که بندی زمان را تنها درسیستم کل زمان که بندی زمان تنهاکه است بندی زمان کند، می سازی که کمینه است بندی زمان کند، می سازی کمینهارائه افزایشزمان حسب بر کارها آن ارائه در افزایشزمان حسب بر کارها آن در
. شوند می مرتب .خدمات شوند می مرتب خدمات
معین : :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; ;
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;;
لگوریتم ا برای حالت بدترین در زمانی پیچیدگی لگوریتم تحلیل ا برای حالت بدترین در زمانی پیچیدگی تحلیلمعین مهلت با بندی معین زمان مهلت با بندی زمان
: اصلی : عمل اصلی هایی عمل مقایسه کارها، سازی مرتب برای هایی باید مقایسه کارها، سازی مرتب برای بایدکه هنگامی و پذیرد که انجام هنگامی و پذیرد کار ) JJبا با KK انجام شدن افزوده از کار ) پس شدن افزوده از پس
ii ) بیشتری های مقایسه شود،به می داده قرار مساوی بیشتری ( ام های مقایسه شود،به می داده قرار مساوی امبودن پذیر امکان که هنگامی و داریم بودن نیاز پذیر امکان که هنگامی و داریم شود، KKنیاز می شود، چک می چک
. مقایسه اصلی عمل است نیاز بیشتری های یسه مقا . به مقایسه اصلی عمل است نیاز بیشتری های یسه مقا بهاست.است.
ورودی : ورودی : اندازه .nnاندازه کارها تعداد ،. کارها تعداد ،
W )n( W )n( ЄЄ θθ )n²( )n²(
44--44قضیه قضیه
معین ) ( 44--44الگوریتم الگوریتم مهلت با بندی معین ) ( زمان مهلت با بندی زمان. کند می تولید بهینه مجموعه یک .همواره کند می تولید بهینه مجموعه یک همواره
کارها، اثبات:اثبات: تعداد روی استقرا کارها، ازطریق تعداد روی استقرا می nnازطریق می ،صورت ،صورتپذیرد.پذیرد.
: استقرا :مبنای استقرا بر مبنای قضیه ، باشیم داشته کار یک بر اگر قضیه ، باشیم داشته کار یک اگرقراراست.قراراست.
44--55قضیه قضیه
بهینه دودویی کد یک هافمن بهینه الگوریتم دودویی کد یک هافمن الگوریتم. کند می .تولید کند می تولید
. اثبات :اثبات : این با گیرد می صورت استقرا . ازطریق این با گیرد می صورت استقرا ازطریقدرمرحله آمده دست به های درخت که درمرحله فرض آمده دست به های درخت که ، ، iiفرض
بهینه کد با متناظر دودویی درخت در هایی بهینه انشعاب کد با متناظر دودویی درخت در هایی انشعابدر آمده بدست های درخت که دهیم می نشان در اند، آمده بدست های درخت که دهیم می نشان اند،
دودویی i + 1i + 1) ) مرحله )مرحله ) درخت در هایی انشعاب دودویی نیز درخت در هایی انشعاب نیز. اند بهینه کد یک با .متناظر اند بهینه کد یک با متناظر
: پنجم :فصل پنجم فصل
عقبگرد عقبگرد راهبرد راهبرد
استفاده مسائلی حل برای عقبگرد تکنیک استفاده از مسائلی حل برای عقبگرد تکنیک ازیک از اشیاء از ای دنباله ها آن در که شود یک می از اشیاء از ای دنباله ها آن در که شود میطوری به شود، می انتخاب مشخص طوری مجموعه به شود، می انتخاب مشخص مجموعه
. گیرد می بر در را کی مال ، دنباله این .که گیرد می بر در را کی مال ، دنباله این که
مسئله عقبگرد، از کالسیک مثال مسئله یک عقبگرد، از کالسیک مثال وزیر وزیر nnیکاست.است.
مسئله از مسئله هدف از چیدن nnهدف ، چیدن وزیر ، در nnوزیر وزیر در مهره وزیر مهرهدو هیچ که طوری به ، است شطرنج صفحه دو یک هیچ که طوری به ، است شطرنج صفحه یک . مهره دو هیچ یعنی ندهند گارد را یکدیگر . وزیری مهره دو هیچ یعنی ندهند گارد را یکدیگر وزیری
یکسان قطر یا ستون سطر، یک در نباید یکسان ای قطر یا ستون سطر، یک در نباید ایباشند.باشند.
جوی و جست ی شده اصالح حالت جوی عقبگرد و جست ی شده اصالح حالت عقبگرد. است درخت یک .عمقی است درخت یک عمقی
عمقی جوی و جست همانند عقبگرد عمقی الگوریتم جوی و جست همانند عقبگرد الگوریتمفقط گره یک فرزندان که تفاوت این با فقط است، گره یک فرزندان که تفاوت این با است،بخش امید گره که شوند می مالقات بخش هنگامی امید گره که شوند می مالقات هنگامی
. باشد نداشته وجود حلی گره آن در .باشدو باشد نداشته وجود حلی گره آن در باشدو
مسئله ::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++ (
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; ;
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;;
برای 5-35-3 کارلو مونت الگوریتم از برای استفاده کارلو مونت الگوریتم از استفادهیک کارایی کردن یک برآورد کارایی کردن برآورد
عقبگرد عقبگرد الگوریتم الگوریتم
احتمالی ، کارلو مونت های احتمالی الگوریتم ، کارلو مونت های الگوریتمطور به گاه بعدی اجرایی دستور طور هستند،یعنی به گاه بعدی اجرایی دستور هستند،یعنی
. شوند می تعیین .تصادفی شوند می تعیین تصادفی. دهد نمی رخ چیزی چنین قطعی الگوریتم .در دهد نمی رخ چیزی چنین قطعی الگوریتم در ،شدند بحث کنون تا که هایی الگوریتم ی شدند، همه بحث کنون تا که هایی الگوریتم ی همه
. هستند .قطعی هستند قطعی
یک انتظار مورد مقدار کارلو مونت یک الگوریتم انتظار مورد مقدار کارلو مونت الگوریتمساده فضای یک روی که را تصادفی ساده متغیر فضای یک روی که را تصادفی متغیر
آن میانگین مقدار از استفاده با ، ود می آن تعریف میانگین مقدار از استفاده با ، ود می تعریفمی آورد بر ساده فضای از تصادفی نمونه می روی آورد بر ساده فضای از تصادفی نمونه روی
کند.کند.
مقدار به برآورد این که ندارد وجود مقدار تضمینی به برآورد این که ندارد وجود تضمینیانتظار انتظار مورد مورد
آن، شدن نزدیک احتمال ولی باشد، نزدیک آن، واقعی شدن نزدیک احتمال ولی باشد، نزدیک واقعیالگوریتم، برای دسترس در زمان افزایش الگوریتم، با برای دسترس در زمان افزایش با
. یابد می .افزایش یابد می افزایش
کارلو : : 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;;
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;;
الگوریتم ::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;;
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((
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;;
مسئله ::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
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;) ;)
گراف 5-55-5 آمیزی گراف رنگ آمیزی رنگ
آمیزی رنگ آمیزی مسئله رنگ ی mmمسئله همه یافتن از عبارت ی ، همه یافتن از عبارت ،گراف یک آمیزی رنگ برای ممکن ی ها گراف راه یک آمیزی رنگ برای ممکن ی ها راه
حداکثر از استفاده با ، جهت حداکثر بدون از استفاده با ، جهت رنگ رنگ mmبدونراس دو هیچ که طوری به است، راس متفاوت دو هیچ که طوری به است، متفاوت
. نباشند رنگ هم .مجاوری نباشند رنگ هم مجاوری
رنگ ::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 ++(
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;;
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; ;
مسئله ::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 ++(
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 ; ;
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;;
یک 5-75-7 و صفر پشتی کوله یک مسئله و صفر پشتی کوله مسئله
که داریم قطعات از ای عه مجمو مسئله این که در داریم قطعات از ای عه مجمو مسئله این در. است معین ارزش و وزن دارای یک .هر است معین ارزش و وزن دارای یک هر
. هستند مثبتی اعداد ها ارزش و .اوزان هستند مثبتی اعداد ها ارزش و اوزان
درون دزدد می که قطعاتی دارد درنظر درون دزدی دزدد می که قطعاتی دارد درنظر دزدیکل وزن اگر و دهد قرار پشتی کوله کل یک وزن اگر و دهد قرار پشتی کوله یک
از پشتی کوله آن در شده داده قرار از قطعات پشتی کوله آن در شده داده قرار قطعاتمثبت صحیح عدد مثبت یک صحیح عدد رود، WWیک رود، فراتر فراتر
شود می پاره پشتی شود کوله می پاره پشتی ..کوله
کوله ::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((
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; ;
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[;;
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; ;
پویا 2-5-72-5-7 نویسی برنامه الگوریتم پویا مقایسه نویسی برنامه الگوریتم مقایسهکوله مسئله برای عقبگرد الگوریتم کوله و مسئله برای عقبگرد الگوریتم و
یک و صفر یک پشتی و صفر پشتی
برنامه الگوریتم توسط که عناصری برنامه تعداد الگوریتم توسط که عناصری تعدادیک و صفر پشتی کوله مسئله برای پویا یک نویسی و صفر پشتی کوله مسئله برای پویا نویسی
به حالت دربدترین شود می به محاسبه حالت دربدترین شود می O Oمحاسبه(minimum (2ⁿ , nW))(minimum (2ⁿ , nW)). دارد .تعلق دارد تعلق
( عقبگرد الگوریتم ، حالت بدترین عقبگرد )در الگوریتم ، حالت بدترین گره گره ⁿn 22))θθدر. کند می چک .را کند می چک را
نسبت بیشتری کارایی معموال عقبگرد نسبت الگوریتم بیشتری کارایی معموال عقبگرد الگوریتم. دارد پویا نویسی برنامه الگوریتم .به دارد پویا نویسی برنامه الگوریتم به
با را حل و تقسیم روش ، شانی و با هوروویتز را حل و تقسیم روش ، شانی و هوروویتزکرده ترکیب پویا نویسی برنامه کرده روش ترکیب پویا نویسی برنامه روش
یک و صفر پشتی کوله مسئله برای یک الگوریتمی و صفر پشتی کوله مسئله برای الگوریتمیبه حالت دربدترین که اند داده به بسط حالت دربدترین که اند داده O(2^n/2)O(2^n/2)بسط
. دارد .تعلق دارد تعلق
: ششم :فصل ششم فصل
حد و شاخه حد راهبرد و شاخه راهبرد
شبا عقبگرد به لحاظ ازآن حد و شاخه شبا راهبرد عقبگرد به لحاظ ازآن حد و شاخه راهبردکه دارد که هت دارد هت
حالت فضای درخت از مسئله حل بریا حالت درآن، فضای درخت از مسئله حل بریا درآن،. شود می .استفاده شود می استفاده
به را ما اوال عقبگرد، با روش این به تفاوت را ما اوال عقبگرد، با روش این تفاوتکندوثانیا نمی محدود ازدرخت خاصی کندوثانیا پیمایش نمی محدود ازدرخت خاصی پیمایش. رود می کار به سازی بهینه مسائل برای .فقط رود می کار به سازی بهینه مسائل برای فقط
را عددی گره هر در ، حد و شاخه را الگوریتم عددی گره هر در ، حد و شاخه الگوریتمآیا) ( که شود تاتعیین کند می رامحاسبه آیا) ( حدی که شود تاتعیین کند می رامحاسبه حدی
. خیر یا هست بخش امید گره .این خیر یا هست بخش امید گره این
تاکنون که حلی بهترین مقدار از بهتر حد آن تاکنون اگر که حلی بهترین مقدار از بهتر حد آن اگر . است بخش امید غیر گره نباشد، ، شده . یافته است بخش امید غیر گره نباشد، ، شده یافته
. است بخش امید ، صورت این غیر .در است بخش امید ، صورت این غیر در
گره حدود توان می حد، از براستفاده گره عالوه حدود توان می حد، از براستفاده عالوهفرزندان و کرد مقایسه را بخش امید فرزندان های و کرد مقایسه را بخش امید های
. ترتیب بدین نمود مالقات را حد بهترین با . گرهی ترتیب بدین نمود مالقات را حد بهترین با گرهییک در را ها گره که آن از تر سریع توان یک می در را ها گره که آن از تر سریع توان می
حل به کرد، مالحظه شده تعیین پیش از حل ترتیب به کرد، مالحظه شده تعیین پیش از ترتیب . یافت دست . بهینه یافت دست بهینه
هرس با جو و جست بهترین را روش هرس این با جو و جست بهترین را روش این. گویند می حد و شاخه .کردن گویند می حد و شاخه کردن
ی شده اصالح شکل روش، این سازی ی پیاده شده اصالح شکل روش، این سازی پیادهجست به موسوم دیگر روش یک از ای جست ساده به موسوم دیگر روش یک از ای ساده
. است حد و شاخه کردن هرس عرضی جوی .و است حد و شاخه کردن هرس عرضی جوی و
با : : 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(;;
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 ; ;
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(
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(
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;;
هرسکردن ::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(; ;
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 [; ;
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 (;;
گرد 2-62-6 دوره فروشنده گرد مسئله دوره فروشنده مسئله
در مسیر کوتاهترین یافتن مسئله این از در هدف مسیر کوتاهترین یافتن مسئله این از هدفراس یک از شروع با دار جهت گراف راس یک یک از شروع با دار جهت گراف یک
راس هر که آن بر مشروط ، است راس مفروض هر که آن بر مشروط ، است مفروض . یک را مسیری چنین شود مالقات ر با یک . فقط یک را مسیری چنین شود مالقات ر با یک فقط
. گویند می .تور گویند می تور
هرس ::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 (; ;
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;;
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(;;
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 (;;
بیماری ) (2-32-3 تشخیص ای فرضیه بیماری ) (استنباط تشخیص ای فرضیه استنباط
سیستم و مصنوعی رهوش د مهم مسئله سیستم یک و مصنوعی رهوش د مهم مسئله یکبرای توضیح ترین محتمل تعیین خبره، برای های توضیح ترین محتمل تعیین خبره، های
. است ها فته یا .برخی است ها فته یا برخی
محتمل خواهیم می پزشکی در مثال، ی محتمل برا خواهیم می پزشکی در مثال، ی براسری یک از که را ها بیماری از مجموعه سری ترین یک از که را ها بیماری از مجموعه ترین
. کنیم تعیین ، است گیری نتیجه قابل .عالئم کنیم تعیین ، است گیری نتیجه قابل عالئم
یک برای توضیح ترین محتمل تعیین یک فرایند برای توضیح ترین محتمل تعیین فرایندرا ها یافته را مجموعه ها یافته طریق مجموعه از طریق استنباط از استنباط
.فرضیهفرضیه میم نا .می میم نا می
باور باور شبکه دادن شبکه نشان برای دادن استانداردی نشان برای استانداردیو بیماری میان روابط نظیر ، احتمالی و روابط بیماری میان روابط نظیر ، احتمالی روابط
. رود می شمار به ها نه .نشا رود می شمار به ها نه نشا
با : :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; ;
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 ; ;
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 (
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(;;
: هفتم :فصل هفتم فصل
: محاسباتی پیچیدگی بر ای :مقدمه محاسباتی پیچیدگی بر ای مقدمه
سازی مرتب سازی مسئله مرتب مسئله
محاسباتی 77- - 11 محاسباتی پیچیدگی پیچیدگی
تمام مطالعه از عبارت محاسباتی تمام پیچیدگی مطالعه از عبارت محاسباتی پیچیدگیمسئله یک حل برای پذیر امکن مسئله الگوهای یک حل برای پذیر امکن الگوهای
. است .مفروض است مفروض
کنیم می کوشش محاسباتی پیچیدگی تحلیل کنیم در می کوشش محاسباتی پیچیدگی تحلیل دربرای را ها الگوریتم ی همه کارایی پایینی حد برای تا را ها الگوریتم ی همه کارایی پایینی حد تا
. آوریم دست به مفروض مسئله .یک آوریم دست به مفروض مسئله یک
محاسباتی تحلیل تحلیل محاسباتی پیچیدگی مسئله پیچیدگی مطالعه با مسئله را مطالعه با راسازی سازی مرتب مرتب
. کنیم می .معرفی کنیم می معرفی: دارد دلیل دو انتخاب :این دارد دلیل دو انتخاب این
حل- 11 را مسئله که که اند شده ابداع الگوریتم حل- چند را مسئله که که اند شده ابداع الگوریتم چند. کنند .می کنند می
است- 22 مسائلی معدود از یکی سازی مرتب است- مسئله مسائلی معدود از یکی سازی مرتب مسئلهزمانی پیچیدگی با هایی الگوریتم بسط در زمانی که پیچیدگی با هایی الگوریتم بسط در که . ایم بوده موفق آن برای پایینی حد به . نزدیک ایم بوده موفق آن برای پایینی حد به نزدیک
سازی 2-72-7 مرتب و درجی سازی سازی مرتب مرتب و درجی سازی مرتبانتخابیانتخابی
که اس الگوریتمی درجی سازی مرتب که الگوریتم اس الگوریتمی درجی سازی مرتب الگوریتمآرایه یک در رکوردها درج با را سازی آرایه مرتب یک در رکوردها درج با را سازی مرتب. کند می سازی مرتب موجود ی شده .مرتب کند می سازی مرتب موجود ی شده مرتب
درجی ::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;;
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; ;
درا ها کلید های مقایسه تعداد زمانی پیچیدگی درا تحلیل ها کلید های مقایسه تعداد زمانی پیچیدگی تحلیلدرجی سازی مرتب درجی لگوریتم سازی مرتب لگوریتم
حالت بدترین حالت در بدترین در
اصلی : اصلی :عمل .. xxبا با ]S ] j[S ] jمقایسه مقایسه عمل
ورودی : ورودی :اندازه مرتب nn اندازه باید که هایی کلید تعداد مرتب ، باید که هایی کلید تعداد ،شوند.شوند.
W )n( = n) n - 1( / 2W )n( = n) n - 1( / 2
درا ها کلید های مقایسه تعداد زمانی پیچیدگی درا تحلیل ها کلید های مقایسه تعداد زمانی پیچیدگی تحلیلدرجی سازی مرتب درجی لگوریتم سازی مرتب لگوریتم
میانگین حالت میانگین در حالت در
اصلی : اصلی :عمل .. xxبا با ]S ] j[S ] jمقایسه مقایسه عمل
ورودی : ورودی :اندازه مرتب nn اندازه باید که هایی کلید تعداد مرتب ، باید که هایی کلید تعداد ،شوند.شوند.
A )n( = n² / 4A )n( = n² / 4
الگوریتم برای اضافی فضای از استفاده الگوریتم تحلیل برای اضافی فضای از استفاده ) ) 77--11تحلیل) درجی سازی (مرتب درجی سازی مرتب
با که فضایی با تنها که فضایی ی nnتنها اندازه یابد، می ی افزایش اندازه یابد، می افزایشورودی ورودی آرایه . SSآرایه یک الگوریتم ،این پس . است یک الگوریتم ،این پس است
به اضافی فضای و است درجا سازی به مرتب اضافی فضای و است درجا سازی ((11))مرتبθθ. دارد .تعلق دارد تعلق
درجی : 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
انتخابانتخابیی
انتخابی ::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 [; ;
77--11قضیه قضیه
که الگوریتمی که هر الگوریتمی از nnهر فقط را متمایز از کلید فقط را متمایز کلیدهر از پس و دهد انجام ها کلید مقایسه هر طریق از پس و دهد انجام ها کلید مقایسه طریق
حذف را وارونگی یک اکثر حد ، مقایسه حذف بار را وارونگی یک اکثر حد ، مقایسه بارحداقل حالت بدترین در باید حداقل کنید، حالت بدترین در باید کنید،
n( n- 1) /4n( n- 1) /4 . دهد انجام ها کلید روی .مقایسه دهد انجام ها کلید روی مقایسه
تعویضی سازی مرتب تعویضی الگوریتم سازی مرتب الگوریتم
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[;;
ادغامی 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 (
در ها رکورد های مقایسه تعداد زمانی در پیچیدگی ها رکورد های مقایسه تعداد زمانی پیچیدگیبه تقریبا معمول حالت در ادغامی سازی به مرتب تقریبا معمول حالت در ادغامی سازی مرتب
: است زیر :صورت است زیر صورت
T ) n( = 2n lg nT ) n( = 2n lg n
ادغامی سازی مرتب به بخشیدن ادغامی بهبود سازی مرتب به بخشیدن بهبود
شیوه سه به را ادغامی سازی مرتب توانیم شیوه می سه به را ادغامی سازی مرتب توانیم می: ببخشیم :بهبود ببخشیم بهبود
روش- 11 به ادغامی سازی ازمرتب ای روش- نسخه به ادغامی سازی ازمرتب ای نسخهپویا نویسی پویا برنامه نویسی برنامه
پیوندی- 22 پیوندی- نسخه نسخه
تر- 33 پیچیده ادغامی تر- الگوریتم پیچیده ادغامی الگوریتم
ادغامی: 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 ) )
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; ;
ادغامی : :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
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; ;
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;;
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;;
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; ;
الگوریتم برای اضافی فضای از استفاده الگوریتم تحلیل برای اضافی فضای از استفاده --44تحلیلادغامی) 77 سازی ادغامی) مرتب سازی ((44مرتب
به اضافی فضای از استفاده حالت هر به در اضافی فضای از استفاده حالت هر θθ ((nn))در. دارد تعلق .پیوند دارد تعلق پیوند
از از منظور ها θθ ((nn))منظور پیوند تعداد که است ها پیونداین پیوند تعداد که است پیونداین θθ ((nn))به به
. دارد .تعلق دارد تعلق
سریع 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 (;;
مرتب الگوریتم به بخشیدن بهبود مرتب روشهای الگوریتم به بخشیدن بهبود روشهایسریع سریع سازی سازی
سازی مرتب در اضافی فضای از سازی استفاده مرتب در اضافی فضای از استفاده: داد کاهش شیوه پنج به توان می را :سریع داد کاهش شیوه پنج به توان می را سریع
روال- 11 روال- در زیر quicksortquicksort در کدام کنیم می تعیین زیر ، کدام کنیم می تعیین ،پشته در را آن همواره و تراست کوچک پشته آرایه در را آن همواره و تراست کوچک آرایه
. داریم می نگه را دیگری و دهیم می . قرار داریم می نگه را دیگری و دهیم می قرار
بد در اضافی فضای از استفاده نسخه این بد در در اضافی فضای از استفاده نسخه این دربه حالت به ترین حالت .θθ ((lg nlg n ) )ترین دارد تعلق .اندیس دارد تعلق اندیس
از- 22 ای از- نسخه ای تعداد partitionpartitionنسخه که دارد تعداد وجود که دارد وجودچشمگیر طرزی به را ها رکورد های چشمگیر انتساب طرزی به را ها رکورد های انتساب
. دهد می .کاهش دهد می کاهش
تعداد زمانی پیچیدگی نسخه، این تعداد برای زمانی پیچیدگی نسخه، این برایسازی مرتب توسط شده انجام های سازی انتساب مرتب توسط شده انجام های انتساب
: از است عبارت میانگین حالت در :سریع از است عبارت میانگین حالت در سریع
A (n) = 0.69 ( n + 1 ) lg nA (n) = 0.69 ( n + 1 ) lg n
اعمال- 33 از زیادی اعمال- مقدار از زیادی مورد pushpushو و poppopمقدار مورد بی بیاست. است.
نوشتن با توانیم نوشتن می با توانیم و quicksortquicksortمی تکرار شیوه و به تکرار شیوه به
پرهیز بیهوده ازعملیات روال، در پشته پرهیز دستکاری بیهوده ازعملیات روال، در پشته دستکاریکنیم،کنیم،
پشته ، بازگشتی و پشته از استفاده جای به پشته یعنی ، بازگشتی و پشته از استفاده جای به یعنیرارا
. سازیم می .خودمان سازیم می خودمان
سازی- 44 مرتب مثل بازگشتی های سازی- الگوریتم مرتب مثل بازگشتی های الگوریتمکه آستانه مقدار یک تعیین با توان می را که سریع آستانه مقدار یک تعیین با توان می را سریع
، نمونه بیشتر تقسیم جای به الگوریتم آن ، در نمونه بیشتر تقسیم جای به الگوریتم آن در ، کند می فراخوانی را تکراری الگوریتم ، یک کند می فراخوانی را تکراری الگوریتم یک
. بخشید .بهبود بخشید بهبود
میانه- 55 میانه- انتخاب ، ، S [low]S [low]انتخاب S [ S [ ĮĮ low + high )/2 low + high )/2⌡⌡ ، ،
S [high]S [high]. است محوری ی نقطه .برای است محوری ی نقطه برای
سازی 6-76-7 سازی مرتب heapheapمرتب
است دودویی درخت یک کامل دودویی است درخت دودویی درخت یک کامل دودویی درخت: باشد زیر شرایط واجد :که باشد زیر شرایط واجد که
. باشند داشته فرزند دو داخلی های گره ی .همه باشند داشته فرزند دو داخلی های گره ی همه عمق رای دا ها برگ ی عمق همه رای دا ها برگ ی .ddهمه .باشند باشند
دودویی درخت یک کامل اساسا دودویی دودویی درخت درخت یک کامل اساسا دودویی درخت: که :است که است
عمق عمق تا .((n – 1n – 1 ) )تا باشد کامل دودویی درخت .یک باشد کامل دودویی درخت یک عمق با هایی عمق گره با هایی طرف dd گره در امکان حد طرف تا در امکان حد تا
. شوند واقع .چپ شوند واقع چپ
heapheap به است کامل اساس دودویی درخت به یک است کامل اساس دودویی درخت یک: که :طوری که طوری
یک از آن های گره در شده نگهداری یک مقادیر از آن های گره در شده نگهداری مقادیر. باشند مرتب .مجموعه باشند مرتب مجموعه
یا تر بزرگ گره درهر شده نگهداری یا مقادیر تر بزرگ گره درهر شده نگهداری مقادیرآن فرزندان در شده نگهداری مقادیر آن مساوی فرزندان در شده نگهداری مقادیر مساوی
باشد.باشد.
سازی 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 (
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; ;
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;;
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) ] [) ] [
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; ;
forfor ) i = Į n/2⌡; i >= 1 ; i --( ) i = Į n/2⌡; i >= 1 ; i --(
siftdown )H,i(siftdown )H,i(;;
سازی ::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 (;;
سریع 7-77-7 سازی مرتب ادغامی، سازی مرتب سریع مقایسه سازی مرتب ادغامی، سازی مرتب مقایسهسازی سازی ومرتب heapheapومرتب
سازی مرتب بر معموال سریع سازی سازی مرتب مرتب بر معموال سریع سازی مرتبheapheap. دارد .ارجحیت دارد ارجحیت
سازی مرتب بر معموال سریع سازی سازی مرتب مرتب بر معموال سریع سازی مرتب. شود می داده ترجیح .ادغامی شود می داده ترجیح ادغامی
گیری 1-8-11-8-1 تصمیم ی ها گیری درخت تصمیم ی ها الگوهای درخت الگوهای برای برایسازی سازی مرتب مرتب
برای : : 77--11لم لم قطعی الگوریتم هر با برای متناظر قطعی الگوریتم هر با متناظرسازی سازی مرتب تصمیم nnمرتب درخت یک متمایز، تصمیم کلید درخت یک متمایز، کلید
و معتبر ، دودویی و گیری معتبر ، دودویی دقیقا گیری با شده دقیقا هرس با شده !!nnهرس. دارد وجود .برگ دارد وجود برگ
توسط ::77--22لم لم شده انجام های مقایسه توسط تعداد شده انجام های مقایسه تعدادبرابر حالت بدترین در گیری تصمیم درخت برابر یک حالت بدترین در گیری تصمیم درخت یک
. است درخت عمق .با است درخت عمق با
اگراگر: : 77--33لم لمmm درخت یک در ها برگ درخت تعداد یک در ها برگ تعدادو و دودویی dd دودویی
: داریم باشد، آن :عمق داریم باشد، آن عمق
d ≥ lg md ≥ lg m
77--22قضیه قضیه
که قطعی الگوریتم که هر قطعی الگوریتم متمایزرا nn هر متمایزرا کلید کلیدسازی مرتب ها کلید مقایسه با سازی فقط مرتب ها کلید مقایسه با فقطاقل حد حالت بدترین در باید کند، اقل می حد حالت بدترین در باید کند، می
lg ) n!(lg ) n!( . دهد راانجام ها کلید .مقایسه دهد راانجام ها کلید مقایسه
صحیح ::77--44لم لم و مثبت عدد هر ازای صحیح به و مثبت عدد هر ازای ، ، nnبهداریم:داریم:
lg )n!( ≥ n lg n – 1.45 nlg )n!( ≥ n lg n – 1.45 n
77--33قضیه قضیه
که قطعی الگوریتم که هر قطعی الگوریتم را nnهر متمایز را کلید متمایز کلیدی مقایسه با ی فقط مقایسه با فقط
بدترین در باید دهد می انجام ها بدترین کلید در باید دهد می انجام ها کلیدحداقل حداقل حالت حالت
n lg n – 1.45nn lg n – 1.45n را ها کلید را مقایسه ها کلید مقایسه. دهد .انجام دهد انجام
حالت 3-8-73-8-7 در رفتار برای پایینی حالت حدود در رفتار برای پایینی حدودمیانگینمیانگین
گیری : : 77--55لم لم تصمیم درخت هر با ظر گیری متنا تصمیم درخت هر با ظر متناسازی مرتب برای شده هرس معتبر سازی دودویی مرتب برای شده هرس معتبر nnدودویی
درخت - یک متمایز، درخت -کلید یک متمایز، معتبر 22کلید گیری معتبر تصمیم گیری تصمیماندازه به اقل حد که دارد وجود شده اندازه هرس به اقل حد که دارد وجود شده هرس
. دارد کارایی اول .درخت دارد کارایی اول درخت
که : : 77--66لم لم قطعی الگوریتم که هر قطعی الگوریتم متمایز nnهر متمایز کلید کلیدمی سازی مرتب ها کلید مقایسه با فقط می را سازی مرتب ها کلید مقایسه با فقط را
انجام که های کلید محاسبه تعداد اقل حد انجام کند، که های کلید محاسبه تعداد اقل حد کند،: با است برابر میانگین طور به دهد :می با است برابر میانگین طور به دهد می
mimEPL )n!( / nmimEPL )n!( / n!!
77--77لم لم::- دودویی درخت -هر دودویی درخت دارای 22هر دارای که mmکهو باشد و برگ باشد برگ
EPLEPL برابر برابر آن ی )minEPL)m(minEPL)mآن همه باید ی باشد، همه باید باشد، . باشند سطح ترین پایین در آن های . برگ باشند سطح ترین پایین در آن های برگ
درخت -::77--88لم لم درخت -هر دارای 22هر دارای که و mmکه و برگ EplEplبرگبرابر برابر آن آن
minEPL)m(minEPL)m( باید ، باید باشد ، سطح d – md – m^22 باشد در سطح برگ در برگd – 1d – 1
درسطح 2m – 2 ^d2m – 2 ^dو و درسطح برگ برگ ddبرگ و باد برگ داشته و باد داشتهدیگری دیگری
باشد، باشد، نداشته .ddنداشته است درخت .عمق است درخت عمق
درخت -: : 77--99لم لم هر ازای درخت -به هر ازای و mmکه که 22به و برگ برگEPLEPL برابربا برابربا آن عمق )minEPL)m(minEPL)mآن عمق باشد، ddباشد،
: از است :عبارت از است عبارت
d = lg md = lg m
مقادیر ::77--1010لم لم ی همه ازای مقادیر به ی همه ازای m ≥ 1m ≥ 1بهداریم :داریم :
mimEPL)M( ≥ m Į lg mmimEPL)M( ≥ m Į lg m⌡⌡
77--44قضیه قضیه
که قطعی الگوریتم که هر قطعی الگوریتم با nnهر تنها متمایزرا با کلید تنها متمایزرا کلیدطور به کند، سازی مرتب کلیدها طور مقایسه به کند، سازی مرتب کلیدها مقایسهرا ها مقایسه تعداد این حداقل باید را میانگین ها مقایسه تعداد این حداقل باید میانگین
: دهد :انجام دهد انجام
n lg n – 1.45n⌡n lg n – 1.45n⌡ ĮĮ
مرتب ) 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 ++(
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++(
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)()(
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;;
تشکر تشکر با با
پایانپایان