grsotudeh.irgrsotudeh.ir/pardazesh-movazi/کتابهای پردازش موازی/algorithm...Ý Â a...
TRANSCRIPT
í¤ ùÚÈ÷¢ü¨Àúõ ø üê ùÀØÈ÷¢
öä
ݵþ¤Úó üÂÏ §¤¢ ùøÃ
Þû¤ ¢µ¨
ý¢ Àa¨ ÀÞ Àa¨ µî¢
1384 ùõ ¤£
www.Bshams.ir
www.Bshams.ir
ÝÂaó ßÞÂaó Üaó ÝÆ
°óÎõ ´¨Âúê
õÀÖõ
ü±÷¹õ ýû¢Þ÷ üêÂãõ 1 ÛÊê
1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ü±÷¹õ ýû¢Þ÷ .11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . big-O ¢Þ÷ 1.12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . big −Ω ¢Þ÷ 2.12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . θ ¢Þ÷ 3.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . small− o¢Þ÷ 4.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . small− ω ¢Þ÷ 5.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ýÂð ÝÞþÃîõ Ìì 6.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ìì À ± 7.1
üµÈð¥ ýû ݵþ¤Úó 2 ÛÊê
9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . üµÈð¥ ýû ݵþ¤Úóø ¢ãõ .29 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . üµÈ𥠢ãõ 1.210 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û Èþ¤ ¢¤õ ¤¢ ¶½ 1.1.214 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .üµÈð¥ ýû ݵþ¤Úó 2.226 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Master Theorem) ü¨¨ Ìì 3.235 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û ݵþ¤Úó Ãó÷ 4.237 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ý¥¨ °Âõ ýû ݵþ¤Úó 5.237 . . . . . . . . . . . . . . . . . Selection Sort ü¿µ÷ ý¥¨ °Âõ ݵþ¤Úó 1.5.237 . . . . . . . . . . . . . . . . . . . . . .Bubble Sort ü± ý¥¨ °Âõ ݵþ¤Úó 2.5.2
www.Bshams.ir
www.Bshams.ir
38 . . . . . . . . . . . . . . . . . . . Insertion Sort ü¤¢ ý¥¨ °Âõ ݵþ¤Úó 3.5.239 . . . . . . . . . . . . . . . . . . . . Pigeon hole Sort ý±î ÷ ý¥¨ °Âõ 4.5.241 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Binary Searchüþø¢ø¢ ý¹µÆ 5.5.242 . . . . . . . . . . . . .Binary Insertion Sort ü¤¢ üþø¢ø¢ ý¥¨ °Âõ 6.5.243 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Shell Sort ݵþ¤Úó 7.5.245 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Bucket Sort1 ݵþ¤Úó 8.5.245 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Bucket Sort2 ݵþ¤Úó 9.5.246 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bin Sort ݵþ¤Úó 10.5.247 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Counting Sort ݵþ¤Úó 11.5.247 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Radix sort ݵþ¤Úó 12.5.248 . . . . . . . . . . . . . . . . . . üµÈ𥠢ãõ ( ö¢Âî Û) ö¢Âî Trace ÛÞä 6.250 . . . . . . . . . . . . . . . . . . . . . . . . . Catalan Number öî ¢Àä  ý¤Áð 7.2
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ 3 ÛÊê
55 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û ù¢¢ öÞµ¡¨ ¥ ü¡Â .356 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Sparse array)§¤³¨ þ¤ 1.357 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .üþø¢ø¢ ´¡¤¢ 2.359 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . max heap ´¡¤¢ 3.362 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ( ýÜÞø¢ ²û) Binomial Heap 4.363 . . . . . . . . . . . . . . . . . . . . . . . . . ( ý ÜÞø¢ ´¡¤¢ )Binomial Tree 1.4.363 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Max Binomial Tree 2.4.364 . . . . . . . . . . . . . . . . . . . . . . . The Merge Of Max Binomial Trees 3.4.364 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Binomial Heap 4.4.365 . . . . . . . . . . . . . . . . . . . . . . . . .Min Binomial Heap ýø¤  ÜÞä 5.4.366 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Max Binomial Heap 6.4.367 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .FIBONACCI HEAP 5.367 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Fibonacci Tree 1.5.3
www.Bshams.ir
www.Bshams.ir
68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Max Fibonacci Tree 2.5.368 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fibonacci Heap 3.5.368 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Max Fibonacci Heap 4.5.369 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-3 öµ¡¤¢ 6.372 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-3 ´¡¤¢ ×þ ý¹µÆ 1.6.373 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-3 ´¡¤¢ ×þ Û¡¢ ¤¢ 2.6.377 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 ´¡¤¢ ×þ ¥ éÁ 3.6.383 . . . . . . . . . . . . . . 2-3 ´¡¤¢ ×þ ¥ éÁ ¢ÂØÜÞä Ûܽ ø þù 4.6.384 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Red-Black ù¨ - ÃõÂì ´¡¤¢ 7.384 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ù¨ - ÃõÂì ´¡¤¢ «¡ 1.7.385 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . üþÀµ ýþÌì ø Óþ¤ã 2.7.386 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ö¤ø¢ 3.7.387 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¤¢ 4.7.389 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . éÁ 5.7.394 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Disjoin sets)ùõ ýû äÞ¹õ 8.3
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ 4 ÛÊê
97 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .üÆþ÷ õ÷ ýû ©ø¤ á÷ .498 . . . . . . . . . . . . . . . . . . . . (Greedy Algorithms) ÷Êþ ýû ݵþ¤Úó 1.498 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ßÞêû ý¥¨ ù¢ÂÈê ݵþ¤Úó 1.1.4101 . . . . . . . . . . . . . . . . . . . MST ñÞõ ýª ´¡¤¢ ýû ݵþ¤Úó 2.1.4109 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Knapsack üµÈ óî ݵþ¤Úó 3.1.4110 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DIJKSTRA ݵþ¤Úó 4.1.4112 . . . . . . . . . .(timetable or scheduling) ýÀ öõ¥ ýû ݵþ¤Úó 5.1.4117 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (devide and conquer) Ûø ÝÆÖ 2.4117 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ï¤Ã ¢Àä ® 1.2.4119 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . merge sort ݵþ¤Úó 2.2.4
www.Bshams.ir
www.Bshams.ir
121 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quick Sort ݵþ¤Úó 3.2.4126 . . . . . . . . . . . . . . . . (û ÅþÂõ ® ݵþ¤Úó) ߨµ¨ ݵþ¤Úó 4.2.4128 . . . . . . . . . . . . . . . . . . . . . . Dynamic Programming þ üÆþ÷ õ÷ 3.4128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
(nk
) ±¨½õ 1.3.4130 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û ñ ö¢Âî ¢Â¡ óbÆõ 2.3.4131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,1 üµÈ óî óbÆõ 3.3.4131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Floyd ݵþ¤Úó 4.3.4133 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û ÅþÂõ ýù¹÷¥ ® 5.3.4135 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ú üþø¢ø¢ ý¹µÆ ´¡¤¢ 6.3.4138 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .íµÈõ µª¤Âþ¥ ßþµð¤Ã 7.3.4140 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ü÷ú ÖÆõ ý óbÆõ 8.3.4142 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¢Âð ù¤ø¢ ùÀªøÂê óbÆõ 9.3.4143 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û ý¥ ´Þ÷¤ 4.4144 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .B &T ( Back Tracking ) 5.4144 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Âþ¥ø nóbÆõ 1.5.4146 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ü÷µÜÞû ¤ø¢ ßµêþ óbÆõ 2.5.4147 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m-coloring óbÆõ 3.5.4148 . . . . . . . . . . . . . . . . . . . . . . . . . . . Branch and Bound (B&B) ×Ø 6.4
û éÂð Çþ 5 ÛÊê
149 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Exploring graphs û éÂð Çþ .5149 . . . . . . . . . . . . . . . . . . . . . . . . . . . (Depth First Search) DFS ݵþ¤Úó 1.5152 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .µÈ ý¥¨ ù¢ 1.1.5152 . . . . . . . . . . . . . . . . . . . . . . . . . . (Breath First Search) BFS ݵþ¤Úó 2.5153 . . . . . . . . . . . . . . . . . . . . . . . . Topological Sort ý¦ó ý¥¨ °Âõ 3.5154 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bellman Ford ݵþ¤Úó 4.5155 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DAG ݵþ¤Úó 5.5
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ 6 ÛÊê
157 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .LOOP INVARIANT1.6173 . . . . . . . . . . . . . . . . . . . . . . . . . (Amortized Analysis) üîúµ¨ Ãó÷ 2.6173 . . . . . . . . . . . . . . . . . . . . . . . . . (Aggregate Analysis) üãÞ¹ Ãó÷ 1.2.6176 . . . . . . . . . . . . . . . . . . . . . . . . (Accounting Method) üÆ ©ø¤ 2.2.6178 . . . . . . . . . . . . . . . . . . . . . . . . . .(Potential Method) ÛÆ÷µ ©ø¤ 3.2.6
www.Bshams.ir
www.Bshams.ir
õÀÖõ
üÂÏ §¤¢ ýùøà , ´¨ µ êÂð ¤Â ì Þª ¤ µ¡ ¤¢ ö î Ýû î ýùøÃùÀØÈ÷¢ ³õî ü¨Àúõ µª¤ öþ¹È÷¢ ¥ üãÞ Í¨ î Àª üõ ݵþ¤Úóú× cü ¤ê ¤Ãê ôÂ÷ ͨ 1384 ñ¨ ùõ ¤£ ¤¢ í¤ ùÚÈ÷¢ ü¨Àúõ ø üê
. ´¨ ùÀª µªÁð öÀõ ìä ¤µ¡ ¤¢ ø ´¨ ùÀþ¢Âð ßþøÀøý¤ Ø Þ û ùøÃ ß þ ý ú ¤¢ î ü ÷à þà ä üõ Þ ¥ ¢¤¢ ´ÞÆ ì ß þ¤¢ø üê ùÀØÈ÷¢ 1382 ñ¨ ý¢ø¤ø ³õî ü¨Àúõ µª¤ öþ¹È÷¢ , À÷ù¢Þ÷ø ü÷Ìõ¤ ÞÏê û Ý÷¡ æþ¤¢ ü Þ¥ ¥ «Ê¡ , í¤ ùÚÈ÷¢ ü¨Àúõ
. ݪ µª¢ ¤ ÂØÈ ñÞî ö ÇþÂþø ÂÏ¡ ýÀÞ Âû¥
ý¢ Àa¨ ÀÞü¨Àúõ ø üê ùÀØÈ÷¢
í¤ ùÚÈ÷¢1384 ùõ ¤£
www.Bshams.ir
www.Bshams.ir
1 ÛÊê
ü±÷¹õ ýû¢Þ÷ üêÂãõ
ü±÷¹õ ýû¢Þ÷ .1À þ ø¢ ùÀª µêÂð Ñê þ ø öõ¥ ö üõ ú÷ ͨ î üû¤Ã
. ÝþÞ÷ ÆþÖõ Ýû ¤ ݵþ¤Úó
big-O ¢Þ÷ 1.1:ùÚ÷ Àª f : N −→ R+Âð
O(f(n)) = g:N → R+ |∃c ∈ R+ ,∞∀ n ∈ N g(n) ≤ cf(n)
f(n) =
n3 n<1000
2n2 n≥100
O(n2) = n2, n lg n, f(n), ....
6
-
.............M
f1
f2
f2 ∈ O(f1)
. ´¨ O(f1) ¥ Ýû ¥ ¢ª  À¬ f2 Âð üµ Û±ì Ûت ¤¢
www.Bshams.ir
www.Bshams.ir
ü±÷¹õ ýû¢Þ÷ üêÂãõ .1 ÛÊê 2
6
-
f1 ∈ O(f2)
f2 ∈ O(f1)
f2
f1
î ýà Å, f2 ∈ O(f1) Ýþ¤¢ ¢ª ® °þ® ×þ ¤¢ f1Âð Ûت ¤¢. ´¨¤¢ Ýúõ , ´Æ÷ c °þ® ´¨ Ýúõ
ý öÂî big-O ,üêÂÊõ Ñê ý f ·õ ¢¤¢ ¤ öÂî ôúÔõ öÞû big-O
ßþ ö ý öõ¥ üþ öÂî î ´¨ ÀÔõ üÞµþ¤Úó Å .´¨ Ñê éÂÊõ.Àª
big − Ω ¢Þ÷ 2.1:ùÚ÷ f : N −→ R+Âð
Ω(f(n)) = g : N → R+ |∃d > 0∞∀ n ∈ N f(n) ≤ dg(n)
Âç Ý÷ üõ ¤ °þ® Âþ¥ À÷¤À÷ üøÔ ÂµØî þ ýøÆõ µØî ¹þ ¤¢:Ýû¢
f(n) < dg(n) =⇒ f(n) ≤ dg(n)
f(n) ≤ dg(n) =⇒ f(n) < d′g(n)
: Ýþ¤¢ ß»Þû
f2(n) ∈ Ω(f1(n))⇐⇒ f1(n) ∈ O(f2(n))
θ ¢Þ÷ 3.1: Ýþ¤¢ùÚ÷ f : N −→ R+Âðθ(f(n)) = O(f(n)) ∩ Ω(f(n))
: ñ·õO(n2) = n2, n2 + 4, nlogn, ...Ω(n2) = 2n2,2n2 +
√n, n3 + n2, n4, n2logn, ...
θ(n2) = n2, n2 + n,2n2, ...
: µØ÷üþ ßþ öÂî Àþ âìø ¤¢,¢Þ÷ ù¢Ôµ¨ Ω ¥ Àþ ݵþ¤Úó ýÀ É¿È ýÂ
. Ýþ¤ø ´¨¢ ö ýÂ
www.Bshams.ir
www.Bshams.ir
3 SMALL−O¢Þ÷ .4.1
small − o¢Þ÷ 4.1:ùÚ÷ f : N −→ R+Âð
o(f(n)) = g : N → R+ |∀ c > 0∞∀ n ∈ N g(n) ≤ cf(n)
î ´¨ ö ¤¢ ´Þû úÀ÷¤À÷ üøÔ ÂµØî þ ýøÆõ µØî ¹þ ¤¢.Àî ëÀ¬ c °þ® Âû ý¥
: ñ·õ? n ∈ o(2n)þ 2n ∈ o(n): ´¨ ´¨¤¢ ëê ýû ¤±ä ¥ ×þ ôÀî
2n ∈ o(n)⇐⇒ ∀c > 0∞∀ n ∈ N 2n ≤ cn c=1
⇐⇒ F =⇒ 2n /∈ o(n)
n ∈ o(2n)⇐⇒ ∀c > 0∞∀ n ∈ N n ≤ c2n c= 1
3⇐⇒ F =⇒ n /∈ o(2n)
small − ω ¢Þ÷ 5.1:ùÚ÷ f : N −→ R+Âð
ω(f(n)) = g : N → R+ |∀ c > 0∞∀ n ∈ N g(n) ≥ cf(n)
: Àû¢ öÈ÷ :ñ·õω(f(n))
⋂o(f(n)) = ∅
´¨ ¢õ öM1 ×þ d0 > 0 ýÂ ùÚ÷ g(n) ∈ ω(f(n))⋂
o(f(n)) Âð :Û: î
∀n ≥M1 g(n) ≥ d0f(n) (g(n) ∈ ω(f(n)))
:î ´¨ ¢õ ö M2 ×þ c0 = d02ýÂ ñ
∀n ≥M2 g(n) ≤ c0f(n) (g(n) ∈ o(f(n))) =⇒ g(n) ≤ d02
f(n) =⇒
∀n ≥MaxM1, M2 d02
f(n) ≥ d0f(n) =⇒ d0 ≥ 2d0 =⇒ d0 ≤ 0.¢ª üõ ´ ÝØ ßþ Â, ÝþÀ¨¤ Ëì Å
ýÂð ÝÞþÃîõ Ìì 6.11)f(n) + g(n) ∈ O(MAXf(n), g(n))
2)f(n) + g(n) ∈ Θ(MAXf(n), g(n))
: 1 ±f(n) ≤MAXf(n), g(n) , g(n) ≤MAXf(n), g(n) =⇒f(n)+g(n) ≤ 2MAXf(n), g(n) =⇒ f(n)+g(n) ∈ O(MAXf(n), g(n))
www.Bshams.ir
www.Bshams.ir
ü±÷¹õ ýû¢Þ÷ üêÂãõ .1 ÛÊê 4
: 2 ±MAXf(n), g(n) ≤ f(n) + g(n) =⇒ f(n) + g(n) ∈ Ω(MAXf(n), g(n))f(n) + g(n) ∈ O(MAXf(n), g(n)), f(n) + g(n) ∈ Ω(MAXf(n), g(n))=⇒ f(n) + g(n) ∈ Θ(MAXf(n), g(n))
:ßþÂÞ. log n! ∈ θ(n log n)Àû¢ öÈ÷
:Û: ñø ù¤
(n! = (ne )n√2πn) Ùóµ¨ ñõÂê ¥ ù¢Ôµ¨ ±
n! = (ne )n√2πn =⇒ log n! = log(n
e )n + log√2πn
=⇒ log n! = n log ne + log
√2πn
=⇒ log n! = n log n− log en + log√2πn
=⇒ log n! = n log n + log√2πnen
=⇒ log n! ∈ Θ(n log n)
: ôø¢ ù¤.log n!∈ Ω(n log n) ø log n! ∈ O(nlog n) ÝþÞ÷ ± Àþ ¹þ ¤¢
logn! = logn + log(n−1) + . . . + log1 ≤ logn + logn + . . . + logn︸ ︷︷ ︸n
≤ nlogn
=⇒ logn! ∈ O(nlogn)
log n! = log n + log(n− 1) + . . . + log1 ≥ n2
log n2
=⇒log n! ≥ n
2log n− n
2log2 ≥ 1
4n log n =⇒ logn! ∈ Ω(nlogn)
=⇒ log n! ∈ Θ(n log n)
: ô¨ ù¤: ÀþõÂê ´ì¢ Âþ¥ ýøÆ
(n!)2 = (1× 2× . . .× (n− 1)n)2 ⇒(n!)2 = (1× 2× . . .× (n− 1)n)(n(n− 1)× . . .× 1) =
n∏x=1
x(n− x + 1)
y = −x2 + (n + 1)x
x = n+12
=⇒ ymax = (n+1)2
4
x = 1⇒ y = n, x = n⇒ y = n =⇒ ymin = n
www.Bshams.ir
www.Bshams.ir
5 Ìì À ± .7.1
n∏
x=1
n ≤ (n!)2 ≤n∏
x=1
(n + 1)2
4=⇒ nn ≤ (n!)2 ≤ (
n + 1
2)2n =⇒
nlogn ≤ 2logn! ≤ 2nlogn + 1
2≤ 2nlogn =⇒ n
2logn ≤ logn! ≤ nlogn
=⇒ log n! ∈ θ(n log n)
Ìì À ± 7.1: Ìì
: Ýþ¤¢ o(f(n)) ýÂo(f(n)) ⊆ O(f(n))\Ω(f(n))
o(f(n)) ⊆ O(f(n))\Θ(f(n))
:ñø ´ÞÆì öûÂü óø g(n) ∈ O(f(n)) Ý û¢ ü õ ö È ÷ g(n) ∈ o(f(n)) Ý þ Þ ÷ ü õ Â ê
. ´¨ g(n) ∈ O(f(n)) Ýû¢ üõ öÈ÷ Àµ. g(n) /∈ Ω(f(n))
ß þ ¤¢ ´ ¨ g(n) ∈ o(f(n)) ö ù Ú ÷ ´ ¨ c = 5 î Ý î ü õ  괨 g(n) ∈ O(f(n)) Å g(n) ≤ 5f(n) Ýþ¤¢ n ≥ M1, M1 ×þ ý ¤¬Àª g(n) ∈ Ω(f(n)) Ø þ  ê , g(n) /∈ Ω(f(n)) Ý û¢ ü õ ö È ÷ ñ ¥ ø d0f(n) ≤ g(n), n ≥ M1 Âû ý î M1 ×þÝþ¤¢ d = d0 ×þ ý ùÚ÷n ≥ M2 î ¢¤¢ ¢ø ö M2 ×þ c = d0
2ý Šg(n) ∈ o(f(n)) üêÂÏ
Ëì î d0 ≤ 0Ýþ¤¢ n ≥MAXM1, M2 Âû ý Šg(n) ≤ d02
f(n)Ýþ¤¢. ´¨
(A\B = A\(A ∩ B)):ôø¢ ´ÞÆì öûÂ
o(f(n)) ⊆ O(f(n))\Ω(f(n)) = O(f(n))\(O(f(n))) ∩ Ω(f(n))
=⇒ o(f(n)) ⊆ O(f(n))\θ(f(n))
.¢ª ÛþÀ± ýøÆ À÷ üÞ÷ üÜî ´ó ¤¢ ëê Ìì Àû¢ öÈ÷ : ñ·õ:Û
µª¢ ¤ Âþ¥ â Àî Âê, Ýû¢ üõ öÈ÷ ¤ á®õ ßþ ËÖ÷ ñ·õ ¥ ù¢Ôµ¨ : ݪ
www.Bshams.ir
www.Bshams.ir
ü±÷¹õ ýû¢Þ÷ üêÂãõ .1 ÛÊê 6
g(n)=
12 ¢Âê ýû nn ø¥ ýû n
: Ýþ¤¢M = 12 , n ≥ 13⇒ g(n) ≤ n =⇒ g(n) ∈ O(n)
: Ýþ¤¢ Å , Àª g(n) ∈ Ω(n) Ýî üõ Âê ñ
g(n) ∈ Ω(n) ⇔ ∃c > 0∞∀ n g(n) ≥ cn ⇔ ∃c > 0
∞∀ n g(n)
c ≥ n ⇔ F
(ÀµÆ÷ ¤¢ öÂî ¥ ¢Âê ¢Àä) =⇒ g(n) 6∈ Ω(n)
Àª ¤Âì Τ ßþ Àî Âê, ÷ þ ´¨ ¤Âì g(n) ∈ o(n) Τ ݱ ñ: Ýþ¤¢ Å
g(n) ∈ o(n)⇐⇒ ∀c > 0∞∀ n g(n) ≤ cn, c = 1
2=⇒ g(n) ≤ n
2⇐⇒ F
=⇒ g(n) 6∈ o(n)
.¢ª ÛþÀ± ýøÆõ À÷ üÞ÷ üÜî ´ó ¤¢ ëê Ìì ¢ª üõ ùÀûÈõ Å
î ü ó ¤¢ À µ Æ û ýÀ ã ø ü ¨ Ø ã ÷ Ωø OÀ û¢ ö È ÷ : ß þÂ Þ . Àª üÞ÷ ü÷¤Ö
: Û: ü¨Øã÷ ´¬¡ ±
f(n) ∈ O(f(n))⇐⇒ ∃c > 0∞∀ n ∈ N f(n) ≤ 1× f(n)
: ýÀã ´¬¡ ± î ü þ ¹ ÷ ¥ À ª f(n) ∈ O(h(n)) ø g(n) ∈ O(f(n)) À î  ê
:ßþÂ g(n) ∈ O(f(n))
g(n) ≤ c1f(n): Ýþ¤¢ n ≥M1 Âû ø M1 > 0×þ ø c1 ≥ 0×þ ýÂÂû ø M2 > 0×þ ø c2 ≥ 0×þ ý f(n) ∈ O(h(n)) ý °Â ßÞû ø
f(n) ≤ c2h(n): Ýþ¤¢ n ≥M2
: Ýþ¤¢ n ≥M Âû ø M = MAXM1, M2 ý ñ
g(n) ≤ c1f(n)=⇒ g(n) ≤ c1f(n) ≤ c1c2h(n) =⇒ g(n) ≤ ch(n)
f(n) ≤ c2h(n)
=⇒ g(n) ∈ O(h(n))
.À÷ª üõ ± °Â ßÞû Ã÷ Ω ý ´¬¡ ø¢ ßþ: ü÷¤Ö ´¬¡ ßµª¢ ôÀä ý ËÖ÷ ñ·õ
www.Bshams.ir
www.Bshams.ir
7 Ìì À ± .7.1
Àþ ¹µ÷ ¤¢ n2 ∈ O(n) ÝþÞ÷ üõ Âê , n2 /∈ O(n)î üó ¤¢ n ∈ O(n2)
:Ýþ¤¢ n ≥M1, M1 ×þ ø c > 0×þn2 ≤ cn⇒ n ≤ c⇒ (.À÷¤À÷Âî ¥ üã±Ï ¢Àä)
. ´¨ ý¥¤ Ýû Τ ×þ f â ôÞ äÞ¹õ ýø¤ θÀû¢ öÈ÷ : ßþÂÞ: Û
: Ýþ¤¢ O, Ω ü¨Øã÷ ´¬¡ ßµª¢ ÂÏ¡
f(n) ∈ O(f(n)) , f(n) ∈ Ω(f(n))⇒ f(n) ∈ θ(f(n))
.Àª üõ ü¨Øã÷ ´¬¡ ý¤¢ θ Å: Ýþ¤¢ Å g(n) ∈ θ(f(n)) Ýî üõ Âê Ã÷ ü÷¤Ö ´¬¡ ü¨¤Â ýÂ
g(n) ∈ θ(f(n)) =⇒ g(n) ∈ O(f(n)), g(n) ∈ Ω(f(n)) =⇒ f(n) ∈ Ω(g(n)),
f(n) ∈ O(g(n)) =⇒ f(n) ∈ Ω(g(n)) ∩ Og(n)) =⇒ f(n) ∈ θ(g(n))
.Àª üõÃ÷ ü÷¤Ö ´¬¡ ý¤¢ θ Àû¢ üõ öÈ÷ î
: Ýþ¤¢ O, Ω ýÀã ´¬¡ ßµª¢ ÂÏ¡ ß»Þûf(n) ∈ θ(g(n)) , g(n) ∈ θ(h(n)) =⇒f(n) ∈ O(g(n)) , g(n) ∈ O(h(n)) ⇒ f(n) ∈ O(h(n))
f(n) ∈ Ω(g(n)) , g(n) ∈ Ω(h(n))⇒ f(n) ∈ Ω(h(n))
=⇒ f(n) ∈ θ(h(n))
´¨ ýÀã ø ü÷¤Ö, ü¨Øã÷ ´¬¡ ¨ Âû ý¤¢ θ Àª ùÀûÈõ î ¤Ï öÞû. ´¨ ý¥¤ Ýû Τ ×þ f â ôÞ äÞ¹õ ýø¤ Å
: ݪ µª¢ Âð : ßþÂÞL = limn→∞
f(n)g(n) , f, g : N −→ R+
: ÀþÞ÷ ±.f(n) ∈ o(g(n)) ùÚ÷ L = 0 »÷ (1.g(n) ∈ o(f(n)) ùÚ÷ L =∞ »÷ (2
.g(n) ∈ θ(f(n)) ùÚ÷ 0 < L <∞ »÷ (3: µØ÷
www.Bshams.ir
www.Bshams.ir
ü±÷¹õ ýû¢Þ÷ üêÂãõ .1 ÛÊê 8
¢¤ õ ¤¢ ü óø ´¨ ý¥¤ Ý û §î ×þ  þ¥ ¢ø¤ üõ ¤Ø ´¨¤¢ θ ¢¤ õ ¤¢ ýøÆ ¢ Þ ÷.Àª üÞ÷ ´¨¤¢ O, o, Ω, ω
: ñ·õ:Àî ¢¤ þ ø ± ¤ Âþ¥ ýûä¢
• f(n) ∈ O(g(n)) =⇒ 2f(n) ∈ O(2g(n))
ÝþÞ÷ üõ ¢¤ ¤ ä¢ ßþ ËÖ÷ ñ·õ : Û
n logn2 ∈ O(logn!
2 ) =⇒ 2n logn2 ∈ O(2logn!
2 ) =⇒ nn ∈ O(n!)
:ÂÚþ¢ ËÖ÷ ñ·õ þ ø ´¨ Ëì î
2 logn2 ∈ O(logn
2) =⇒ 2logn2
2 ∈ O(2logn2 ) =⇒ n2 ∈ O(n)
• f(n) ∈ O(g(n)) =⇒ (f(n))k ∈ O(g(n)k)
:Û Ý÷ üõ ßþ ÝþÂð üõ ÂÑ÷ ¤¢ ×þ ¥ µð¤Ã ¤ gø f û ݵþ¤Úó Ûܽ ¤¢)
(. ´Æ÷ ´¨¤¢ ÝþÂÚ ×þ ¥ µð¤Ã ü÷õ¥ ÂÑ÷ ¥ Âð üóøÝ÷¨Â öf(n) ≤ cg(n) =⇒ (f(n))k ≤ ck(g(n)k) =⇒ (f(n))k ∈ O(g(n)k)
• f(n) ∈ O(f2(n))
:Û
f(n) = 1
n =⇒ f2(n) = 1
n2 =⇒ f(n) 6∈ O(f2(n))
www.Bshams.ir
www.Bshams.ir
2 ÛÊê
üµÈð¥ ýû ݵþ¤Úó
üµÈð¥ ýû ݵþ¤Úóø ¢ãõ .2
üµÈ𥠢ãõ 1.2À þ ×þ µÆø ö ÜÞ Âû î ´¨ ýó¢ãõ üµÈð¥ ýó¢ãõ ×þ ¥ ¤ÑõùÀª ÓþÂã Û±ì ¥ óø ¤ÀÖõ À þ ×þ ý ùøä ø ´¨ ö Û±ì õ ýÜÞ
. ´¨î Ýþ¥¢Âüõ üÖÖ °þ® ùÂçµõ ×þ üµÈ𥠢ãõ Û ´ÞÆì ßþ ¤¢
:Àî üõ ëÀ¬ Âþ¥ üõÞä Ûت ¤¢
a0tn + a1tn−1 + · · ·+ aktn−k = f(n) ai ∈ R, f : N −→ R≥0, k ∈ N
n Âçµõ ×þ ÍÖê ø ´¨ ´ k,ÀµÆûÉ¿Èõ Û±ì ¥ t0, · · · , tk−1 °þ®. Àþð ´ °þ® üµÈð¥ ó¢ãõ ó¢ãõ .Ýþ¤¢
Âê Àµ ¤¢ .Ýî üõ ù¢Ôµ¨ Ê¿Èõ ó¢ãõ ¥ Þãõ ¢ãõ ßþ Û ýÂó¢ãõ Û ßþ ,f(n) = 0 üãþ Àª ßÚÞû á÷ ¥ üµÈð¥ ó¢ãõ Ýî üõ
:Ýþ¤¢ ¤ Âþ¥ ´ °þ® üµÈð¥
a0tn + a1tn−1 + · · ·+ aktn−k = 0
xi ¤ tiÜÞ Âû.ÝÆþ÷ üõ Âþ¥ ¤¬ ¤ Ê¿Èõ ó¢ãõ ó¢ãõ ßþ Û ýÂ:ßþ .Ýî üõ ÛþÀ±
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 10
a0xn +a1x
n−1+ · · ·+akxn−k = 0⇒ xn−k(a0xk + a1x
k−1 + · · ·+ ak︸ ︷︷ ︸⇓
) = 0
(ÂÆÔõ) Ê¿Èõ ó¢ãõ. Ýî üõÉ¿Èõ ¤ Ê¿Èõ ýó¢ãõ ýû Èþ¤ ų¨
û Èþ¤ ¢¤õ ¤¢ ¶½ 1.1.2
¤¬ ßþ ¤¢Àª r1, . . . , rk ÃþÞµõ ø¢ ø¢ üÖÖ Èþ¤ ký¤¢ ó¢ãõ(1:´¨ Âþ¥ ôÂê ó¢ãõ
tn = c1(r1)n + c2(r2)
n + . . . + ck(rk)n
Èþ¤ ñ·õ ý ,Àª ý¤ÂØ ü¡Â ñ ßä ¤¢ø üÖÖ ýûÈþ¤ ý¤¢ ó¢ãõ(2Àìê üóø ´¨ (x− rp)m¤µîê ý¤¢ ¤±ä üãþ) Àª m üþµÆ ¥ ý¤ÂØ rp
: ´¨ Âþ¥ ôÂê ó¢ãõ ¤¬ ßþ ¤¢ (´¨(x− rp)m+1 ¤µîê
tn = c1(r1)n + c2(r2)n + . . . + cp0(rp)n + cp1n(rp)n+
. . . + cpm−1nm−1(rp)n + . . . + ct(rt)n
¤øõ¢ Ìì ¥ù¢Ôµ¨ ,ÀªüÖÖ Âè ø üõûõ ýû Èþ¤ ý¤¢ ó¢ãõ Âð(3ö üõ ùÀª µÔð Ê¿Èõ ó¢ãõ üÖÖ ýû Èþ¤ ¢¤õ ¤¢ î ö±ª fÖì¢
.¢Âî ±¨½õ ¤
: ñ·õ:Àî Û¤ Âþ¥ üµÈ𥠢ãõ
g(n) =
n n ≤ 1
5g(n− 1)− 6g(n− 2) else: Û
g(n)− 5g(n− 1) + 6g(n− 2) = 0 =⇒ x2 − 5x + 6 = 0
⇒ x1 = 3, x2 = 2⇒ g(n) = c13n + c22
n
g(0) = 0, g(1) = 1⇒ c1 = 1 , c2 = −1 =⇒ g(n) = 3n − 2n
www.Bshams.ir
www.Bshams.ir
11 üµÈ𥠢ãõ .1.2
tn =
2tn−1 − tn−2t0 = 1
t1 = 3
: Ûtn − 2tn−1 + tn−2 = 0 =⇒ x2 − 2x + 1 = 0⇒ x1 = x2 = 1
⇒ tn = c1 + c2n t0 = 1 , t1 = 3⇒ c1 = 1, c2 = 2 =⇒ tn = 1+ 2n
tn =
2tn−1 + 1
t0 = 0
t1 = 1
: Ûtn = 2tn−1 + 1 , tn−1 = 2tn−2 + 1⇒ tn − tn−1 = 2tn−1 − 2tn−2
⇒ tn − 3tn−1 + 2tn−2 = 0⇒ x2 − 3x + 2 = 0
⇒ x1 = 1, x2 = 2 , t0 = 0, t1 = 1 =⇒ tn = 2n − 1
:´ °þ® ßÚÞûÂè üµÈ𥠢ãõ Û¤Àî üõ ëÀ¬ Âþ¥ üõÞä Ûت ¤¢ î ´ °þ® ßÚÞûÂè üµÈ𥠢ãõ
: ÀþÂÚ ÂÑ÷ ¤¢
a0tn + a1tn−1 + a2tn−2 + . . . + aktn−k =
bn1p1(n) + bn
2p2(n) + . . . + bn
mpm(n)
( .ÀµÆû ´ ø üÖÖ ¢Àäû ai, bj ø ÀµÆû di¤¢ ¥ ýÜÞ À pi(n) ): ÝÆþ÷ üõ Âþ¥ ¤¬ ¤ Ê¿Èõ ó¢ãõ ¢ãõ ¥ µ¨¢ ßþ ýÂ
(a0xk + a1x
k−1 + · · ·+ ak)(x− b1)d1+1(x− b2)
d2+1 · · · (x− bm)dm+1 = 0
ó¢ãõ ýû Èþ¤ ±¨½õ ¥ Å .Ýî üõ ±¨½õ ¤ ó¢ãõ ýû Èþ¤ ų¨üõÞä ö üõ Àª µÔð ßÚÞû ¢ãõ ¢¤õ ¤¢ »÷ Èõ fÖì¢ üªø¤
.¢Âî ±¨½õ ¤ ó¢ãõ:Ýþ¤¢ ¤ Âþ¥ ýó¢ãõ ñ·õ ýÂ
tn − 7tn−1 + 12tn−2 = 2n + n + 3n(n + 1)
: Ýþ¤ø üõ ´¨À ¤ Ê¿Èõ ýó¢ãõ(x2 − 7x + 12)(x − 2)0+1(x − 1)1+1(x− 3)1+1 = 0
⇒ (x− 3)(x − 4)(x − 2)(x− 1)2(x − 3)2 = 0
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 12
⇒ r1 = 1, r2 = 1, r3 = 2, r4 = 3, r5 = 3, r6 = 3, r7 = 4
⇒ tn = c1(1)n +c2n(1)n +c3(2)n +c4(3)n +c5n(3)n +c6n2(3)n +c7(4)n
: ñ·õ:Àî Û ¤ Âþ¥ üµÈð¥ ó¢ãõ
t(n) =1 n = 1
2t(n2) + n o.w
:Û. Ýî üõ Û Âþ¥ Âçµõ Âç ¥ ù¢Ôµ¨ ¤ ñ·õ ßþ
n = 2k ⇒ t(n) = t(2k)
t(2k) = 2t(2k
2) + 2k = 2t(2k−1) + 2k
g(k) = t(n)
⇒ g(k) = 2g(k − 1) + 2k ⇒ (x− 2)(x − 2) = 0⇒ r1 = 2, r2 = 2
=⇒ g(k) = c12k + c2k2
k 2k = n =⇒ log2 n = k
t(n) = c1n + c2n logn2
t(1) = c1 = 1 t(2) = 2t(1) + 2 = 4 = 2c1 + 2c2 ⇒ c2 = 1
=⇒ t(n) = n + n logn2
: ñ·õ:Àî Û ¤ Âþ¥ üµÈð¥ ó¢ãõ
T (n) =
1 n = 13
2n = 2
3
2T (n
2)− 1
2T (n
4)− 1
n o.w
:Û: Ýþ¤¢ Âçµõ Âç ¥ ù¢Ôµ¨ ¥
n = 2k =⇒ T (2k) = 3
2T (2k−1)− 1
2T (2k−2)− 1
2k =⇒g(k) = 3
2g(k − 1) − 1
2g(k − 2) − (1
2)k =⇒ (x2 − 3
2x − 1
2)(x − 1
2) = 0 ⇒
r1 = r2 = 1
2, r3 = 1 =⇒ g(k) = c1 + c2(12 )k + c3k(1
2)k =⇒
www.Bshams.ir
www.Bshams.ir
13 üµÈ𥠢ãõ .1.2
T (n) = c1 + c21
n + c3lg nn ,
c1 + c2 = 1
c1 + c22
+ c32
= 3
2
c1 + c24
+ c32
= 3
2
=⇒ T (n) = 1+ lg nn
.Àî Û ¤ Âþ¥ ó¢ãõ : ñ·õ
t(n) + nt(n− 1) = 2n!t(0) = 1
:Û
t(n) + nt(n− 1) = 2n! =⇒ t(n)n! + t(n−1)
(n−1)!= 2
t(n)n! = g(n)
g(n) + g(n− 1) = 2 =⇒ (x− 1)(x + 1) = 0
=⇒ r1 = −1, r2 = 1 =⇒ g(n) = c1(−1)n + c2(1)n
t(n) = −12
n!(−1)n + 3
2n!
: ñ·õ.Àî Û ¤ Âþ¥ ó¢ãõ
T (n) =
a n = 0
b n = 1
1+T (n−1)T (n−2)
o.w
: Û
T (0) = a T (1) = b T (2) = 1+ba T (3) = 1+a+b
ab T (4) = a+1b
T (5) = a T (6) = b T (7) = 1+ba =⇒ T (n) = T (n mod 5) n > 4
: ñ·õ.Àî Û ¤ Âþ¥ ó¢ãõ
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 14
t(n) =
1
4−t(n−1)n > 1
1 n = 1
:Ût(2) = 1
3, t(3) = 3
11, t(4) = 11
41=⇒ tn = pn
qn
pn+1
qn+1= t(n + 1) = qn
4qn−pn=⇒ qn+1 = 4qn − pn
pn+1 = qn =⇒ pn = qn−1
qn+1 = 4qn − qn−1 =⇒ (x2 − 4x + 1) = 0 =⇒ x = 2±√3
=⇒ qn = c1(2+√3)n + c2(2−
√3)n q2 = 3, q3 = 11
üµÈð¥ ýû ݵþ¤Úó 2.2ù¢ ¤ üþÂÖµ¨ ¤µ¡¨ î ¢¤¢ ¢ø öØõ ßþ üÆþ÷ õ÷ ýû ö¥ ü¡Â ¤¢þ ×þ ý üõÀÖõ Û ù¤ ×þ î ´¨ ö üþÂÖµ¨ ¤µ¡¨ ¥ ¤Ñõ ,Ýî ý¥¨µª¢ üþÂÖµ¨ Τ ×þ ùøä øÀª É¿Èõ Û±ì ¥ óbÆõ ¥ óø ´ã®ø ÀØ÷ üãþ ÀþÞ÷ ͱÂõ ö Û±ìõ ýÜÞ À þ ×þ ¤ ¡ ÜÞ À÷µ î ݪ㨠¤ Û ù¤ ßþ Ý÷µ ¢ª µÆ÷¢ ¡ ýÜÂõ ¥ Û±ì óbÆõ Û ù¤ Âð
.Ýþ ´¨¢ ÜÂõ ßþ ¤¢ Û ù¤ ×þ ø Ýû¢
www.Bshams.ir
www.Bshams.ir
15 üµÈð¥ ýû ݵþ¤Úó .2.2
:ý÷û ýû  óbÆõ¥ üØþ ýø¤ ,À÷ ùÀª ý¤Áð ù¤Þª 3ø2ø1 ýû ù¤Þª Üõ ¨ Àî Âê
î À÷ µêÂð ¤Âì ý¤Ï ô iÜõ ýø¤ ×Æþ¢ n ßþ ,¢¤¢ ¤Âì ×Æþ¢ n û Üõßþ î ´¨ ö éÀû .´¨ µêÂÚ÷ ¤Âì µØî ×Æþ¢ ýø¤ ýµð¤Ã ×Æþ¢ ÃðÂûùÀ÷Þì üØÞî Üõ ¥ ù¢Ôµ¨ ¤î ßþ î ¢Âî ÛÖµõ ô jÜõ ¤ ×Æþ¢ n
¤ Âû ø ¢Âð üÞ÷¤Âì µØî ×Æþ¢ ýø¤ µð¤Ã ×Æþ¢ ÃðÂû ø ¢Âð üõ ¤¬.¢Èõ ¹ ×Æþ¢ ×þ ú
i −→ j i + j + x = 1+ 2+ 3 −→ x = 6− (i + j)
i j 6-(i+j)
void hanoi(int n,int i,int j)
if(n > 0)
hanoi(n-1,i,6-(i+j)) ;
cout i ”→” j ;
hanoi(n-1,6-(i+j),j);
T (0) = 0
T (n) = T (n− 1) + 1+ T (n− 1) =⇒T (n) = 2 T (n− 1) + 1⇒ T (n) = 2n − 1
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 16
:ßþÂÞöµ÷ ¤ üØÆþ¢ ºû ý÷û  óbÆõ ¤¢ ö ܨø î ÀÆþ üÞµþ¤Úó¢Àã î üµÈð¥ Τ) ¢Âî ÛÖµõ ÅØãó þ ô j Üõ ô i Üõ ¥ fÞÖµÆõ
(.Àî ±¨½õ Àû¢ üõ ¤ ô j Üõ ×Æþ¢ n ñÖµ÷ ý ô¥ ýû ´îÂ: Û
Void Hanoi (int i , int j)
if (n > 0)
Hanoi(n-1, i , j);
cout i ”→ ” 6− (i + j);
Hanoi(n-1, j , i);
cout 6− (i + j) ”→ ” j;
Hanoi(n-1, i , j);
T (0) = 0
T (1) = 2 ⇒ T (n) = 3n − 1T (n) = 3 T (n− 1) + 2
: ñ·õ¤ ¤÷ ßþ ýû ÷¡ ¥ ü¡Â Ýû¡ üõ î Ýþ¤¢ n ñÏ ý¤÷ Àî Â꤬ ßþ¤¢ .Àª±÷ Ýû ¤ø¹õ ýÀÔ¨ ÷¡ ¨ ºû î Ýî ýÃõ Ù÷¤ ý¤Ï ¤ Àî üõ ¢¹þ ¤ ¢ÊÖõ ßþ ý ßØÞõ ýû ´ó ôÞ î üµÈð¥ ݵþ¤Úó ¢ÊÖõ ßþ ý ¤ ßØÞõ ¢Àã î üµÈð¥ Τ ß»Þû .Àþ¤ø ´¨¢Ù÷¤ ø À÷ Ù÷¤ ÀÔ¨ ÷¡ n î ´¨ ö Âê).Àþ¤ø ´¨À Ã÷ ¤Àû¢ üõ õ
(.Ýî ýÃõ Ù÷¤ Ýû¡ üõ ù¨
:Û
www.Bshams.ir
www.Bshams.ir
17 üµÈð¥ ýû ݵþ¤Úó .2.2
.............a
a[1] a[2] a[n]
a[1]
ù¨
ÀÔ¨
ù¨
ÀÔ¨a[2]
a[2]
ù¨
ÀÔ¨ a[3] ù¨
a[3]a[3]
a[3]
Void Coloring (int n)if (n == 1)
printf(’’); printf(’•’);else if (n == 2)
printf(’’); printf(’•’); printf(’•’); printf(’••’); else if (n == 3)
printf(’••’); printf(’••’); printf(’••’); printf(’•’);printf(’ • ’); printf(’• ’); printf(’• • •’);
else •.Coloring(n-1);
•.Coloring(n-2);
•.Coloring(n-3);
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 18
a(n) =
2 n = 1
4 n = 2
7 n = 3
1× a(n− 1) + 1× a(n− 2) + 1× a(n− 3) else
: ñ·õÝÞþÃîõûÆþÖõ ¢Àã ÛìÀ Ýû¡ üõ.Ýþ¤¢ ¤µ¡ ¤¢ n ñÏ ý þ¤¢Àã ÛìÀ î Àû¢ ¤ ¤ üµÈð¥ Τ . Ýþ¤ø ´¨À ¤ þ¤ ÝÞ÷ üõ ø
.Àî ±¨½õ ¤ ûÆþÖõ: Û
ö üõ Å ù¢Þ÷ À ¤ þ¤ ÷¡ ø¢ Ý÷ üõ Âþ¥ Ûت ÕÎõÀª ø¥ n Âðø Ýþ¤¢¥÷ ñø ÷¡ø¢ ÝÞ÷ üõ ø ÝÞþÃîõ ö¢¤ø ´¨À ý ÆþÖõ ×þ î ´Ôðø¢ ÝÞ÷ üõ ¤ ¢Àä n-2 ÝÞ÷ üõ ø ñø ¢Àä ø¢ ÝÞþÃîõ ¤ ¢Àä n-2 ÝÞþÃîõ Àþ
. 1´¨ ¥÷ ÆþÖõ ¨ fãÞ Å. Ýî ÆþÖõ ñø ¢Àä
︸ ︷︷ ︸2
︸ ︷︷ ︸n−2
: Ýþ¤¢ Å
T (n) =
1 n = 2
=⇒ T (n) = 3
2n− 2
T (n− 2) + 3 n = 2k
ùÀ ÷ õüì ý ÷¡ n-1 Å ù¢Þ ÷ À ¤ þ¤ ý ÷¡ ×þ Àª ¢Â ê n  ð ø÷¡ n-1 ßþ ý ¤ û ÆþÖõ ¢Àã Û±ì ýΤ ÕÎõ ø ´¨ ø¥ ý¢Àäß üþú÷ ÝÞ÷ üõø ÝÞþÃîõ ö¢Þ÷ À ý Ã÷ ÆþÖõ ø¢ ų¨, Ýþ¤ø üõ ´¨¢(32(n− 1)− 2) + 2fãÞ Å, Ýþ¤¢ ¥÷÷¡ n-1 ÝÞ÷ üõø ÝÞþÃîõ ø ñø ý÷¡
: Ýþ¤¢ Ûî ¤¢ Å. ´¨ ¥÷¢Âê n ý ÆþÖõ
ÆþÖõ ø¢ ø Ýþ¤¢ ÆþÖõ 2T (n2) ùÚ÷ , Ýî ÓÊ÷ ¤ þ¤ Ý÷ üõÀª ø¥ n Âð) 1
öÞû î. Ýþ¤¢ ´ó T (n) = 2T (n2) + 2 Ûî ¤¢ Å . ùøÂð Âû ÝÞ÷ üõ ø ÝÞþÃîõ ýÂ
(.Àû¢ üõ õ ¤ T (n) = 3
2n − 2
www.Bshams.ir
www.Bshams.ir
19 üµÈð¥ ýû ݵþ¤Úó .2.2
T (n) =
0 n = 1
3
2(n− 1) n = 2k + 1
3
2n− 2 n = 2k
: AVL ´¡¤¢1 ùÂð Âû ´¨¤ ø ² ´¡¤¢ Âþ¥ áÔ¤ 鵡 î üø¢ø¢ ý¹µÆ ´¡¤¢ùÂð ö üõ O(log n) ÆþÖõ ý Š. ´¨ log n ¥´¡¤¢ ßþ áÔ¤ . Àª
. ¢Âî ´þÃþø ¤ û´¨ °Æ ý¤¢ ö ù ð  û î ü ø¢ø¢ ´¡¤¢ : ü ø¢ø¢ ý¹ µÆ ´¡¤¢
. Àª ´¨¤ À÷¥Âê ýøÆõ µØî ² À÷¥Âê Øþ¤Î
: ñ·õõ ¤ 4 áÔ¤ AVL ´¡¤¢ ×þ ýû ùÂð ¢Àã ÛìÀ î üµÈð¥ Τ
? ´¨ ôÀî ÀûÀ
: Û
 þ¥ á Ô ¤ ø n-1 , n á Ô ¤ AVL ´ ¡¤¢ ´ ¨¤ ´ Þ ¨ ´ ¡¤¢  þ¥ á Ô ¤. ´¨ n-2 ² ´Þ¨ ´¡¤¢
T(n-2) T(n-1)T(0) T(1) T(2) T(3) T(n)
T (n) =
1 n = 0
2 n = 1
4 n = 2
T (n− 1) + T (n− 2) + 1 o.w
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 20
ý Τ T (n) = T (n− 2) + T (n− 1) + 1 ó±÷¢ ø ü÷±ê ó± ÷¢ ß:´¨ ¤Âì Âþ¥ ¤Ê
1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓1 , 2 , 4 , 7 , 12 , 20 , 33 , 54
T (n) = f(n + 2) + (−1)
f(n) = f(n− 1) + f(n− 2) f(0) = 1 , f(1) = 1
. Àî Û ¤ Âþ¥ Íþª ü÷±ê ó¢ãõ
f(n) = f(n − 1) + f(n − 2) f(0) = 0, f(1) = 1
x2 − x − 1 = 0 ⇒ r1 = 1+√5
2, r2 = 1−
√5
2
f(n) = c1(1+
√5
2)n + c2(
1−√5
2)n
⇒ f(n) = 1√5(1+
√5
2)n − 1√
5(1−
√5
2)n
: AVL ´¡¤¢ ¤¢ «¡ ýùÂð ´þÃþø ý ÆþÖõ ·îÀ
n ≥ T (h) = f(h + 2)− 1 =⇒ n ≥1√5
(1+√5
2)h+2 − 1 =⇒
n + 1 ≥ 1√5
(1+√5
2)h+2 =⇒ log(n+1)
ϕ ≥ log1√5
ϕ +(h + 2) =⇒
h + 2 ≤ log(n+1)ϕ − log
1√5
ϕ =⇒ h ∈ O(log√5(n+1)
ϕ ) =⇒ h ∈ O(logn2)
þ
h + 2 ≤ log(n+1)ϕ − log
1√5
ϕ = log(n+1)
2× log2ϕ + log
√5
ϕ = 1.44 log(n+1)
2+1.67
=⇒ h ≤ 1.44 log(n+1)
2−0.33 =⇒ h ∈ O(logn
2)
logn2 üãþ ´¡¤¢ áÔ¤ ù¥À÷ ùÂð ×þ ´þÃþø ý ÆþÖõ ·îÀ ßþÂ
. ´¨
www.Bshams.ir
www.Bshams.ir
21 üµÈð¥ ýû ݵþ¤Úó .2.2
: ñ·õ±¨½õ ÀûÀ õ ¤ ÃþÞµõ ÀÜî n üø¢ø¢ ý¹µÆ ýúµ¡¤¢ ¢Àã î ýΤ
. Àî(c1 < c2 < · · · < cn ÃþÞµõ ø¢ ø¢ ÀÜî n)
ck
c1 < c2 < ... < ck−1 ck+1 < ... < cn
T (k − 1) T (n− k)
T (1) = 1 T (2) = 2
T (n) =∑n
k=1 T (k − 1)× T (n− k) = 1
n+1
(2nn
)(öî ¢Àä)
: ñ·õÀ . Ýî ±¨½õ ¤ A1, A2, · · · , An ÅþÂõ n ÂÌܬ Ýû¡ üõ
? ¢Âî ý¤Áðõ÷ ® ´ú ¤ û ÅþÂõ ßþ ö üõ ÕþÂÏ: Û
T (0) = 0
T (1) = 1 (A)
T (2) = 1 (AB)
T (3) = 2 A(BC), (AB)C
T (4) = 5 A(BCD), (AB)(CD), (ABC)D
⇒ T (4) = T (1).T (3) + T (2)T (2) + T (3).T (1)...
(A1 · · ·Am)︸ ︷︷ ︸m
(Am+1 · · ·An)︸ ︷︷ ︸n−m
⇒
T (n) =n−1∑
m=1
T (m)T (n−m) =1
n
(2n− 2n− 1
)
:ßþÂÞ.ÀþÞ÷ ± Àóõ â ¥ ù¢Ôµ¨ ¤ Û±ì ñ·õ ø¢ ý Τ ø¢
:ñ·õ
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 22
¤¢ ùÀª ÂûÒ ýû ÂÔ¬ ¢Àã î ´¨ ±µãõ ü÷õ¥ n ñÏ 10 ý±õ ¤¢ ýÀî¤ n ñÏ Â±µãõ ýû Àî Ûî ¢Àã î ÀÆþ üµÈð¥ Τ ×þ Àª ø¥ ö
.ÀþÞ÷ ±¨½õ
:Ûn ñÏ Â±µãõ ýûÀî ôÞ ¢Àã = a(n)
n-1 ñÏ Â±µãõ ýûÀî ôÞ ¢Àã = a(n− 1)
(.Àª±÷ ÂÔ¬ ñø ÷¡ î üµó ¤¢)
´ó 9 a(n − 1)
︷ ︸︸ ︷ ︷ ︸︸ ︷1,2,...,9
.´¨ ¢Âê Çþû ÂÔ¬ ¢Àã î n-1 ñÏ üþû µª¤ ôÞ ¢Àã = b(n− 1)
(.Àª ÂÔ¬ ñø ÷¡ î üµó ¤¢)
b(n − 1)
︷ ︸︸ ︷0
=⇒ a(n) = 9a(n− 1) + b(n− 1)
1 2 n − 1
10 10 . . . . . . . . . 10
(n-1) ñÏ û µª¤ ôÞ ¢Àã= a(n-1)+b(n-1)=10n−1
a(n− 1) + b(n− 1) = 10n−1 ⇒ b(n− 1) = 10n−1 − a(n− 1)
=⇒ a(n) = 9a(n− 1) + 10n−1 − a(n− 1) = 8a(n− 1) + 10n−1
: ñ·õ¢¤ø ´¨À Í¡ n ö üõ î ¤ ü÷ ÝÞþÃîõ î ÀÆþ üµÈð¥ Τ
.Àû¢ öÈ÷
www.Bshams.ir
www.Bshams.ir
23 üµÈð¥ ýû ݵþ¤Úó .2.2
: Û
1
2
1
2 3
4
12
3 4
5 67
T(1)=2
T(2)=4
T(3)=7
T (1) = 2, T (2) = 4, T (3) = 7, T (4) = 11, . . .
ôn Í¡ ö¢Âî ê ® ý Å. ¢Âî ¢¹þ ö üõ ÷ T (n− 1) Í¡ n− 1¹µ ÷ ¤¢ Å ¢ª üõ ê® ÀþÀ ÷ n î ¢Âî âÎì ¤ Û±ì Í¡ n − 1Àþ
.´ª¢ Ýû¡ ÷ T (n) = T (n− 1) + n
T (n) = T (n− 1) + n =⇒ T (n) =n(n + 1)
2+ 1
: ñ·õ¢Àä ßþ ö üõ ÕþÂÏ À Ýþù¢Âî ´êþ¤¢ ¤ n ≥ 2 üã±Ï ¢Àä ÀîÂê
?¢Âî ¥Âê 2 ýøÆõ µð¤Ã üã±Ï ¢Àä áÞ¹õ ¤ üã±Ï
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 24
: ÛT (2) = 1 : 2
T (3) = 1 : 3
T (4) = 2 : 2+ 2,4
T (5) = 3 : 2+ 3,3+ 2,5
T (6) = 5 : 2+ 2+ 2,2+ 4,3+ 3,4+ 2,6
ê® ¤ " 2+ ' ¤±ä ô k−2 ¢Àä ýû¥Âê Àþ üã±Ï ¢Àä ßõ k ýÂ: Ýî ê® Àø ×þ , ¢Àä ßõ k − 1 ýû¥Âê ñ cø ýûÀ÷ø âÞ ø Ýî
T (5) : 2+ (3), (2+ 1) + 2︸ ︷︷ ︸3+2
, (4+ 1)︸ ︷︷ ︸5
T (6) : 2+(2+2), 2+(4), (2 + 1) + 3︸ ︷︷ ︸3+3
, (3+ 1) + 2︸ ︷︷ ︸4+2
, (5+ 1)︸ ︷︷ ︸6
:Ýþ¤¢ ¹µ÷ ¤¢
T(n)=
1 n = 2
1 n = 3
T (n− 1) + T (n− 2) o.w
: ñ·õ×þ ø¢ þ üóµõ ÂÔ¬ ø¢ î ´¨ ±µãõ ü÷õ¥ 0,1,2 ôì¤ Ûõª n ñÏ ý µª¤¤ n ñÏ Â±µãõ ýû µª¤ ¢Àã î ÀÆþ üµÈð¥ Τ ,Àª µªÀ÷ üóµõ
.Àû¢ öÈ÷:
.n ñÏ Â±µãõ ýûÀî ôÞ : αn
.À÷ª áøª ×þ î n ñÏ Â±µãõ ýûÀî ôÞ : an
.À÷ª áøª ÂÔ¬ î n ñÏ Â±µãõ ýûÀî ôÞ : bn
.À÷ª áøª ø¢ î n ñÏ Â±µãõ ýûÀî ôÞ : cn
αn = an + bn + cn
an = bn−1 + cn−1 , bn = an−1 + cn−1 , cn = an−1 + bn−1 + cn−1
⇒ cn = αn−1 ⇒ cn−1 = αn−2
=⇒ αn = an + bn + cn = 2an−1 + 2bn−1 + 3cn−1 =
www.Bshams.ir
www.Bshams.ir
25 üµÈð¥ ýû ݵþ¤Úó .2.2
2(an−1 + bn−1 + cn−1) + cn−1 = 2αn−1 + cn−1
=⇒ αn = 2αn−1 + αn−2
: ñ·õéÂÏ À÷ üõ ÍÖê î ´¨ ½Ô¬ ßþ ¤¢ üªõ .Ýþ¤¢ n×m ½Ô¬×þýûÂÆõ ôÞ î ÀÆþ ¤ üµÈð¥ Τ .Àî ´î ´¨¤ éÂÏ þ ø
.Àû¢ ¤ ¤ B ÀÊÖõ A bÀ±õ ¥ ©õ ´î ý ßØÞõ: Û
n
︸ ︷︷ ︸m
A
B6
d
T(n,m-1)
T(n-1,m)-
c
©õ Àª m ñøÀ ýú÷ µ¨ ¢Àã ø n ñøÀ ýûÂΨ ¢Àã Âð Ûت ¤¢T (n, m − 1) ´ó ßþ ¤¢ î ¢¤ÁÚ c ÎÖ ÷¥ À þ þ B ÎÖ ÷ öÀ¨¤ ý  ÂÆõ T (n− 1, m) ´ó ßþ ¤¢ î Àî ¤±ä d ÎÖ÷ ¥ Àþ þ ø ¢¤¢ ¢øÂÆõ
: Ýþ¤¢ ¹µ÷ ¤¢ .¢¤¢ ¢øT (m, n) = 1× T (n, m− 1) + T (n− 1, m)× 1 , T (n,0) = T (0, m) = 0
T (m, n) =(
m + n
n, m
)
:ßþÂÞÝþÞ÷ üõ ÝÆÖ ýøÆõ ´ÞÆì n ¤ á® , á® ýøƵõ ¶Ü·õ ×þ ¤¢Àþ¤ø ´¨¢ üµÈð¥ ýΤ, ÝþÞ÷ üõ Û¬ø Ýû ¤ ú÷ û âÜ® ¥õ ø
.Àû¢ ´¨¢ ¤ ùÀª µ¡¨ ýû á® ý¥µõ ôÞ î: ßþÂÞ
éÂÏ ú î ¢¤¢ ¢ø ½Ô¬ ßþ ¤¢ ý¤õ .Ýþ¤¢ ¤µ¡ ¤¢ n*n ý ½Ô¬üµìø ø ù¢Þ÷ ´î áøª ½Ô¬ ý ¥ ¤õ ßþ.Àî üõ ´î ´¨¤ þ ßþ
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 26
À÷ üõ î üþúµó ¢Àã .Àî üõ ´î ßþ éÂÏ À¨¤ üõ ÂÎì î?Àþ¤ø ´¨À ¤À¨Â ÛÖõ ýÎÖ÷
: ßþÂÞýû ¶Ü·õ ¤ ö ö üõ ´ó À .Ýþ¤¢ ¤µ¡ ¤¢ À½õ üãÜ® n ×þ
?¢Âî ¥Âê Óܵ¿õ:ßþÂÞ
.À üµÈð¥ ø ýÂþ ©ø¤ ø¢ ¤ ýÌä n äÞ¹õ ×þ ýû äÞ¹õ Âþ¥Âð ÝþÂð üõ ÂÑ÷ ¤¢ ´ ×þ Ìä Âû ý¥ ,ýÂþ ©ø¤ ¤¢ : üþÞû¤
üõ ÂÑ÷ ¤¢ 0 ¤ ö Àª±÷ äÞ¹õ Âþ¥ Ìä Âð ø 1 ¤ ö Àª äÞ¹õ Âþ¥ Ìä.ÝþÂð
0 0 0 0
4
3
1 2 3 4
0 0 0 1
0 0 1 0
¤¢ ø ÝÆþ÷ üõ ¤ø¢ ¤ ýÌä n-1 ýû äÞ¹õ Âþ¥ Ã÷ üµÈ𥠩ø¤ ¤¢.Ýî üõ ê® ¤ Ìä ßõ n ôø¢ Óþ¢¤
:ßþÂÞn2 1 ¢Àä ö ¤¢ î ö üþø¢ âÂõ ø µêÂð ¤ n ¢Àä î ÀÆþ ý õ÷Â
.ÀûÀ õ ¤ À÷ ùÀª ùÀ:ßþÂÞ
.ÀþÞ÷ ý¥¨ ù¢ ¤ tic tac toe ý¥
(Master Theorem) ü¨¨ Ìì 3.2ùÚ÷ f : N → R+ , b > 1 , a ≥ 1 ö ¤¢ î T (n) = a T (n
b )+ f(n) Âð: ´¨ ¤Âì Âþ¥ ¸þµ÷
ù Ú ÷ À ª ¤Â ì ε > 0 × þ ý f(n) ∈ O(nlog ab−ε)  ð (1
www.Bshams.ir
www.Bshams.ir
27 (MASTER THEOREM) ü¨¨ Ìì .3.2
.T (n) ∈ Θ(nlog ab ) î ¢ª üõ ¹µ÷
. T (n) ∈ Θ(nlog ab (log n)k+1) ùÚ÷ Àª f(n) ∈ Θ(nlog a
b (log n)k) Âð (2
× þ ¥ 0 < δ < 1 , ε > 0 × þ ýÂ ø f(n) ∈ Ω(nlog ab +ε) Â ð (3
. T (n) ∈ Θ(f(n)) ùÚ÷ a f(nb ) < δ f(n) ݪ µª¢ Àã üþ
¤Â ì ý ¹ µ ÷ ¥ ¢Â ð ¤Â ì à ÷ bnb c þ dn
b e , nb ý Â ð µ ± ó)
( . ´¨
:±
.´¨ ´ÞÆì ø¢ Ûõª ±ö  ýû n ýø¤ T(n) â î ù¢¨ Âê ×þ ´½¤ Ìì ´ÞÆì ßóøÀûÀõ öÈ÷ ´ÞÆì ßõø¢øÀî üõ Ãó÷ n = 1, b, b2, .. üãþ b > 1¥ ¼½¬ ýûê¬ ø Àî À 㨠üã±Ï ´±·õ ¢Àä Þû À÷ üõ Ãó ÷ ßþ ¤Î î
.¢ø¤ üõ ¤î ÜÿÆõ ÓÖ¨ø Óî ü¨¤Â ý ü®þ¤ ýúØØÝþÞ÷ üõ ù¢¨ ¤ Âê ý Ìì ± ý üµìø ݪ °ìÂõ Àþ õ ñ ßþ ¤¢ ¤ T(n) À÷õ üã ñ·õ öä . À÷¨Â ÍÜè ¸þµ÷ ¤ õ Àþ±÷ ý¥¨ ù¢¨ ßþüµ÷Þ® ºû ¤¬ ßþ ¤¢, ´¨ n  ´¨ 2 ¥ üþû ö n üµìø î ÀþÂÚ ÂÑ÷
:¢Þ÷ ÓþÂã ¤¬ ßþ ¤ T(n) â ö üõ Âþ¥ , T(n)∈O(n) î ´Æ÷
T(n)=
n n=1,2,3,..n2 otherwise
. T(n)∈O(n2) î üó ¤¢: ¼½¬ ýû ö ý ±
.´¨Âþ¥ üµÈð¥ ΤÃó÷ ü¨¨ Ìì ±´ÞÆì ßóø
T (n) = aT (nb ) + f(n)
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 28
b ö¢ ¼ ½¬ üõà ó î ´¨ b > 1¥ ü½½¬ ö n î Âê ß þ ´½ üµÈð¥ ý Τ Û ýóbÆõ Ýó ßóø .¢¢Âð üõ ö Ýó ¨ ¤¢ Ãó÷ ßþ.´Æ÷. À î ü õ × î Þ Ú ¨ × þ Û õ ª ¤ ± ä × þ ýøÆ ý ób Æ õ ¤ ¤ îÁ õý ü Ü ± ì Ý óø¢¥ Ý ó ß õ¨ øÀ þ Þ ÷ üõ ß ã ¤ ÞÚ ¨ ýù¢øÀ½õ Ý ó ß õø¢.ÀþÞ÷ üõ ù¢Ôµ¨ , ´¨ b¥ ü½½¬ýû ö n ØþÂê ü¨¨ ýÌì ±
: 1Ýóýûö ¥ üÔõ ÷ üã f(n) ø Àª ´ ¢Àä ø¢ b > 1ø a ≥ 1 ÀîÂêüõ ÓþÂã Âþ¥ ¤¬ b ¼½¬ ýû ö ýø¤ ¤ T(n)â .Àª b¥ ü½½¬
. Ýî
T(n)=
θ(1) n=1
aT (nb ) + f(n) n = bi
. ´¨ üµ±·õ ¼½¬ ¢Àä i î: Ýî üõ ´ ñ
T (n) = θ(nlogab ) +
logn−1
b∑
j=0
ajf(n/bj) (1)
: ±ø ´¨f(n) ©¥¤ ý¤¢ ö ýÈ þ¤ î Ý î üõ ù¢ Ô µ¨ üµÈ𥠴¡¤¢ ¥ õßþ ¥ ôÀîÂû .ÀµÆû f(n/b) ©¥¤ ý¤¢ ôÀî Âû î ,Àª üõ À÷¥Âê a ý¤¢Èþ¤ ¥ 2 ܬê ùÂð a2õ Å, ´¨ f(n/b2) ©¥¤ À÷¥Âê aý¤¢ û À÷¥Âêý¤¢ ôÀî Âû î ¢¤¢ ¢ø Èþ¤ ¥ j ܬê ùÂð aj¢Àã üÜî ¤Ï . Ýþ¤¢Âû ø ´¨ T (1) = Θ(1)   ´¡¤¢ ßþ ï Âû ©¥¤.Àª üõ f(nj
b ) ©¥¤Ýû¡ ï nloga
b ¢Àã ø lognb áÔ¤ üµ¡¤¢ Å.¢¤¢ ¤Âì logn
b ÕÞä ¤¢ ïÂ. ´ª¢
www.Bshams.ir
www.Bshams.ir
29 (MASTER THEOREM) ü¨¨ Ìì .3.2
?
6
lognb
Θ(nlogab )
nlogab
f(n)
? j
a2f(n/b2)f(n/b2)f(n/b2)
Θ(1)Θ(1)
f(n/b) f(n/b) f(n/b)
...................................................................
Θ(1)Θ(1)Θ(1)Θ(1)Θ(1)
a
a a a
a a a a a a a a a
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
-
af(n/b)
f(n)
︸ ︷︷ ︸Θ(1)Θ(1)Θ(1)
ýû ï ©¥¤ ø ´¡¤¢ ¥ ¼Î¨ Âû ©¥¤ ö¢Âî âÞ ¤ (1) Τ Ý÷ üõ õj Û·õ ¼Î¨ Âû ©¥¤ , ´¨ ùÀª ù¢¢ öÈ÷ Ûت ¤¢ î ÷Ú÷Þû. Ýî ±¨½õ öÞû áÞ¹õ ßþÂøÀª üõ ajf(n/bj) ¤¬ ´¨üÜ¡¢ ýû ùÂð ý¤¢ î
: ´¨ Âþ¥ ¤¬ û ¼Î¨ üÜ¡¢ ýû ùÂð
logb n−1∑
j=0
ajf(n/bj)
´¨¢ (1) Τ °Â ßþ . Àª üõ Θ(nlogab )  Ã÷ û ï ôÞ ©¥¤ø
.Àþ üõ¨ üµÈ𥠴¡¤¢ °Æ  Øþ öø¢Þ÷ ù¤ª üÔþÂÒ µØ÷ Àþ ´ÞÆì ßþ ¤¢:Àª Âþ¥ ¢¤õ ¨ ÕÎõ °Â À÷ üõ ü¨¨ ýÌì ¤¢ ùÀª ù¢Â ô÷ ¢¤õüÜ¡¢ ýû ùÂð ø Èþ¤ üãþ , Àª µÆøû ï ©¥¤ ´¡¤¢ Ûî ©¥¤ (1
.Àª µªÀ÷ ü÷À Â. Àª ùÀª Ç¿ ´¡¤¢ Ψ ¤¢ ýøÆõ f±þÂÖ ¤¬ ´¡¤¢ Ûî ©¥¤ (2
üÜ¡¢ ýû ùÂð ø û ï øÀª µª¢ üÚµÆ Èþ¤ ©¥¤ ´¡¤¢ Ûî ©¥¤ (3. Àª µªÀ÷ ü÷À Â
: 2Ýóýûö ¥ üÔõ ÷ üã f(n) ø Àª ´ ¢Àä ø¢ b > 1ø a ≥ 1 ÀîÂê
: ݪ µª¢Âþ¥ ¤¬ ¤ g(n) â ø .Àª b¥ ü½½¬
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 30
g(n) =logn−1
b∑
j=0
ajf(n/bj) (2): ´ª¢ Ýû¡ ùÚ÷
Ý þ¤¢ , ε > 0 ´ ± · õ ´  þ¢ Ö õ ý , f(n) = O(nlogab −ε) ð(1
. g(n) = O(nlogab )
. g(n) = Θ(nlogab . log n) ùÚ÷ f(n) = Θ(nloga
b )Âð(2
ݪ µª¢ n ≥ b ´  þ¢Öõ ôÞ ø c < 1´  þ¢Öõ ¥ üÌã ý Âð(3.g(n) = Θ(f(n)) ùÚ÷ af(n/b) ≤ cf(n)
:±Ý þ¤¢ ¹ µ ÷ ¤¢ Å f(n) = O(nloga
b −ε) Ý þ¤¢ ñø¢¤ õ ± ý •Àþ üõ ´¨À Âþ¥ Τ (2)Τ ¤¢ ý¤ÁÚþ î f( n
bj ) = O((n/bj)logab −ε)
:
g(n) = O
logn−1
b∑
j=0
aj( n
bj
)logab −ε
(3)
: Ýþ¤¢ ü¨Àû ýû ý¨ ¥ ù¢Ôµ¨ ß»Þû
logn−1
b∑
j=0
aj( n
bj
)logab −ε
= nlogab −ε
logn−1
b∑
j=0
(abε
blogab
)j
= nlogab −ε
logn−1
b∑
j=0
(bε)j
= nlogab −ε
(bε logn
b − 1bε − 1
)
= nlogab −ε
(nε − 1bε − 1
).
¤ ¬ ¤  ¡ ¤ ± ä ö ü õ. À µ Æ û ´ εø b î ý¤ Ï .´ª÷ nloga
b −εO(nε) = O(nlogab )
www.Bshams.ir
www.Bshams.ir
31 (MASTER THEOREM) ü¨¨ Ìì .3.2
:Àþ üõ ´¨À Âþ¥ Τ (3) Τ ¤¢ ¤±ä ßþ ö¢¢ ¤Âì
g(n) = O(nlogab )
.¢ª üõ ± ñø ¢¤õ °Â ßþÀ
Ýþ¤¢ f(n) = Θ(nlogab ) ýΤ ôø¢ ¢¤õ ý •
f(n/bj) = Θ((n/bj)logab )
:Àþ üõ ´¨À (4)Τ (2)Τ ¤¢ ý¤ÁÚþ ø
g(n) = Θ
logn−1
b∑
j=0
aj( n
bj
)logab
(4)
: Ýþ¤¢ Íø ¤ ý¥¨ ù¢¨ ¥
logn−1
b∑
j=0
aj( n
bj
)logab
= nlogab
logn−1
b∑
j=0
(a
blogab
)j
= nlogab
logn−1
b∑
j=0
1
= nlogab logn
b
: Ýþ¤¢ (4) Τ ¤¢ ¤±ä ßþ ö¢Âî ßÈ÷ î
g(n) = Θ(nlogab logn
b ) =⇒
g(n) = Θ(nlogab log n)
.Àª ´ Ã÷ ôø¢ ´ó î
ýû ö ý î ÝþÂÚ ¹µ÷ Ý÷ üõ (2) Τ ¥ ù¢Ôµ¨ ô¨ ¢¤õ ¤¢ •ý af(n/b) ≤ cf(n) î Âê ß þ . g(n) = Ω(f(n)) Ý þ¤¢, b ¼½¬
. f(n/b) ≤ (c/a)f(n) Ýþ¤¢ n ≥ b Âþ¢Öõ ôÞ ø c < 1´ Âþ¢Öõ üÌã
f(n/b) ≤ (c/a)f(n)⇒ f(n/bj) ≤ (c/a)jf(n)⇒ ajf(n/bj) ≤ (cjf(n))
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 32
: Ýþ¤¢ (2) Τ ¤¢ ý¤Øµ¨¢ üÞî ñ
g(n) =logn−1
b∑
j=0
ajf(n/bj)
≤logn−1
b∑
j=0
cjf(n)
≤ f(n)∞∑
j=0
cj
= f(n)(
1
1− C
)
= O(f(n)).
Ý þ¤¢ , b ¼ ½ ¬ ý û ö ý Š.´ ¨ ´ c ö ¤¢ îß þÀ .g(n) = Θ(f(n)) ß þ g(n) = Ω(f(n)), g(n) = O(f(n))
.Àª ± Ã÷ 2 Ýó ô¨ ¢¤õ °Â
3 Ýó
ýûö ¥ üÔõ÷ üã f(n) ø Àª ´ ¢Àä ø¢ b > 1ø a ≥ 1 Àî Âêüõ ÓþÂã Âþ¥ ¤¬ b ¼½¬ ýû ö ýø¤ ¤ T(n)â .Àª b¥ ü½½¬
. Ýî
T(n)=
θ(1) n=1
aT (nb ) + f(n) n = bi
: ´ª¢ Ýû¡ ¤¬ ßþ ¤¢. ´¨ üµ±·õ ¼½¬ ¢Àä i î
ù Ú ÷, ε > 0 ´ Â þ¢ Ö õ ü Ì ã ýÂ f(n) = O(nlogab −ε) Â ð (1
.T (n) = Θ(nlogab )Ýþ¤¢
.T (n) = Θ(nlogab log n)) ùÚ÷ f(n) = Θ(nloga
b )Âð (2
www.Bshams.ir
www.Bshams.ir
33 (MASTER THEOREM) ü¨¨ Ìì .3.2
üÌã ý  ðø ε > 0 ´  þ¢ Ö õ üÌã ý , f(n) = Ω(nlogab +ε)  ð (3
Ýþ¤¢ ùÚ÷ af(n/b) ≤ cf(n) ݪ µª¢ n ï¤Ã Âþ¢Öõ ø c < 1 ´ Âþ¢Öõ.T (n) = Θ(f(n))
:±:Ýî üõ ù¢Ôµ¨ 1 Ýó ¥ (1)Τ üþ¥ ¤ ý 2 Ýó ¢¤õ ¥ õ
: Ýþ¤¢ ñø ¢¤õ ýÂ
T (n) = Θ(nlogab ) + O(nloga
b ) = Θ(nlogab ),
: 2 ¢¤õ ý ø
T (n) = Θ(nlogab ) + Θ(nloga
b log n) = Θ(nlogab log n),
: 3 ¢¤õ ý ø
T (n) = Θ(nlogab ) + Θ(f(n)) = Θ(f(n)),
:Âþ¥f(n) = Ω(nloga+ε
b )
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 34
.Àî Û ¤ Âþ¥ ó¢ãõ : ñ·õT(n)=
1 n=13 T (n
2) +√
n else
(Ìì ñø ´ÞÆì §¨ Â): Ûf(n) =
√n = n
1
2 ∈ O(nlog 3
2−ε) a = 3 , b = 2
⇒ T (n) ∈ Θ(nlog 3
2)
.Àî Û ¤ Âþ¥ ó¢ãõ : ñ·õT(n)=
0 n=12T (n
2) + n− 1 else
(Ìì ôø¢ ´ÞÆì §¨ Â): ÛT (n) = 2 T (n
2) + n− 1
f(n) = n− 1 ∈ Θ(n) a = 2 , b = 2
Θ(n) = Θ(nlog 2
2(log n)0) ⇒ T (n) ∈ Θ(n(log n)0+1)
⇒ T (n) ∈ Θ(n log n)
.Àî Û ¤ Âþ¥ ó¢ãõ : ñ·õT (n) =
1 n=13 T (n
2) + n2 else
(Ìì ô¨ ´ÞÆì §¨ Â): Ûf(n) = n2 ∈ Ω(nlog 3
2+ε) a = 3 , b = 2
a f(nb ) = 3 (n
2)2 ≤ δ n2 ⇒ δ = 4
5
⇒ T (n) ∈ Θ(n2)
.Àî Û ¤ Âþ¥ ó¢ãõ : ñ·õT (n) =
c n=12 T (n
2) + log n! else
: Ûf(n) = log n! ∈ Θ(n logn) a = b = 2
Θ(n logn) = Θ(nlog 2
2(logn))
⇒ T (n) ∈ Θ(n (logn)1+1) ⇒ T (n) ∈ Θ(n (logn)2)
www.Bshams.ir
www.Bshams.ir
35 û ݵþ¤Úó Ãó÷ .4.2
û ݵþ¤Úó Ãó÷ 4.2üþþ Û¬
ø¢ ¤ õ÷ ãÎì ×þ þ ݵþ¤Úó ×þ Âð.Àª üõ üþþ Û¬ , Û¬ ßóø ý ¤ t2 öõ¥ ýÂÚþ¢ ø t1 öõ¥ üØþ î ù¢Þ÷ ý¥¨ ù¢ Óܵ¿õ Ûت¤¢ ýÂb ݵþ¤Úó ý¥¨ ù¢ î üãõ ßþÀ.t1 ∈ θ(t2) ùÚ÷ Àª µª¢ ¥÷
.¢¤À÷ ݵþ¤Úó üð¤Ã ý±Âõ
ý¤Áð °Â Û¬¥÷  ý ¤ t2öõ¥ ýÂÚþ¢ ø t1 öõ¥ üØþ î Àª õ÷Â Ø ø¢ p2, p1Â𤢠,Àª µªÀ÷ Ýû  ü±÷  ºû õ÷Â Ø ø¢ ßþ ö  ùøä ,Àª µª¢
. ´¨ t1 + t2 ÂÂ p1, p2 üóµõ ýÂ ýÂ ô¥ öõ¥ ´ó ßþ
t1 + t2 ∈ θ(maxt1, t2)
×Þ ¤µ¨¢ Û¬ÝÆÖ ÂµØî ýà ¤Ãê ´¿¨ ¼Î¨ ¤¢ î ´¨ ý¤µ¨¢ ×Þ ¤µ¨¢ ÂûüõÀÖõ ¤µ¨¢ ß»Þû ø .´¨ θ(1) ¥ ¤µ¨¢ ßþ ý öõ¥ ,¢ª üÞ÷θ(1) ù¥À÷ ü÷õ¥î Àþ üõ ¢ ×Þ ¤µ¨¢ üûµõ ¢Àã °î ¥
.À÷¤¢ ¥÷
: ü÷õ¥ Ãó÷
:while ÖÜ Ãó÷i← 1
while (i <= m)
p(i)
i← i + 1
öÂî ×þ Ýû¡ üõ ,Àª ݵþ¤Úó ý ý ô¥ öõ¥ L Àî Âê1: Ýî üõ ÛÞä °Â ßþ .Ý Ýµþ¤Úó ýÂ
L ≤ O(1) + i← 1 ýÂO((m + 1)× 1) + ÆþÖõ ýÂO(mt) + û p(i) ô¹÷ ýÂO(m) + i← i + 1 ýÂ ýÂ
×þ ¥ µ±ó).p(i) ∈ O(t) üãþ.Àª t, p(i) ÃþÞµõ ýû ý üþ öÂî ×þ Àî Âê 1
(Àã üþ
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 36
O(m) while goto ÛÞä ýÂ⇒ L < O(2+ 3m + mt)⇒ L ∈ O(max1, m, mt)
ôÀî ºû ö üÞ÷ øÀµÆû Ýúõ ýÂð ÝÞþÃîõ ßþ à ¨ Âûî ¢Þ÷ Àþ.¢Âî éÁ ¤
öÂî ×þ i Âû ý ¤¬ ö ¤¢ Àª ¢ þ¥ û p(i) ý ü÷õ¥ üðÀî Âð öõ¥ ¤¬ ö ¤¢ Ýõ ti ¤ üþ öÂî ßþ Âð ,ù¢Âî ±¨½õ¤ p(i) üþ
:´¨ Âþ¥ ¤¬
L ∈ O
(max1, m,
m∑
i=1
ti
)
:for ÖÜ Ãó÷öõ¥ ßþ ,¢ª üõ ý¥¨ù¢ while À÷õ ¤Ãê ´¿¨ ¼Î¨ ¤¢ for ¤µ¨¢ Âû
.´¨ while ÖÜ ýÂ öõ¥ Û·õ for ÖÜ ýÂfor i← 1 to n− 1 do
for j ← i + 1 to n do
write(’*’);
ti =n∑
j=i+1
(1) = n− (i + 1) + 1 = n− i
L ∈n−1∑
i=1
ti =n−1∑
i=1
(n− i) = n(n− 1)− (n− 1)n2
=(n− 1)n
2∈ O(n2)
Âû î , Ûت ¤¢ üܬ ÂÎì ý ýû ù¤µ¨ ¢Àã î ´¨ ßþ Û·õ á®õ ßþ.ÀµÆû n2−n
2 î. Ýþ¤ÞÈ ¤ ÀµÆû O(1) ¥ ôÀî
**
*
**
.........................................
1 2 ................. n12.................n
* *
n2−n2∈ O(n2)
www.Bshams.ir
www.Bshams.ir
37 ý¥¨ °Âõ ýû ݵþ¤Úó .5.2
ý¥¨ °Âõ ýû ݵþ¤Úó 5.2Selection Sort ü¿µ÷ ý¥¨ °Âõ ݵþ¤Úó 1.5.2
procedure Selection Sort( T [ 1· · ·n ])
fori ← 1 to n-1 do
O(1)
minx← T[i]minj← i
Ω(1)
for j← i+1 to n do
O(1)
if(T[j] < minx)thenminx← T[j]minj← j
Ω(1)
O(1)
T[minj]← T[i]T[i]←minx
Ω(1)
: ݵþ¤Úó öÂî ±¨½õ
L ≤n−1∑i=1
(O(1) +n∑
j=i+1
O(1)) ∈ O(n2)
L >n−1∑i=1
(Ω(1) +n∑
j=i+1
Ω(1)) ∈ Ω(n2)⇒ L ∈ Θ(n2)
.¢¤À÷ û ý¢ø¤ø üϱ¤ Âöõ¥ ý¥¨ù¢ á÷ ßþ¤¢
Bubble Sort ü± ý¥¨ °Âõ ݵþ¤Úó 2.5.2
Procedere Bubble Sort(T[1..n])
for i← 1 to n-1 do
for j ← i+1 to n do
if(T [j] < T [i]) then
swap(T [i], T [j])
°Âõ¤¢ î üó ¤¢ ´¨ n−1 ÈÞû ü¿µ÷ ý¥¨ °Âõ¤¢ û üþ¹¢ÀãöÂî ßþ .´¨ n(n−1)
2´ó ßþÂÀ ¤¢ ø 0 ´ó ßþµú ¤¢ ü± ý¥¨
. ´¨ Ω(1) ö ßþ öÂî ø O(n2) ݵþ¤Úó ßþ ý
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 38
Insertion Sort ü¤¢ ý¥¨ °Âõ ݵþ¤Úó 3.5.2
Procedere Insertion Sort(T[1..n])
for i← 2 to n do
x← T [i]
j← i-1
while (j > 0 && T [j] > x)
T[j+1] ← T[j]
j −−
T[j+1] ← x
Ω(n) ¥ ݵþ¤Úó ßþ öÂî Àª false ÈÞû while ¯Âª Âð ݵþ¤Úó ßþ ¤¢ü¤¬ Å. Àª üõ
n∑i=2
(O(1) + O(i)) ∈ O(n2) ¤¬ ö ý öÂî ø´ó ßþµú ¤¢ ¤ ݵþ¤Úó ßþ ¤Ñõ ßþÀ. ¢¤¢ üÚµÆ ý¢ø¤ø á÷ î ´¨
. ÝþÞ÷ üõ ü¨¤Â ͨµõ ´ó ø ´ó ßþÂÀ
(Best Case Analysis) ´ó ßþµú Ãó÷
Ìä Âû ¢ø¤ø ´ó ßþ ¤¢ ,Àª °Âõ þ¤ î Àû¢ üõ ¤ ü÷õ¥ ´ó ßþµú¤¢ ¢ª  Àþ±÷ while ÖÜ üãþ .¢ª ¤¢ ´ãìõ öÞû ¤¢ Ìä ö Àþ ÀþÀݵþ¤Úó ý öõ¥ ¹µ÷ ¤¢ ,´¨ O(1) ¥ while ¯Âª ÆþÖõ öõ¥ ´ó ßþßþ ý ßþ öÂî ×þ üêÂÏ ¥ .¢ª üõ  ¤ n-1  þ¥ ¢ Àû¡ O(n) ¥
.Àª üõ θ(n) ¥  öõ¥ ¹µ÷ ¤¢ ,´¨ ù¢ Ω(n) ݵþ¤Úó
(Worst Case Analysis) ´ó ßþÂÀ Ãó÷
ÀþÀ ÌäÂû ¢ø¤ø ¤¬ ßþ ¤¢ Àª ùÀª °Âõ üóøÃ÷ ¤¬ û ù¢¢ Âðwhile ¤µ¨¢ ý öõ¥ Ω(i) ù¥À÷ ¹µ÷ ¤¢ .´¨ ¥÷ ÆþÖõ i (ôi Ìä Û·õ)üêÂÏ ¥ ø ¢ Àû¡ Ω(n2) ݵ þ¤Úó ßþ ý ý ô¥ öõ¥ Å.Ýþ¤¢ ¥ ÷¥ ݵþ¤Úó ý öõ¥ ¹µ÷ ¤¢ ´¨ O(n2) ݵþ¤Úó ý ý üþ ÓÖ¨
.¢ Àû¡ θ(n2)
www.Bshams.ir
www.Bshams.ir
39 ý¥¨ °Âõ ýû ݵþ¤Úó .5.2
(Average Case Analysis)ͨµõ ´ó Ãó÷
üþú÷ ´ãìõû ÆþÖõ ¢Àã
i i-1 i-2 ..... 1
1 2 3 ..... i
E(x) =∑
x∈X
x× f(x) ü®þ¤ Àõ
.Àµê üõ ÷¡ ×þ ¤¢ x î üóÞµ: f(x) = 1
i
T[1..i] þ¤Âþ¥ ¤¢ °¨õ ´ãìõ ¤¢ ô i ÂÊä ¤¢ ý ô¥ öõ¥ ͨµõ : ci
ci =i∑
k=1
k × 1
i=1
i
i∑
k=1
k =1
i× i(i + 1)
2=
i + 1
2
: ´¨  ý¥¨ °Âõ ݵþ¤Úó ý ý ô¥ öõ¥ ͨµõ ¹µ÷ ¤¢n∑
i=2
ci =n∑
i=2
i + 1
2=1
2(
n∑
i=2
i +n∑
i=2
1) =1
2(n(n + 1)
2−1+ n−1) = θ(n2)
´¨ µú û sort Ö ¥ insertion sort ¤µê¤ ´¨ Ýî û ù¢¢ ¢Àã î üõÚûüÞ÷ øÀµê üõ ëÔ Âþ¢ üÜ¡ ´ó ßþµú ö Àª ¢þ¥ û ù¢¢ ¢Àã üµìø üóø
.Àª °¨õ À÷. ´¨ 1n! ´ó ßþµú î ´¨û ´ó Ûî n!
Pigeon hole Sort ý±î ÷ ý¥¨ °Âõ 4.5.2
u üãþ °Âõ÷ ýþ¤ ÂÊä ßþµð¤Ã ýù¥À÷ ý þ¤ Àµ ý¥¨ °Âõ ßþ ¤¢¤¢ ¤ °Âõ÷ ýþ¤ ¤¢ ÂÊä Âû ü÷øÂê âìø ¤¢ þ¤ ßþ î ,¢ª üõ µêÂð ÂÑ÷ ¤¢üÆþ÷ ¥ °Âõ ¤¬ ¤ óø ýþ¤ þ¤ ßþ ýø¤ ¥ ų¨.¢¤¢ üõ ùÚ÷ ¢¡öÞû üãþ û ü÷øÂê âÞø ´¨û ü÷øÂê  üµ±õ ý¥¨ °Âõ ßþ Å. Àî üõ
. ´¨û ù¢¢ Ûî ¢Àã  u ¬ä áÞ¹õ
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 40
Procedure pigeon hole sort(T[1..n])
let m = maxT [i] T [i] ∈ Z>0, 1≤ i ≤ n
array u[1..m]
for i← 1 to m do // θ(m)
u[i] ← 0
for i ← 1 to n do // θ(n)
k← T[i]
u[k]++
k← 1
for i← 1 to m do
while u[i] 6= 0 do
T[k]← i
u[i]−−k++
: ݵþ¤Úó Ãó÷ ¤ m+1 ù¥À÷ for ýÖÜ ø ¤
n∑i=1
(u[i] + 1) ù¥À÷ for ÖÜ ¤¢ while
: Ýþ¤¢ ݵþ¤Úó ¥ ´ÞÆì ßþ ý ßþ ,¢¢Âð üõm∑
i=1
(u[i] + 1) =m∑
i=1
u[i] +m∑
i=1
1 = n + m
.Àª üõ θ(n + m)¥ ݵþ¤Úó ßþ ý öõ¥ ßþÂ:ÀþÞ÷ ´ì¢ Âþ¥ ñ·õ
2 1 3 2 1 2 5 3 4 2 5
2 4 2 1 2
11 2 2 2 2 3 3 4 5 5
u
T
0 0 0 0 0u1 2 3 4 5
1 2 3 4 5
m=5
T︸ ︷︷ ︸ ︸ ︷︷ ︸︸ ︷︷ ︸ ︸ ︷︷ ︸1 ø¢ 2 ¤ú 3 ø¢ 5 ø¢?
4 üØþ
°Âõ÷ þ¤
ùÀª °Âõ þ¤
www.Bshams.ir
www.Bshams.ir
41 ý¥¨ °Âõ ýû ݵþ¤Úó .5.2
Binary Searchüþø¢ø¢ ý¹µÆ 5.5.2
Binary Search (A, temp)left = 0;
right = lenght(A)-1;
while (left< right) do
middle= (left+right) / 2;
if (temp > A[middle])
left= middle + 1;
else
right= middle-1;
return left;öØõ öÀªÀ ¤¬ ¤¢. ÀþÞ÷ üõ ¹µÆ A ýþ¤ ¤¢ ¤ temp ݵþ¤Úó ßþ
.À÷¢Âð üõ  ¤ Àª ´¨ ¤Âì temp î üþ öÀÈ÷ À ¤¬ ¤¢ ø ö:Binary Search ý öõ¥ ±¨½õ
i← left, j ← right, i = 0, j = n− 1.¢ª ´êþ ö ¤¢ temp ´¨ ¤Âì î ´¨ ýþ¤ ñÏ d
d = j − i + 1 = n− 1− 0+ 1 = n k = middle = i+j2
¤Áð ¥ Å ,Àª if ¤µ¨¢ ¥ Û±ì middle, right, left Âþ¢Öõ k, j, i Àî ÂêÂþ¢Öõ ý °Â ¤ d, j, iÂþ¢Öõ ø Àû¢ ¤ ´¨ ßØÞõ ´ó ø¢ if ¤µ¨¢ ¥
.ÝþÂð üõ ÂÑ÷ ¤¢ ÀþÀ ýþ¤ Âþ¥ ñÏ ø right, left
• temp ≥ A[middle] ⇒ i = k+1, j = j, d = j− i+1 = j−k = j−( i+j2
) =j−i2
< j−i+12
= d2⇒ d < d
2
• else⇒ j = k − 1, i = i, d = j − i +1 = k −1− i + 1 = i+j2− i = j−i
2<
j−i+12
= d2⇒ d < d
2
.¢¢Âð üõ ÓÊ÷ þ¤ ñÏ ¤ Âû ¤¢ Å
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 42
: Ýþ¤¢ ø¡ ¯Âª ý ñi ≥ j ⇒ j − i ≤ 0⇒ j − i + 1 ≤ 1⇒ d ≤ 1d0 = n d1 < d0
2= n
2d2 < d1
2= n
4· · ·
dk ≤ 1⇒ n2k ≤ 1⇒ n ≤ 2k ⇒ logn
2 ≤ k
⇒ k = dlogn2e ⇒ O (logn
2) üþ öÂî
Binary Insertion Sort ü¤¢ üþø¢ø¢ ý¥¨ °Âõ 6.5.2
Binary Insertion Sort(A[1...n])
for (i = 1; i < n; i + +)
temp= A[i];
left=1;
right=; i
Binary Search algorithm // for array A , temp=A[i], left=1 , right=i
for (j = i; j > left; j −−)
swap(A[j-1],A[j]);
worst case best case average case
insertion sort
Binary insertion sort
O(n2)
O(n2)
O(n2) O(n2)
O(n2)O(nlog n)
: ´ó ßþµú Ãó÷•
n−1∑i=1
blogi+12c =
n∑i=2
blogi2c ' (n + 1)blogn+1
2c+ 2blog(n+1)c+1 + 2
∈ O(nlogn) or
•n∑
i=2
blogi2c ∈ O
(n∑
i=2
logi2
)∈ O
(∫ n
2logx
2 dx)∈ O(nlogn)
www.Bshams.ir
www.Bshams.ir
43 ý¥¨ °Âõ ýû ݵþ¤Úó .5.2
Shell Sort ݵþ¤Úó 7.5.2
void Shell-Sort(int gap,int A[1...n])
while((gap/=2)≥1)
for(i=0;i < length(A);i++)
int j=i;
while((j ≥ gap) && (A[j-gap] > A[j]))
swap(A[j - gap],A[j])
j -=gap;
ų¨ , Ý þ ð üõ ÂÑ ÷ ¤¢ þ¤ ñÏ ù¥À ÷ ý gap À µ Ý µ þ¤Ú ó ß þ ¤¢.À÷¢Âð üõ ÆþÖõ Ýû ܬê ßþ ¬ä ø ¢¢Âð üõ ÓÊ÷ ¤±ä ¤ Âû ¤¢ gap ßþ
:ÀþõÂê ´ì¢ ¢¤õ ßþ ¤¢ üó·õ ¤¬ ¤¢ ø À÷ª üõ ÆþÖõ Ýû 4 ܬê ¬ä þ¤ ¨ ¥ Àµ ñ·õ ßþ ¤¢.À÷ª üõ ä Ýû 1ø 4 ø Ýû 6 ø 7 ý Å ,À÷¢Âð üõ ¹ Ýû ôøÃóÝû 2 ýܬê ñø ¥ þ¤ ¬ä ù¤ø¢ Àþ ø ùÀª ÓÊ÷ ܬê ñÏ Å³¨Ýû 8 ø 6 ų¨ ,À÷ª üõ ¹ Ýû 1ø 2 Àµ ´ÞÆì ßþ ¤¢, À÷ª ÆþÖõ ¡ üó ø 5 2 °Â ßÞû ø ¢ÂþÁ üÞ÷ ¤¬ üþ¹ ø ùÀª ÆþÖõ´ó ßþ ¤¢ î Ýþ¢Âð üõ ¤¡ ݵþ¤Úó ¥ ø ¢ª üõ µÞî ×þ ¥ ܬê Øþ
. ´¨ ùÀõ ¤¢ ùÀª °Âõ ¤¬ þ¤
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 44
2 7 4 8 5 6 1 10
Len=8=gap
︸ ︷︷ ︸︸ ︷︷ ︸
︸ ︷︷ ︸︸ ︷︷ ︸
2 6 71 48 5 10
gap=4
gap=2︸ ︷︷ ︸ ︸ ︷︷ ︸ ︸ ︷︷ ︸︸ ︷︷ ︸ ︸ ︷︷ ︸ ︸ ︷︷ ︸
︸ ︷︷ ︸ ︸ ︷︷ ︸︸ ︷︷ ︸ ︸ ︷︷ ︸
︸ ︷︷ ︸︸ ︷︷ ︸
1 2 547 86 10 gap=1︸︷︷︸ ︸︷︷︸
2 6︸︷︷︸ ︸︷︷︸4 7︸︷︷︸ ︸︷︷︸
5 8︸︷︷︸︸︷︷︸4 6 ︸︷︷︸
5 7︸︷︷︸5 6
1 2 4 5 6 7 8 10 gap=1
2
. ¢È÷  ôø¢ while î ´¨ üõÚû öõ¥ ßþµú
best case worst case average case
shell-sort n log n n1.25n1.5
üÞ÷ ýÀ÷ ´Æó ¤ Ýµþ¤Úó ßþ.À÷¤¢ üÚµÆ gap ùÀõ ´¨À ¢Àä. ¢Þ÷ ý¥¨ ù¢ ö
www.Bshams.ir
www.Bshams.ir
45 ý¥¨ °Âõ ýû ݵþ¤Úó .5.2
Bucket Sort1 ݵþ¤Úó 8.5.2
unsighned const m=max
void Bucket-Sort1(int A[ ],int n)
int buckets[m];
for (int i=0;i<m;i++)
buckets[i]=0;
for(i=0;i< n;i++)
++buckets[A[i]];
for(int j=0,i=0;j< m;j++)
for(int k=buckets[j];k>0;- - k) //m−1∑j=1
buckets[j] = n
A[i++]=j;
O(n+m) ¥ à ÷ ö ý öõ¥ ø ´¨ Pigeon hole sort öÞû ݵþ¤Úó ßþ.Àª üõ
2 3 4 5 1 2 1
⇓0 2 2 1 1 1
⇓1 1 2 2 3 4 5
Bucket Sort2 ݵþ¤Úó 9.5.2
ýû ù¢¢ ý¥¨ °Â õ ýÂ î ´¨ Bucket-Sort ¥ ÂÚ þ¢ üä ÷ Ý µ þ¤Ú ó ß þ. ´¨ °¨õ,À÷ùÀª âìø [0,1) ù¥ ¤¢ î üê¢Ê
Bucket-Sort2(A)
n ← [A]
for i ← 1 to n do
insert A[i] into list B[bnA[i]c]for i ← 0 to n-1 do
sort list B[i] with insertion sort
concatenate the list B[0],B[1],...,B[n-1] together in order
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 46
.78.17.39.26.72.94.21.12.23.68
12
10
3456789
A B
9
0- ---
--
-
-
-
-
.78.72
.17.12
.39.26.23.21
.68
.94
Bin Sort ݵþ¤Úó 10.5.2
for(int i=0;i<m;i++) //O(m)
bin [i]= -1;
for(int i=0;i < n;i++)
bin[a[i]]=a[i]; //O(n)
j=0;
for(int i=0;i < m;i++)
if(bin[i]!= -1) //O(n+m)
a[j]=b[i];
j++;
ݵþ¤Úó ßþ ¤¢ î ¢Þ÷ Àþ. ´¨ O(m + n) ¥ ݵþ¤Úó ßþ ý öõ¥Àþ ݪ µª¢ Ýû ý¤ÂØ Â¬ä Ýû¿ Âð, Àª À÷ üÞ÷ ý¤ÂØ Â¬ä
. ÝþÂÚ ÂÑ÷ ¤¢ ýÀ÷ ´Æó ×þ þ¤ ý÷¡ Âû ýÂ
3a:
-1 1 2 3 -1 -1 -1 7
1 2 3 7 8a:
bin: 8
7 2 8 1
www.Bshams.ir
www.Bshams.ir
47 ý¥¨ °Âõ ýû ݵþ¤Úó .5.2
Counting Sort ݵþ¤Úó 11.5.2
counting-sort
for i←0 to k do k is maximum of elements
c[i]←0
for j← 1 to n do
c[a[j]]←c[a[j]]+1;
for i← 2 to k do
c[i] ← c[i]+c[i-1];
for j ← n downto 1 do
b[c[a[j]]] ← a[j];
c[a[j]] ← c[a[j]] -1 ;
.Àª üõ θ(n + k) ¥ ݵþ¤Úó ßþ ý öõ¥¥÷ ÆþÖõ ¢Àã log n! Ûì À ÆþÖõ üµ±õ ý¥¨ °Âõ ݵþ¤Úó Âû : µØ÷
. ¢¤¢ ¥÷ ÆþÖõ dlog n!e ÛìÀ ´ó ßþÂÀ ¤¢. ¢¤¢dlog n!e ∈ Ω(n log n)
ßþ õ ,Àª üõ θ(n log n)¥ ´ ó ß þ À ¤¢ ý¢ø¤ø á ÷ ¥ ÛÖ µÆ õ Å.¢ÂþÁ³ ¤¬ Ã÷ θ(n log n)¥ µÞî ü÷õ¥ ¤¢ À÷ üõ ݵþ¤Úó
Radix sort ݵþ¤Úó 12.5.2
stable á÷ ¥ ݵþ¤Úó ßþ.¢ÂþÁ üÞ÷ ¤¬ ý ÆþÖõ ¬ä ß Ýµþ¤Úó ßþ ¤¢Â¬ä ų¨. ÝþÞ÷ üõ °Âõ öØþ °Â ¤ ¬ä Àµ ©ø¤ ßþ¤¢ .´¨ sort
üõ °Âõ öÚû¢ °Â ¤ ¬ä ñ . ÝþÞ÷ üõ üܬ þ¤ ¢¤ø °Â ¤Ýû¢ üõ õ¢ °Â ßÞû ø ÝþÞ÷ üõ þ¤ ¢¤ø ø ÝþÞ÷ üõ ´Æó ¢¤ø ø ÝþÞ÷·îÀ α(n) î Àª üõ O(nα(n)) ¥ ݵþ¤Úó ßþ ý öõ¥.¢¢Âð °Âõ þ¤
. ´¨ ¢Àä n ß ùÀª ÂûÒ ôì¤ ¢Àã: Àî ´ì¢ Âþ¥ ñ·õ
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 48
0123456789
25 13 43 124 313 513 5 1 999 96 205
531 1
13 43 31312425 5 20596
999
- -
- - -
- - --
-
-
. ÝþÞ÷ üõ üܬ þ¤ ¢¤ø Âþ¥ °Â ¤ ¬ä ñ531,1,13,43,313,24,25,5,205,96,999
. Ýþ¥¢Â üõ ý¥¨ °Âõ ýõ¢ ø
üµÈ𥠢ãõ ( ö¢Âî Û) ö¢Âî Trace ÛÞä 6.2
•
,T (n) = T (n5) + T (7n
10) + θ(n)
,T (1) = C
.Àª üõ θ(n) ö Èþ¤ î Ýþ¥¨ üõ ´È𥠴¡¤¢ ×þ ¤Ñõ ßþ ýÂ
θ(n)
O(n5) O(7n
10)
O( n25
) O(7n50
) O(7n50
) O(49n100
)
¤¬ û ´¡¤¢ Âþ¥ Þû üãþ ´Æ÷ ùÀ÷ø ¤ ßþ ö¤Öµõ ´¡¤¢ ´¡¤¢Æ ¤ O Àþ Àª±÷ ö¤Öµõ ´¡¤¢ Âð âìõ ßþ ¤¢ .Àþ üÞ÷ ßþ öÆØþ
. Ýî
www.Bshams.ir
www.Bshams.ir
49 üµÈ𥠢ãõ ( ö¢Âî Û) ö¢Âî TRACE ÛÞä .6.2
(7
10
)i
n ≤ 1 =⇒ n ≤(10
7
)i
=⇒ logn10
7
≤ i =⇒ i = dlogn10
7
e =⇒
T (n) ≤
dlogn10
7
e∑
i=0
(9
10
)i
n =1−
(9
10
)logn10
7
+1
1− 9
10
51
3 >10
7=⇒ logn
51
3
> logn10
7
=⇒ 3 logn5 > logn
10
7
=⇒
T (n) ≤
dlogn10
7
e∑
i=0
(9
10
)i
n ≤3 logn
5∑
i=0
(9
10
)i
n
.Àî Û ¤ Âþ¥ üµÈð¥ ó¢ãõ
• T (n) = T (n3) + T (2n
3) + θ(n)
θ(n)
θ(n3)
θ(2n9
)θ(n9)
θ(2n3
)
θ(2n9
) θ(4n9
)
(2
3
)i
n ≤ 1 =⇒ n ≤(3
2
)i
=⇒ logn3
2
≤ 1 =⇒ i =⌈logn
3
2
⌉
=⇒ T (n) ≤
⌈logn
3
2
⌉
∑
i=0
n ≤ O(n logn3
2
)
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 50
Catalan Number öî ¢Àä  ý¤Áð 7.2
:1ùÂð n üþø¢ø¢ öµ¡¤¢ ¢Àã ±¨½õ
¹þ ¤¢.¢¤À÷ ý¤ø¢ þ ìÏø ´¨ À±Þû î ,¨ü ´¨ üêÂð ´¡¤¢ ×þ. Ýî üõ ü¨¤Â ¤ ¤¢ Èþ¤ üþø¢ø¢ öµ¡¤¢
Ýþ ùÀÈî ùÂþ¢ ö¤ø¢ î ü¨¤ ú÷¤¢ î Ý üõ üþø¢ø¢ ´¡¤¢ø¢ 1 Ûت ¤¢( ¡ª ô÷ ) ñþø¢Â·îÀ §¤ Âû ¥ Øþ Ûó¢ ¤ úµ¡¤¢ ßþ.´¨ Èþ¤ éÂãõ
.Àõ÷ üõ üþø¢ø¢,À÷ùÀª ݨ¤ ßþ ´Þ¨
¥ î ü³ ¡ª îãõ ßþÀÀ÷ °Âõ,¤¢ Èþ¤ üþø¢ø¢ öµ¡¤¢ ßþ «Ê¿ÂÑ÷ ¤¢ Àþüõ ßþ §¤ öÞû¥ îüµ¨¤ ¡ª ¥ øÔµõÀþüõ ßþ §¤ßØÞõ ¤¢Èþ¤ °Âõ üþø¢ø¢ ´¡¤¢ ¸,§¤ ¨ ¢ø ´ó ¤¢.¢ª üõ µêÂð×þ ý¤¢Â¡ üþø¢ø¢ ´¡¤¢ ¤ú,Àª±÷ Ýúõ °ÂÂð) ùÀª ù¢¢ öÈ÷ ø¢ Ûت¤¢
(.À÷¤µ¡¨
n ≥ 0,§¤ n ¯Âõ ¤¢ Èþ¤ °Âõ üþø¢ø¢ öµ¡¤¢ ¢Àã,bn ©¤Þªõ éÀû´¨¢ ý Àª ´¨¢ ¤¢ 0 ≤ i ≤ n ý¥ bi  þ¢ Öõ Ø þ Âê . ´¨Âþ¥ ¨ Ûت Û·õ î Ýî üõ ø ¿µ÷ Èþ¤ öä ¤ ü¨¤,bn+1ö¢¤øÈþ¤ °Âõ üþø¢ø¢)ýúµ¡¤¢ Àþ üõ ßþ Èþ¤ ´¨¤ø ² ¥ î üþû¤µ¡¨Âþ¥ ¤ µØî ýúµ¡¤¢ ßþ.´¨ nú÷ ýú¨¤ ¢Àã î ÀµÆû ýµØî (¤¢üú ´¡¤¢ Âþ¥,ßØÞõ ýúµ¡¤¢Âþ¥ ßþ ÜÞ ¥.Àõ÷ üõ øÂÔõ ´¡¤¢ ýúµ¡¤¢
b0 = 1 Ýþ¤¢ ö ýÂ î ´¨
ýÀóÞþÂð µÆÆð ®þ¤ µî ¥ µêÂð ± 1
www.Bshams.ir
www.Bshams.ir
51 CATALAN NUMBER öî ¢Àä  ý¤Áð .7.2
1 Ûت
1 2 3 4 5
2 Ûت
3 Ûت
ýÀ Ö±Ï ´¡¤¢ Âþ¥ ø¢ ßþ ¤¢ ö üõ ¤ §¤ n ÷Ú î Ýî üõ ü¨¤Â ×þ.¢Âî
îÀû¢ üõ ¹µ÷ Âõ ßþ.´¨¤ ´Þ¨ ¤¢ §¤ n,¢¤¢¤Âì ² ´Þ¨ ¤¢ §¤ 0 (1)
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 52
.À÷b0bnÂÂÀ÷ª üõ ù¢ÂÞª bn+1¤¢ î üþû¤µ¡¨Âþ¥ Þû
´¡¤¢ b1bn−1 î,´¨¤ ´Þ¨¤¢ §¤ n − 1,¢¤¢ ¤Â ì ² ´Þ¨ ¤¢ §¤ 1 (2)
.Àû¢ üõ ´¨¢ §¤ n + 1,¤¢ Èþ¤ °Âõ üþø¢...
´ó ßþ ¤¢ î À÷¤¢ ¤Âì ´¨¤ ´Þ¨ ¤¢ §¤ n− i,² ´Þ¨ ¤¢ §¤ i (i+1)
.´¨ bibn−i ÂÂ bn+1
...
¤¬ ßþ ¤¢,´Æ÷ ´¨¤ ´Þ¨¤¢ ü¨¤ ºû ø ´¨ ² ´Þ¨ ¤¢ §¤ n (n+1)
. ´¨úµ¡¤¢ ¥ bnb0  bn+1
n ≥ 0Âþ¢Öõ Þû ý¥ ,ßþÂ
bn+1 = b0bn + b1bn−1 + b2bn−2 + · · ·+ bn−1b1 + bnb0
ø
∞∑
n=0
bn+1xn+1 =
∞∑
n=0
(b0bn + b1bn−1 + · · ·+ bn−1b1 + bnb0)xn+1 (1)
ùÚ÷ , Àª a0, a1, a2, · · · ó±÷¢ ý Àóaõ â f(x) =∞∑
i=0
aixi Âð î Ý÷¢ üõ
üãþ , ©¢¡ a0, a1, · · · ó±÷¢ Ç» , [f(x)]2
a0a0, a0a1 + a1a0, a0a2 + a1a1 + a2a0, · · ·
, a0an + a1an−1 + a2an−2 + · · ·+ an−1a1 + ana0
b0, b1, b2, · · · Àóaõ â f(x) =∞∑
n=0
bnxnÀîÂê ×þ .Àî üõ Àó ¤¤¬ ¤ (1) ó¢ãõ .´¨
(f(x) − b0) = x
∞∑
n=0
(b0bn + b1bn−1 + · · ·+ bnb0)xn = x[f(x)]2
www.Bshams.ir
www.Bshams.ir
53 CATALAN NUMBER öî ¢Àä  ý¤Áð .7.2
. ÝÆþ÷ üõ
: À÷¨¤ üõ Âþ¥ ôø¢ ¤¢ ó¢ãõ ¤ õ ó¢ãõ ßþ
x[f(x)]2 − f(x) + 1 = 0
Å
f(x) =[1±
√1− 4x]
(2x)
õa√1− 4x = (1−4x)1/2 =
(1/2
0
)+(1/2
1
)(−4x)+
(1/2
2
)(−4x)2 + · · ·
: ´¨  n ≥ 1, xn °þ® ö ¤¢ î
(1/2
n
)(−4)n =
(1/2)((1/2) − 1)((1/2) − 2) · · · ((1/2)− n + 1)n!
(−4)n
= (−1)n−1 (1/2)(1/2)(3/2) · · · ((2n− 3)/2)n!
(−4)n
=(−1)2n(1)(3) · · · (2n− 3)
n!
=(−1)2n(n!)(1)(3) · · · (2n− 3)(2n − 1)
(n!)(n!)(2n − 1)
=(−1)(2)(4) · · · (2n)(1)(3) · · · (2n− 1)
(2n− 1)(n!)(n!)=
(−1)(2n− 1)
(2n
n
)
ý üÔõ ýÂþ¢Öõ , ¤¬ ßþ Âè ¤¢ ; Ýî üõ ¿µ÷ ¤ üÔõ ñØþ¢¤ f(x)¤¢Å ; Ýî üõ À û bn
f(x) =1
2x
[1−
[1−
∞∑
n=1
1
(2n− 1)
(2n
n
)xn
]]
¤¢ xn+1 °þ® ÓÊ÷ , f(x) ¤¢ xn °þ®, bn ø∞∑
n=1
1
(2n− 1)
(2n
n
)xn
www.Bshams.ir
www.Bshams.ir
üµÈð¥ ýû ݵþ¤Úó .2 ÛÊê 54
î üÞÆì ,´¨
bn =1
2
[1
2(n + 1)− 1
](2(n + 1)(n + 1)
)=
(2n)!(n + 1)!(n!)
=1
(n + 1)
(2n
n
)
(1894 − 1814) öî ö¦¤ø üØþÄÜ öÀ®þ¤ Æõ î ¤ bn ¢ÀäÛ¡¢ ý ú û¤ ¢À ã ß ã ¤¢ ¤ ú ÷ ö î .À õ ÷ ü õ ö î ¢À ä , À ÷ö î ñø ¢Àä ´Ôû . ´¨ ù¢Â ¤ î x1x2x3 · · ·xn ¤ ± ä ß µªÁ ðà µ ÷Â
.ÀµÆû b6 = 132 ø b5 = 42, b4 = 14, b3 = 5, b2 = 2, b1 = 1, b0 = 1
www.Bshams.ir
www.Bshams.ir
3 ÛÊê
ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þû
û ù¢¢ öÞµ¡¨ ¥ ü¡Â .3
ù ¡£ Ñ ê ¥ ü µ Þ Æ ì ¤¢ ü µ Æ þ ü ä Ï ÷ ð  û î ü þ ¹ ÷ ¥üÔܵ¿õ ñت Ñê ¤¢ À÷ üõ, ÀµÆ÷ á÷ ×þ ¥ û ù¢¢ fõøÃó Øþ ø ¢¢Âð ýù¢¢ Âû ùøä ø .À÷ª üÈîø üÔܵ¿õ ñت ß»Þû ø À÷ª ù¡£. Àû¢ «Êµ¡ ¢¡ ¤ Ñê ¥ üøÔµõ ñÏ ´¨ ßØÞõ ö üð¤Ã öÃõ üêÂãõ ¤ Óܵ¿õ á÷ Ýþ¤¢ î ýù¢¢ ¤µ¡¨ ݵÆû ¤±¹õ ßþ°îÂõ ø ù¢¨ ýù¢¢ á÷ Ûت ø¢ Ý÷ üõ ¤ ýù¢¢ á÷ üÜî¤Ï . ÝþÞ÷
. ÝþÞ÷ ýÀ µ¨¢üÆþ÷ õ÷  ýû ö¥ î ÀµÆû üþû ù¢¢ á÷ üÞ þ ù¢¨ ý ù¢¢ á÷.ùÂè ø char, bool ,int:À÷õ ,Àû¢ üõ ¤Âì Â¤î ¤µ¡ ¤¢ ø ù¢Þ÷ ÓþÂã ¤ ö÷
õ÷ ¤ ö÷Â¤î ¢¡ ø ¢ª üõ µ¡¨ Åþ÷ õ÷ ͨ °îÂõ ýù¢¢ á÷. ùÂè ø , struct , union : À÷õ.Àî üõ üêÂãõ
fÖÎõ ýû Ñê ¥ ý¢Àã ¥ î ´¨ ù¢¢ öÞµ¡¨ á÷ ßþ ù¢¨ : þ¤:ÀµÆû öÆØþ ñÏ ø á÷ ÂÑ÷ ¥ î Àî üõ ù¢Ôµ¨ Ýû ¤ø¹õ
x : array [’a’..’z’] of integer
int x[26];
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 56
(Sparse array)§¤³¨ þ¤ 1.3ý¤Áð ¤ÀÖõ ýù½÷ üóø ¢ª ý¤Áð ¤ÀÖõ ´¨ ¤Âì î Ýþ¤¢ ý þ¤ Ýî Âêø À÷ª üÞ÷ ý¤Áð ¤ÀÖõ þ¤ ýû ÷¡ ôÞ fõøÃó üãþ , ´¨ §¤³¨ Ûت ý¤Áð ¤ÀÖõ ¤Ñõ ßþ ý .À÷ª üõ ý¤Áð¤ÀÖõ«¡ ýû÷¡ ¥ ü¡Â ÍÖê´Æ÷ ¤Âì ø ´¨ ï¤Ã þ¤ ñÏ ö , ´Æ÷ üÖÎõ ÂÔ¬ ¤ÀÖõ þ¤ ö¢Âîþ¤ ø¢ ¥ Ýþ¤÷ ¤Ñõ ßþ ý . À÷ª üÈîø ùÀþ ¤¢ þ¤ ýû ÷¡ ôÞû þ¤ ßþ ¯±¤ µú í¤¢ ýÂ. ÝþÞ÷ ù¢Ôµ¨ üܬ ýþ¤ ñÏ Ýû üØÞî
:Àî ´ì¢ Âþ¥ ñ·õ
T
a
b
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
3 11 13
4 8 2 9 U
213j
?
z
, T üãþ üܬ ýþ¤ ý¤Áð ¤ÀÖõ ¤ Âû ¤¢. Ýî üõ ÂÔ¬ ¤ ctr Âçµõ ¤ÀÖõ ÀµÝû¢ üõ ¤Âì T ¥ ý ÷¡ ÅþÀ÷  ¤ a[ctr] ø Ýî üõ ê® ctr Àø ×þßþ . Ýû¢ üõ ¤Âì ctr  ¤ b[ ÅþÀ÷] ß»Þû ø ´¨ ùÀª ý¤Áð¤ÀÖõ î
.¢ÂþÁ üõ ô¹÷ ý¤Áð¤ÀÖõ °Âctr=0 →ctr=ctr+1=1 T[4]=11 → a[ctr]=a[1]=4 b[4]=1
ctr=1 →ctr=ctr+1=2 T[8]=13 → a[ctr]=a[2]=8 b[8]=2
ctr=2 →ctr=ctr+1=3 T[2]=3 → a[ctr]=a[3]=2 b[2]=3
Âþ¥ ¯Âª ø¢ Àþ ÷ þ Ýþ ù¢Âî ý¤Áð ÅþÀ÷ õ ¤ ý ÷¡ Ý÷À Ýû¿ Âð ñ:Àª ¤ÂìÂ
1 ≤ b[i] ≤ ctr , a[b[i]] = i
www.Bshams.ir
www.Bshams.ir
57 üþø¢ø¢ ´¡¤¢ .2.3
. ´¨ ÂÔ¬ ctr î ´¨ ¼®ø ݪ ù¢ÂØ÷ üû¢ §¤¢ ýà Âðý¤Áð¤ÀÖõ õ ¤ T ô 8 ý÷¡ Û±ì ýû þ¤ ¤¢ Ý÷À Ýû¡ üõ ñ·õ öä
. ÷ þ Ýþ ù¢Âîb[8]=2 , 1≤ b[8]≤ 3 ⇒ ݪ ù¢Âî üû¢ ¤ÀÖõ õ ¤ ÷¡ ßþ ´¨ ßØÞõa[b[8]]=a[2]=8 ⇒ Ýþ ù¢Âî üû¢ ¤ÀÖõ õ ¤ ÷¡ ßþ
üþø¢ø¢ ´¡¤¢ 2.3.¢¤¢ À÷¥Âê ø¢ ·îÀ öùÂð Âû î ´¨ ý¤¢ Èþ¤ ´¡¤¢ üþø¢ø¢ ´¡¤¢
.Àµê üõ ëÔ ÂÔ¬ ¼Î¨ ¤¢ ö ýúð ôÞ î ´¨ ýÂþ ´¡¤¢ ×þ : ´¡¤¢×þ áÔ¤ . ´¨ ï ùÂð ö ¥ ÂÆõ ßþµð¤Ã ñÏ : ´¡¤¢ ¥ ùÂð ×þ áÔ¤
.´¨ Èþ¤ áÔ¤ , ´¡ ¤¢ý³¨ ýúóþ ¢Àã ) Èþ¤ ùÂð ö Ü¬ê ¥ ´Æ¤±ä : (Depth)ùÂð ×þ ÕÞä
. (ùÂð ö ùÀªö áÔ¤ Û®Ô ´¨  ùÂð ö ¼Î¨ ùÂð Âû ý :(Level)ùÂð ×þ ¼Î¨
.ùÂð ö ÕÞä ¥ ´¡¤¢: ñ·õ
a
b f
c d e
×þ áÔ¤
ÂÔ¬ áÔ¤
ÂÔ¬ ͨ
×þ ͨ
ø¢ ͨ
N
ùÂð áÔ¤ ÕÞä ͨ
a 2 0 2b 1 1 1c 0 2 0d 0 2 0e 0 2 0f 0 1 1
ø¢ ý¤¢f Öì¢ ö üÜ¡¢ ýû ùÂð ôÞ ùÂð n üþø¢ø¢ ´¡¤¢ ×þ ¤¢ :ñ·õýû ùÂð ÕÞä áÞ¹õ I(T) ø ´¡¤¢ ýû ï ÕÞä áÞ¹õ E(T).Àª üõÀ÷¥Âê
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 58
ö üµÈð¥ Τ ùÚ÷ Àª T(n)= E(T)-I(T)Âð .Àª üõ ´¡¤¢ ßþ üÜ¡¢? ´¨ ôÀî
6
?
?
6
hh+1
T(n) T(n+2)
E(T ) = E(T ′)− h + h + 1+ h + 1
I(T ) = I(T ′) + h
⇒ E(T )− I(T ) = E(T ′)− I(T ′) + 2⇒ T (n + 2) = T (n) + 2
ø¢ f Öì¢ þ À÷¥Âê ºû ö ùÂð Âû î ´¨ üþø¢ø¢ ´¡¤¢ : Ûõî üþø¢ø¢ ´¡¤¢.¢¤¢ À÷¥Âê
î Ýõ÷ üõ ü¨¨ Ûõî ´¡¤¢ ¤ üþø¢ø¢ ´¡¤¢ : ü¨¨ Ûõî üþø¢ø¢ ´¡¤¢) ×þ ¼Î¨ ¥ üþûùÂð ÂÚõÀªÀ÷¥Âê ø¢ ý¤¢ f Öì¢ ö üÜ¡¢ ýû ùÂð ôÞüµÆþ À÷¥Âê ö Àª µª¢À÷¥Âê×þ ¼Î¨ ßþ¤¢ ýùÂð Âð .(¡ üØþ ¼Î¨À÷ùÀõ ö ² ´Þ¨ ¤¢ î ö ¼Î¨ Ýû ýû ùÂð ôÞ ùøä ø Àª ²À÷¥Âê¤Âì ´¨¤ ´Þ¨ ¤¢ î ö ¼Î¨ Ýû ýû ùÂð ôÞ ø Àª µª¢ À÷¥Âê ø¢ Àþ fÖì¢Ýû ôÞ Àª µªÀ÷ À÷¥Âê ý ùÂð Âð ß»Þû ,Àª µªÀ÷ À÷¥Âê üµÆþ À÷µêÂð¼Î¨ ¤¢ û ï ôÞ ´¡¤¢ ßþ¤¢ .Àª À÷¥Âê öøÀ Àþ ö ´¨¤ ýû ü½Î¨
. ´¨ ö¥µõ ÈÞû ´¡¤¢ Å Àû¢ üõ ¤ ×þ þ ÂÔ¬: ü¨¨ Ûõî üþø¢ø¢ ´¡¤¢ ¥ ýÂÚþ¢ ÓþÂã
ø ÝþÂÚ ÂÑ÷ ¤¢ û ï éÂÏ Èþ¤ ¥ ü®Âê ¤Ï ¤  üþø¢ø¢ ´¡¤¢ ×þÂð¥ Âð , Ýû¢ ´±Æ÷ ùÂð Âû ¤ ý¢ã¬ ýû ù¤Þª ´¨¤ ² ¥ ¼Î¨Âû ¤¢
www.Bshams.ir
www.Bshams.ir
59 MAX HEAP ´¡¤¢ .3.3
ü¨¨ Ûõî ¤ Àþ üõ ´¨¢ î üµ¡¤¢ , Ýî éÁ ¤ û ùÂð Àã ý ù¤Þª.Àþð
1
2 3
4
8
5 6 7
9 10 11 12 13 14 15
1
2 3
4 5
ü¨¨ Ûõî üþø¢ø¢ ´¡¤¢
-Àã 6 ¥ éÁ
. ´¨ ü¨¨ Ûõî üþø¢ø¢ ´¡¤¢ ,Ûõî üþø¢ø¢ ´¡¤¢ ¥ ¤Ñõ °µî ü¡Â ¤¢
max heap ´¡¤¢ 3.3°Æ î ù¢¤¡ °Æ ý¢Àä ö ùÂð Âû î ´¨ ü¨¨ Ûõî üþø¢ø¢ ´¡¤¢ÀÜî üóø ´Æ÷ ¢Âê Âʽõ °ÆÂ). ´Æ÷ µØî Ç÷À÷¥Âê °Æ ¥ ¤À. ´¨ þ¤ heap ý¥¨ ù¢ ý ù¢¢ öÞµ¡¨ ßþµú (. ´¨ ¢Âê ÂʽõÝÞþÃîõ ÂÊäÈÞû .ÀµÆû 2i , 2i+1 ýû ÷¡ ¤¢ ô i ÂÊä öÀ÷¥Âê î ý¤Ï,Ã÷ ÝÞõ ÂÊä ö¢Âî À . ´¨ θ(1)¥ ÝÞþÃîõ ö¢Âî À Å , ´¨ þ¤ ¨
.¢Âî × ¤ û ï Àþ ú ö1 · · · bn
2c bn
2c+ 1 · · ·n
︸ ︷︷ ︸dn2e
. (´¨ dn2e û ÆþÖõ ¢Àã)
sift-up ÜÞä.ÀµÆû sift-downø (perculate)sift-up, heap ¤¢ Ýúõ ÜÞä ø¢ý¢Àä µÞî ý¢Àä ¥ ùÂð ×þ °ÆÂ î ¢Âð üõ ¤¬ ø ´¨ ô¥ ü÷õ¥ÂµÞî ý¢Àä ßþÃÚþ ÂµÈ ý¢Àä î ü÷õ¥ sift-down ÜÞäøÀþ Âç µÈ
.¢¢Âð
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 60
procedure alter − heap (T[1..n],i,v)
T[1..n] is a heap ,the value of T[i] is set to v and the heap
property is re-established we suppose the 1 ≤ i ≤ n
x ← T[i]
T[i] ← v
if v < x then sift-down (T,i)
else percolate (T,i)
.....................................................................
procedure sift− down (T[1..n],i)
this procedure sifts node i down so as to re-establish the
heap property in T[1..n] we suppose that T would be a heap if T[i]
were sufficiently large we also suppose that 1 ≤ i ≤ n
k ← i
repeat
j ← k find the larger of node j
if (2j≤ n and T[2j]> T[k])
k ← 2j
if (2j < n and T[2j+1]> T[k])
k ← 2j+1
exchange T[j] and T[k]
if j == k then the node has arrived at its final position
until j = k //O(logn2)
: ùÚ÷ Àª h, heap áÔ¤ø Àª n , heap ýû ùÂð ¢Àã Àî Âê
20 + 21+....+2h−1 < n ≤ 20 + 21+....+2h ⇒ 2h−12−1 < n ≤ 2
h+1−12−1
• n≤ 2h+1-1 =⇒ n+1≤ 2h+1 =⇒ lg(n + 1) ≤ h + 1
⇒ h ≥ lg(n + 1)− 1 =⇒ h=dlg(n + 1)− 1e=blg nc
• n>2h-1⇒ n+1 > 2h ⇒ h < lg n + 1⇒h-1 < lg(n + 1)-1 ≤ h
.´¨ O(logn2) ¥Ýµþ¤Úó öõ¥ Å
www.Bshams.ir
www.Bshams.ir
61 MAX HEAP ´¡¤¢ .3.3
procedure percolate(T[1..n],i)
we suppose that T would be a heap if T[i] were sufficiently small,
we also suppose that 1≤i≤ n the parametr n is not used herek ← i
repeat
j←k
if ((j>1) && ( T[ j2] < T[k]) )
k← j2
exchange T[j] and T[k]
until j=k; //O(log n)
........................................................
function find−max( T[1..n] )
returns the largest element of the heap T[1..n]return T[1]; //θ(1)
........................................................
procedure delete−max(T[1..n])
Delete the rootT[1]←T[n]
sift-Down(T[1..n-1],1) //O(log n)
ÛÞä ø ¢Âð üõ ¤Âì ÂÊä ßóø ý ÂÊä ßþ¡ .´¨ üÖÎõ éÁ, éÁ.¢ª üõ ô¹÷ sift-Down
procedure insert−Node(T[1..n],v)
T[n+1] ← v
percolate(T[1..n+1],n+1) O(lg n)
: heap ´¡¤¢ ´¡¨Procedure slow −MakeHeap(T[1..n])
this procedure makes the array T[1..n] into a heapfor i ← 2 to n do
percolate(T[1..n],i) // O(n log n)
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 62
Procedure MakeHeap(T[1..n])
For i← bn2c DownTo 1 Do
SiftDown(T, i) //O(n)
Heap À÷ üõ O(n) ±Âõ n ñÏ ù¿ó¢ þ¤ ×þ ¥ ݵþ¤Úó : Ìì.¢¥Æ: öûÂ
r+1 ·îÀ ®ø r ¼Î¨ ¤¢ ùÂð ×þ ý SiftDown ݵþ¤Úó ¤¢ Repeat ÖÜ´¡¤¢ ßþ áÔ¤ Âð ñ (.©¢¡ Ýû ¤ ×þ ø Àþüõ ßþ ¤ r) ¢¤¢ ǡ þ¥ ñõÂ ê ¥ ô¥ ýû ´î Ûî ¢Àã Ý þÂ Ú ÂÑ ÷ ¤¢ ¤ K = blogn
2c ¤ Heap
:¢Èõ ±¨½õ.For ÖÜ ¤¢ SiftDown ¤¢ Repeat ÖÜ ýû Ç¡Â ¢Àã :t
t ≤ 2× 2k−1 + 3× 2k−2 + . . . + (k + 1)× 20 ⇒
t ≤ −2k + 2k + 2× 2k−1 + 3× 2k−2 + . . . + (k + 1)× 20 ⇒
t < −2k + 2k+1(2−1 + 2× 2−2 + 3× 2−3 + . . .)⇒
t < −2k + 2k+1∞∑
n=1
n(12)n < −2k + 2k+1 × 2⇒ t < 2k(22 − 1)⇒
⇒ t < 3× 2k ⇒ t < 3n⇒ t ∈ O(n) K = blogn2c ⇒ 2k ' n
1
1−x= 1+ x + x2 + . . . ⇒ 1
(1−x)2= 1+ 2x + 3x2 + . . .
⇒ x(1−x)2
= x + 2x2 + 3x3 + . . . ⇒ x(1−x)2
=∞∑
n=1
nxn
⇒∞∑
n=1
n(12)n =
1
2
(1− 1
2)2
= 2
( ýÜÞø¢ ²û) Binomial Heap 4.3
.´¨ ýÜÞø¢ ýû ´¡¤¢ ¥ ÛÚ ×þ Binomial Heap ×þùÂð n2 ýÂÚþ¢ø ùÂð n1 üØþ î. Ýþ¤¢ ¥÷ heap ø¢ ôè¢ heap ×þ ßµ¡¨ ý : )
(.Àª üõ O(n1+ n2 ) heap ø¢ ßþ ôè¢ öõ¥.¢¤¢
www.Bshams.ir
www.Bshams.ir
63 ( ýÜÞø¢ ²û) BINOMIAL HEAP .4.3
( ý ÜÞø¢ ´¡¤¢ )Binomial Tree 1.4.3
¢¡ Bn−1 Èþ¤ á÷ ßþ ¤¢.¢ª üõ ÓþÂã üµÈ𥠤¬ ´¡¤¢ á÷ ßþ.Àî üõ ê® ´¨¤ À÷¥Âê öä ¤ Bn−1
B0B1 B2 B3
1 1
1
1
1
1
2 3
3
1
n=0Bn=
Bn−1Bn−1¢¡. ÝþÞ÷ üõ ê® ¤
.´¨ (x + y)n ÍÆ °þ® Âþ¥ ;¢ª üõ ùÀõ÷ ýÜÞø¢ ´¡¤¢,´¡¤¢ ßþ
. 2n ´¨  Bn ýû ùÂð ¢Àã •
. 2n−1 ´¨  Bn ýû ï¢Àã •
. ´¨ 2n−1  Bn üÜ¡¢ ýû ùÂð¢Àã •
À÷¤À÷ üìÂê ÕÞä þ ¼Î¨) . (kn
) ´¨  ô k ¼Î¨ ¤¢ Bn ýû ùÂð ¢Àã •( ´¨ ö¤Öµõ ´¡¤¢ Âþ¥
. ´¨ ÂµÈ ÂÚþ¢ ýûùÂðÞû ¥ ùÂð ßþ ¤¢ , ´¨ nÃ÷ Bn Èþ¤ ¤¢ •
Max Binomial Tree 2.4.3
¤À ùbÂð ¢Àä î,Àª ù¢¤¡ °Æ ý¢Àä ýÜÞø¢ ´¡¤¢ ×þ ùÂð Âû Âð.Àþð Max Binamial Tree ×þ ¤ öÀª±÷ Ç÷À÷¥Âê ¥ µØî
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 64
The Merge Of Max Binomial Trees 3.4.3
ù½÷. Àû¢ üõ ¤ Bn+1 ,Max Binomial Tree B′n ø Max Binomial Tree Bn ø¢
ö È þ¤ °Æ ¢Àä î üµ¡¤¢ , ´¡¤¢ ø¢ Âû ß î ´¨ üÜت merge
.Àª Àû¡ ÂÚþ¢ ´¡¤¢ ´¨¤ À÷¥Âê ´¨ µØî.´¨ ´¨¤ À÷¥Âê min ÂÊä ø ¢¤¢ ¢ø ÆþÖõ ÍÖê . ´¨ θ(1)¥ merge ÛÞä
:ÀþõÂê ´ì¢ Âþ¥ ñ·õ
8
7 6 2
3 1 2
.5
+
9
7 6
4
4
3 2
1
⇒
9
7 6 4 8
4 3 2 7 6 2
1 3 1 2
.5
Binomial Heap 4.4.3
. ´¨û Binomial Tree ¥ ý äÞ¹õ H ,Binomial Heap ×þ
www.Bshams.ir
www.Bshams.ir
65 ( ýÜÞø¢ ²û) BINOMIAL HEAP .4.3
1 6
8
18
14 29
11 17 38
27
12 25
10- - -Head[H]
Binomial-Heap
¤ Âþ¥ «¡ î ÀþÞ÷ üõ ùÀûÈõ ¤ Min Binomial Heap ×þ Ûت ¤¢:¢¤¢
üãþ ,´¨¤¢ ¤ ÝÞõ Heap ´¡¤¢ ×þ «¡ Binomial Tree Âû .11.´¨ ©¤À ÀÜî ýøÆõ µð¤Ã Node Âû ÀÜî
¢¤¢ ¢ø H ¤¢ Binomial Tree ×þ k üÔõ÷ ¼½¬ ¢Àä Âû ý .2,n Binomial Heap ×þ î ´¨ãõ ßþÀ ´¬¡ ßþ .´¨ k ö ý¤¢ î
.ùÀª ÛØÈ Binomial Tree ,blg nc+ 1 ¥ ·îÀ Node
Min Binomial Heap ýø¤ Â ÜÞä 5.4.3
.¢¤À÷ ýÌä ºû ø ´¨ üó¡ î ¢¥¨ üõ Heap ´¡¤¢ ×þ : Make-Heap() •
.Àî üõ ê® H ´¡¤¢ ¤ x , Node : Insert(H, x) •
ÀÜî ßþµÞî î À÷¢Âð üõ H ´¡¤¢ ¥ ý Node ýÂð ù¤ª : Minimum(H) •.Àª µª¢ ¤
Delete ¤ Àª µª¢ ¤ ¤ÀÖõ ßþµÞî î Heap ¥ ýNode : Extract-Min(H) •.À÷¢Âð üõ ¤ Node ¢¡ ø Àî üõ
¤¬ Ýû ø ¢Þ÷ ÓþÂã ÝÞõ Heap ¤¬ ö üõ Ýû ¤û Heap Àª µª¢ 1
.¢¤À÷ ü÷À øÔ û ö ýø¤  ÜÞä ¤¬ Âû ¤¢ ÝÞþÃîõ Heap
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 66
ýû Node Þ û Ûõ ª î À ÷¢Â ð ü õ ¤ ýHeap ´¡¤¢ : Union(H1, H2) •.¢Â±õ ß ¥ ¤ H2 ø H1 ,Heap ýû ´¡¤¢
î Àû¢ üõ ¤ k ÀþÀ ¤ÀÖõ H ´¡¤¢ ¥ x ,Node : Decrease-Key(H, x, k) •(x > k) .´¨ ö üÜ±ì ¤ÀÖõ ¥ µÞî ÀþÀ ¤ÀÖõ ßþ
.Àî üõ éÁ H ´¡¤¢ ¥ ¤ x ,Node : Delete(H, x) •
Max Binomial Heap 6.4.3
Èþ¤ î ;´¨ ÝÞþÃîõ ý ÜÞ ø¢ öµ¡¤¢ ¥ üÜÚ Max Binomial Heap ×þÇÜê ×þ ùøä ø ÀÜʵõ Ýû üþû Âð ù¤ª ÕþÂÏ ¥ û ´¡¤¢ ßþ ôÞ ýûÛÚ ýû Èþ¤ Âþ¨ ß ö °Æ ¢Àä î ¢¤¢ ¢ø ´¡¤¢ ¥ ü Èþ¤ ¢¥
:Âþ¥ ñ·õ À÷õ.Àª ÝÞþÃîõ
4 9 7
3 2
1
5 6 4
5 2 3
2
........ .....................
üõ ùÀûÈõ ¤ Max Binomial Heap ø¢ merge ÜÞä ¥ ÷Þ ÷ ×þ  þ¥ ¤¢.´¨ Ýî û Èþ¤ ¢Àã Âþ¥,´¨ θ(1)¥Ã÷ ݵþ¤Úó ßþ öõ¥ .ÀþÞ÷
www.Bshams.ir
www.Bshams.ir
67 FIBONACCI HEAP .5.3
8R
.........6
4 3 4
2 1 2
1
4
+
.......... 9 .............?7
3 2
1
5 6 4
5 2 3
2
⇒
8 .........
4
9
3 2
1
.............7
5 6
5
4
2 3
2
6
4 3
2
4
1 2
1
?
.Àî °î ¤ ÀþÀ ø ÝþÀì ýÂÈØþ¢ ø¢û Binomial Heap ͨ: ßþÂÞ
FIBONACCI HEAP 5.3Fibonacci Tree 1.5.3
:¢ª üõ ÓþÂã üµÈ𥠤¬ ´¡¤¢ á÷ ßþ:ÓþÂã
Fn =
Ýî üõ ê® ´¨¤ ´Þ¨ À÷¥Âê öä ¤ Fn−2, Fn−1Èþ¤
n=0
n=1
else
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 68
.Àî ê® ´¨¤ À÷¥Âê öä ¤ Fn−2,Fn−1 Èþ¤ ´¡¤¢ á÷ ßþ ¤¢
F2: F3 :
F4 :
F0: F1:
Max Fibonacci Tree 2.5.3
°ÆÂ¥ ¤À °Æ ø ´¨ °Æ ý¤¢ öùÂð Âû î ´¨ ü÷±ê ´¡¤¢.ÀªüÞ÷ µØîû À÷¥Âê
: Ýî ý¤Áðù¤Þª °Â ßþ ¤ ü÷±ê ý¨ Âðf0 = 0 , f1 = 1 , f2 = 1 , f3 = 2, ...
´¨  Fn ýû ï ¢Àã ø fn+2 ´¨  Fn ýûùÂð ¢Àã ùÚ÷. (n ≥ 0) fn ´¨  Fn üÜ¡¢ ýûùÂð ¢Àã . fn+1
Fibonacci Heap 3.5.3
öµ¡¤¢ ßþ ýû Èþ¤ î ´¨û Fibonacci Tree¥ üÜÚ Fibonacci Heap ×þ. ÀÜʵõ Ýû ýÂð ù¤ª ÕþÂÏ ¥
Max Fibonacci Heap 4.5.3
Max Binomial Heap ÕÎõ î ´¨ Max Fibonacci Tree ö µ¡¤¢ ¥ üÜÚø ´¨ Fi+2 Û¬ ø ¢ÂÚõ ¤¬ Fi+1 ø Fi ß ö¢Âî Merge ÛÞä üóø ´¨Å .¢Âî ê® Fi+1 ´¨¤ À÷¥Âê öä ¤ Fi Àþ ú÷ ö¢Âî Merge ¤¢ ¹þ ¤¢
www.Bshams.ir
www.Bshams.ir
69 2-3 öµ¡¤¢ .6.3
ýøÆõ þ µð¤Ã Fi+1 Èþ¤ ¢Àä þ ,Àµê ëÔ ´¨ ßØÞõ ´ó ø¢ ö¢Âî ê® ¥ÛÞä ×þ À þ ¤Ê þ Â è ¤¢ þ ø ´¨ ùÀª ôÞ ¤ î î ´¨ Fi È þ¤ ¢ÀäüÚµÆ Fi öõ¥ Å . ݪ µª¢ Fi ´Þ¨ Fi+1 ´¡¤¢ Èþ¤ ¥ SiftDown
.´¨ ´¡¤¢ áÔ¤ ݵþ¤Úó  ·îÀ ø ¢¤¢Àª¤ Âþ¥ ´¨ âþ¨ üÜ¡ ÅþÀ÷ ´±Æ÷ ü÷±ê ´¡¤¢ ýû ï ÇþÃê ´¨  ø Àî üõ Àª¤ üõ¤ ø ü¡ áÔ¤ üóø ´¨ ¢þ¥ ü÷±ê â.´¨ lg∗ À ¤¢ ø ¢¤À÷ þÃû ¤Æ SiftDown ÛÞä ¹µ÷ ¤¢ Height(Fn) = dn
2e
.ÀûÀ ¤ ü÷±ê ýû ´¡¤¢ î ÀÆþ ý õ÷ : ßþÂÞ
2-3 öµ¡¤¢ 6.3: 2ÓþÂã
.Àª üõ Âþ¥ ýû üðÄþø ý¤¢ î Àª üõ ¹µÆ ´¡¤¢ ×þ 2-3 ´¡¤¢ ×þ
×þ ø ÂÊä ×þ ý¤¢ 2-node ×þ.´¨ 3-node þ 2-node þ üÜ¡¢ ùÂð Âû •.Àª üõ ÂÊä ø¢ ý¤¢ 3-node
.Àª 2-node ×þ öÀ÷¥Âê ùÀû¢ öÈ÷ MiddleChil ø LeftChild ÀîÂê •ôÞ .Àª ö ÀÜî dataL.key ø ùÂð ßþ ÂÊä dataL Àî Âê ß»ÞûdataL.key ¥ µÞî ÀÜî ý¤¢ LeftChild Èþ¤ 2-3 ´¡¤¢ Âþ¥ ¤¢ ¬äMiddleChild Èþ¤ 2-3 ´¡¤¢ Âþ¥ ¤¢ ¬ä üõÞ î üó ¤¢ ,ÀµÆû
.Àª üõ dataL.key ¥ µð¤Ã ÀÜî ý¤¢
3-node ×þ ùÀ û¢ ö È ÷ LeftChild ,MiddleChild,RightChild À î Â ê •.Àª ùÂð ßþ ÂÊä ø¢ dataL,dataR Àî Âê .ÀµÆû
 þ¥ ¤¢ û À Ü î Þ û ß » Þ û ø ù¢ dataL.key < dataR.keyù Ú ÷ þ¥ ¤¢ ý û À Ü î ô Þ dataL.key¥  µ Þ î LeftChild È þ¤ 2-3 ´¡ ¤¢ø dataL.key ¥ µð¤Ã ø dataR.key¥ µÞî MiddleChild Èþ¤ 2-3 ´¡¤¢.ÀµÆû dataR.key ¥ µð¤Ã RightChild Èþ¤ 2-3 ´¡¤¢ Âþ¥ ¤¢ û ÀÜî ôÞ
.À÷¤¢ ¤Âì ¼Î¨ ×þ ¤¢ ü¤¡ ýû ùÂð ôÞ •
FUNDAMENTALS OF DATA STRUCTURES IN C++, µî ¥ µêÂð 2
Ellis Horowitz,Sartaj Sahni,Dinesh Mehta
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 70
.´¨ ùÀª ¤ 1 Ûت ¤¢ 2-3 ´¡¤¢ ¥ üó·õ
10 20
40
80
A
B C
2-3 ´¡¤¢ ¥ üó·õ 1 Ûت
¤¢ .À÷ª üÞ÷ ù¢¢ ÇþÞ÷ ³õî ¤¢ üØþÃê ø üãìø ¤Ï ü¤¡ ýû ùÂð.¢Âð üõ ¤Âì ÂÔ¬  ü¤¡ ùÂð Âû ¤àµõ À÷¥Âê ù¢¢ Ìää
3h−1ø 2h−1 ß ÂÊä n ø h áÔ¤ 2-3 ´¡¤¢ ×þ ¤¢ ¬ä ßþ ¢ÀãüÜ¡¢ ùÂð Âû î ü÷õ¥ ñø ÷Âî î Àî , °ÜÎõ ßþ ùÀûÈõ ý . ´¨î ü÷õ¥ ôø¢ ÷Âî î üó ¤¢ ¢¢Âð üõ ñÞä , ¢Âð üõ ¤Âì 2-node ×þ ¤¢, ´ã®ø ø¢ ßþ.Àª Àû¡ ñÞä , ¢¢Âð üõ âìø 3-node ×þ ¤¢ üÜ¡¢ ùÂð Âû3-node ø 2-node ý¢Àã ý¤¢ 2-3 ´¡¤¢ ×þ.Àî üõ ¤ ¤ ëê ÷Âî ø¢
.¢ Àû¡
X
X X.........
...........
20
21
2h−1
h = 1
h = 2
h = h
2-node
n = 20 + 21 + · · ·+ 2h−1 ⇒ n = 2h−12−1 = 2h − 1⇒ h =
⌈logn+1
2
⌉
www.Bshams.ir
www.Bshams.ir
71 2-3 öµ¡¤¢ .6.3
............
..........
.............
X X
X X X X X X
2× 30
2× 31
2× 3h−1
h = 1
h = 2
h = h
3-node
n = 2×30 +2×31 + · · ·+2×3h−1 ⇒ n = 2×(3h−1)3−1 = 3h−1⇒ h =⌈
logn+13
⌉
: ßþÂ⌈logn+1
3
⌉< h <
⌈logn+1
2
⌉
: û §î ¥ ù¢Ôµ¨ 2-3 ´¡¤¢ ×þ ÇþÞ÷
templete<class KeyType >class Two3;//forward declaration
templete< class KeyType >
class Two3Node
friend class Two3 < KeyType >;
private :
Element< KeyType > dataL,dataR;
Two3Node *LeftChild, *MiddleChild, *RightChild;;
templete< class KeyType >
class Two3
public:
Two3(KeyType max,Two3Node< KeyType > *init=0)
:MAXKEY(max), root(init);//constractor
Boolean Insert(const Element< KeyType > &);
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 72
Boolean Delete (const Element< KeyType > &);
Tow3Node< KeyType > *Search(const Element < KeyType >&);
private:
Tow3Node< KeyType > *root;
KeyType MAXKEY;
;
ø Àª±÷ MAXKEY ÀÜî ý¤¢ ý±µãõ ÂÊä ºû î Ýî üõ Âê ¹þ ¤¢ú . ´¨ dataR.key = MAXKEY ý¤¢ 2−node ×þ î Ýîüõ ¢¢¤ÂìÀ÷¥Âê ø¢ MiddleChild ø LeftChild ø ¢ªüõ ù¡£ dataL ¤¢ ùÂð ßþ ÂÊä.¢¢ ´±Æ÷ ù¿ó¢ ¤ÀÖõ Âû ö üõ RightChild ù¢¢ Ìä .Àî üõ ù¤ª ö
2-3 ´¡¤¢ ×þ ý¹µÆ 1.6.3
â ö¢¤ø ´¨¢ ý ¤ üø¢ø¢ ý¹µÆ öµ¡¤¢ ݵþ¤Úó ö üõ ü𢨠.¢¢ ÝÞã Àî üõ ¹µÆ ¤ xÀÜî ÂÊä ýø ùÂð îTow3::Search ý¹µÆýûÀÜî ¤ x ÀÜî ×þ î Àî üõ ù¢Ôµ¨ compare ô÷ üã ¥ ¹µÆ â3,2,1 Âþ¢Öõ °Â â ßþ.Àîüõ ÆþÖõ p À÷õÉ¿Èõ ùÂð ×þ ¤¢ âìø¥ µð¤Ã ,ôø¢ ø ñø ýûÀÜî ß , ñø ÀÜî ¥ µÞî x þ î ßþ µÆ ¤ 4þÖÜ ¤ÂØ ¢Àã.Àû¢ üõ ´Èð , Àª p¤¢ ýûÀÜî ¥ üØþ  þ ôø¢ ÀÜîùÂð n ý¤¢ ´¡¤¢ Âð ßþ . Àª üõ 2-3´¡¤¢ áÔ¤ ¢øÀ½õ for ýû
.¢ Àû¡ O(log n)  Tow3::Search â üðÀ» ùÚ÷ ,Àª
templete< class KeyType >
Tow3Node< KeyType > *Tow3< KeyType >::
Search(const Element< KeyType >& x)
//If the element x is not in the tree,then return 0,Otherwise
//return a pointer to the node that contains this element.
for(Tow3Node< KeyType > *p=root;p;)
www.Bshams.ir
www.Bshams.ir
73 2-3 öµ¡¤¢ .6.3
switch(p→ compare(x))
case 1 :p=p→ LeftChild;break;
case 2 :p=p→ MiddleChild;break;
case 3 :p=p→RightChild;break;
case 4 :return p ;// x is one of the keys in p
2-3 ´¡¤¢ ×þ Û¡¢ ¤¢ 2.6.3
70 ÂÊä ¤¢ ñ·õ ý .Àª üõ ù¢¨ fµ±Æ÷ 2-3 ´¡¤¢ ×þ Û¡¢ ¤¢ßþ ßµêþ ý ô¥ ý¹µÆ Àµ ¤¢.ÀþÂÚ ÂÑ÷ ¤¢ ¤ 1 Ûت 2-3 ´¡¤¢ Û¡¢ûÀÜî ôÞ Øþ ÂÏ¿ ùÚ÷ Àª ´¡¤¢ ¤¢ f ±ì ÀÜî Âð .Ýû¢üõ ô¹÷ ¤ ÀÜîüÞ÷ ô¹÷ ø ùÀª øÂø ¤ ´Æت ¤¢ ÛÞä ÀµÆû ¢Âê Âʽõ 2-3 ´¡¤¢ ¤¢Û¡¢ ¤ ö Á ó ¢¤À ÷ ¢ø 2-3 ´¡¤¢ ¤¢ 70 ÂÊä ö ñ·õ ßþ ¤¢.¢ÂðÝ÷À , 70 ÂÊä ý¹µÆ ñ¡ ¤¢ ´¨ ô¥ ¤î ßþ ýÂ. Ýî üõ ¤¢ ´¡¤¢´¡¤¢ ¤¢ î ¤ ýÀÜî ùðÂû Àª µª¢ . Ýþª üõ øÂø ¤ ùÂð ôÀî î¢Âê Âʽõ ï ùÂð ×þ ¹µÆ , Ýû¢ ¤Âì ¹µÆ ¢¤õ ¢¤À÷ ¢ø 2-3¢ Ýû¡ õ ö 70 ÂÊä ý¹µÆ üÏ ¤¢ î üð ùÂð .Àª Àû¡ øÂø ¤ÀþÀ ÂÊä, ´¨ ÂÊä ×þ ý¤¢ ú ùÂð ßþ î ¹÷ ¥. ´¨ 80 ÀÜî C ùÂðù¢¢ öÈ÷ (Óó) ´ÞÆì 2 Ûت¤¢ Û¬ ´¡¤¢ .¢Âî ¤¢ ÎÖ÷ ßþ ¤¢ ö üõ ¤
. ´¨ ùÀª¤ ßþ . Ýî ¤¢ ´¡¤¢ ¤¢ 30 ÀÜî x ÂÊä Ýû¡ üõ ÀîÂê ñ´¨ ô¥ Áó ù¢ 3-node ×þ B î ¹÷ ¥ .ÝþÈõ øÂø ¤ B ï ùÂð ¹µÆÂÊä ø¢ ß ¥ î ´¨ ýÂÊä Ûõª D . Ýî ¢¹þ ¤ D ô÷ ýÀþÀ ùÂðÀû¡ ¤Âì B ¤¢ ÀÜî ßþµØî ÂÊä .´¨¤¢ ¤ ÀÜî ßþµð¤Ã xø B ¤¢ ¢õÀû¡ ¤¢ B ¥ A ¤À ùÂ𠤢 D ýÂð ù¤ª ùÂÞû ͨµõ ÀÜî ÂÊä ø ´ª¢
. ´¨ ùÀª ¤ ()´ÞÆì 2 Ûت ¤¢ Û¬ ´¡¤¢.Àª
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 74
20 40
10 30 70 80
A
B D C
30 ¤¢()
40
10 20 70 80
A
B C
70 ¤¢(Óó)
1 Ûت2-3 ´¡¤¢ öø¤¢ ¤¢-2Ûت
Ûت 2-3 ´¡¤¢ Û¡¢ ¤ 60 ÀÜî xÂÊä ý¤ÁÚþ , ñ·õ ßþ¡ öä üõ ìõ C ùÂ𠤢 60 ý¹µÆ üÏ ¤¢ ï ùÂð .ÀþÂÚ ÂÑ÷ ¤¢ () ´ÞÆì 2ýø ùÂð ßþ .¢¢Âð üõ ¢¹þ E ÀþÀ ùÂð ×þ ´¨ 3-node ×þ C ö.¢¢ÂðÀÜî ßþµØî ýÂÊä ýø Ã÷ CùÂð .(80) ´¨ ÀÜî ßþµð¤Ã ýÂÊä , E ÀþÀ ùÂð ýÂð ù¤ª ùÂÞû (70) ͨµõ ÀÜî ÂÊä.(60) Àû¡´¨ 3-node ×þ A î ¹÷ ¥ f¢À¹õ .¢¢Âð üõ ý¤ÁÚþ C ¥ A ¤À ùÂð Û¡¢.¢ª üõ ¢¹þ 20, 40, 70 ß ¤¢ ÀÜî ßþµð¤Ã ýÂÊä ýø F ÀþÀ ùÂðöä °Â D ø B . ´¨ ÀÜî ßþµØî ýÂÊä ýø A , Û±ì À÷õ F öÀ÷¥Âê öä Ã÷ E ø C °Â ,À÷õ üõ üì A ͨø ø ² öÀ÷¥ÂêG ÀþÀ ùÂð ×þ , ¢¤À÷ ý¤À A ö . À÷ª üõ ý¤ÁÚþ ¤À ùÂð ßþ Û¡¢ù¤ª ùÂÞû 40 ÀÜî ýÂÊä ýø ùÂð ßþ .¢ª üõ ¢¹þ 2-3´¡¤¢ ý¤¢ ÀþÀ 2-3 ´¡¤¢ ,¢ Àû¡ F ü÷õ À÷¥Âê Âð ù¤ª ø A ² À÷¥Âê Âð
.´¨ ùÀª ¤ 3 Ûت
10
20
40
30 60
70
80
A
B D C E
F
G
() ´ÞÆì 2 Ûت2-3 ´¡¤¢ Û¡¢ 60 ¤¢-3Ûت
www.Bshams.ir
www.Bshams.ir
75 2-3 öµ¡¤¢ .6.3
,Ýî ê® p À÷õ 3-node ×þ Û¡¢ ¤ ýÂÊä ݪ µ¨¡ î öõ¥ Âû. Àþð üõ û ùÂð ÝÆÖ ¤î ßþ î . ¢Âî Ýû¡ ¢¹þ ¤ q À÷õ ýÀþÀ ùÂðüõ Âþ¥ ¤¬ ¤¢ â . ´¨ ùÀª ÝÆÖ ü÷õÂÊä ø q , p p Ýþð üõ
.˻templete< class KeyType >
Boolean Tow3< KeyType >::Insert(const Element< KeyType >& y)
//Insert the element y into the 2-3 tree only if it does not already
// contain an element with the same key.
Tow3Node< KeyType > *p;
Element < KeyType > x=y;
if(x.key>=MAXKEY) return FALSE; //invalid key
if(!root)NewRoot(x,0); return TRUE; //empty 2-3 tree
if(!(p=FindNode(x)))
insertionError();
return FALSE;//key already in 2-3 tree
for(Tow3Node< KeyType > *a=0; ; )
if(p→dataR.key==MAXKEY)// p is a 2-node
p→PutIn(x,a);
return TRUE;
else// p is a 3-node
Tow3Node< KeyType > *olda=a;
a=new (Tow3Node< KeyType >);
x=Split(p,x,olda,a);
if(root==p) //root has been split
NewRoot(x,a);
return TRUE;
else p=p→ parent();
//end of p is a 3-node and for loop
//end of Insert
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 76
 â ßþ ¥ ôÀî Âû î ý ÔÒø .Àî üõ ù¢Ôµ¨ â ßþÀ ¥ â ßþ:Àª üõ Âþ¥ ¤¬ , À÷¤¢ ùÀúä
(´¨ ùÀª ÂÑ÷ é¬ ü𢨠ý < KeyType > ýÚó µõ¤ ¥ )
: void Tow3::NewRoot(const Element& x,Tow3Node *a) •ü÷õ¥ . Àî Âç Àþ 2-3 ´¡¤¢ Èþ¤ î ¢ª üõ ü÷¡Âê ü÷õ¥ â ßþ(new root) ÀþÀ Èþ¤ öø¤¢ x ¢ÂÔõ ÂÊä ¢¥¨ üõ ¤ Middle Child, a îÀþÀ Èþ¤ ( ² À÷¥Âê) LeftChild ÛþÀ± Ã÷ üÞþÀì Èþ¤ .¢ª üõ ¤¢
.Àª Àû¡
:Tow3Node* Tow3::Find(const Element & x) •´¡¤¢ ×þ ëê â .´¨ (1 õ÷Â) Tow3::Search ùÀª ¬ ¿Æ÷ â ßþ.Àû¢ üõ ¤Âì ¹µÆ ¢¤õ x.key ÀÜî ýÂÊä ¤Ì ý ¤ üú Âè 2-3ßþ Âè ¤¢ .¢ª üõ ù¢¢ ´Èð ÂÔ¬ ¤ÀÖõ ùÚ÷ Àª µª¢ ¢ø ÀÜî ßþ Âðâ .À÷¢Âð üõ  ¤ ¹µÆ ßþ ¤¢ ùÀª ìõ ï ùÂð ýÂð ù¤ª ¤¬FindNode â ͨ î ýÂð ù¤ª ù¡£ ý ý p Âçµõ ¥ Tow3::Insert
ý ù¢¢ öÞµ¡¨ ß»Þû FindNode . Àî üõ ù¢Ôµ¨ , ¢ª üõ ù¢¢ ´ÈðÂßþ . ¢¥¨ üõ ¤¢ ì (Èþ¤) root p ¥ ´È𥠤 õ î Àî üõ ¢¹þ ¤ . Àª p root ÂÆõ ¤¢ ¢õ ýû ùÂð ¥ üµÆó À÷ üõ ý ù¢¢ öÞµ¡¨ùÂð Àóø §Âµ¨¢ , ùÂð ×þ ÝÆÖ ¥ Å Âþ¥ ´¨ ¥÷ ý ù¢¢ öÞµ¡¨ ß
. ´¨ ý¤ø® ùÀª ÝÆÖ
:void InsertionError() •¤¢ ö ¤¢ ´¨ ´¡¤¢ ¥ ýÂÊä ýøÆõ ©ÀÜî ¤ ýÂÊä Ýû¿ üµìø
. ¢Âî Àû¡ ôä ¤ Ρ â ßþ . ¢¢ Àû¡ ¤ üþΡ Ýî
: void Tow3Node::PutIn(const Element& x,Tow3Node *a) •, ´¨ ÂÊä ×þ ý¤¢ fãìø î (this)ùÂð Û¡¢ x ÂÊä ¤¢ ý â ßþ ¥¤¢ ø Ýû¢ üõ ¤Âì x ´¨¤ ´Þ¨ ¤¢ fÖì¢ ¤ a ´¡¤¢ Âþ¥ ¤¢ . Ýî üõ ù¢Ôµ¨üܱì Âþ¢Öõ ùÀª Middle Child ýøÆõ a ùÚ÷ ¢¢Âð dataL  x Âð ¹µ÷x Âð . À÷ª üõ RightChild ø dataR  °Â MiddleChild ø dataL
.Àª Àû¡ RightChild ÛþÀ± a ùÚ÷ ¢¢Âð dataR ÛþÀ±
:Eelement& Tow3::Split(Tow3Node* p,Element& x,Tow3Node *olda,*a) •Âþ¥ ª ÂÊä ø¢ Ûõª Àµ î (p) À÷õ Tow3Node ×þ ýø¤  â ßþ
www.Bshams.ir
www.Bshams.ir
77 2-3 öµ¡¤¢ .6.3
ýø Àî üõ ù¤ª ö a î ùÀª ¢¹þ üó¡ ùÂð.Àî üõ ÛÞä Àª üõÂÊä .Àª üõ x ø p ¤¢ ¢õ óø ÂÊä ø¢ öõ ¥ ÀÜî ßþµð¤Ã ýÂÊäöÀ÷¥Âê Âð ù¤ª ¨ .Àª üõ p ¤¢ ùÀ÷õ üì ÂÊä ú , ÀÜî ßþµØî ý¤¢¤ À÷ª ÓþÂã a ø p ¤¢ Àþ î ýÀ÷¥Âê ù¢¢ Ìä ¤ú olda Âð ù¤ª ø p üܬ
. À÷¢Âð üõ  ¤ ÷õ ÀÜî ÂÊä â ßþ . Àî üõ ñçª
Ã÷ a ø ¢ª ¤¢ p ¤¢ Àû¡ üõ î ´¨ ýÂÊä ùÀû¢ öÈ÷ x , Insert â ¤¢. ´¨ ùÀª ¢¹þ for ÖÜ ¤ÂØ ßþ¡ ¤¢ üð¥ î ´¨ ý ùÂð ùÀû¢ öÈ÷ üÚµÆ ùÀª é¬ Ûî öõ¥ î Ýî üõ ùÀûÈõ üðÀ» Ûܽ ø þù ýÂÂÊä n 2-3 ´¡¤¢ ×þ Û¡¢ ý¤ÁÚþ ßþ . ¢¤¢ 2-3 ´¡¤¢ ÕÞä
.¢Âð üõ ¤¬ O(log n)  ü÷õ¥ ¤¢
2-3 ´¡¤¢ ×þ ¥ éÁ 3.6.3
Âð . ´Æ÷ ý¤ÁÚþ ¥  ÛØÈõ üõúÔõ à½ó 2-3 ´¡¤¢ ×þ ¥ éÁÂÊä ×þ ùÀª éÁ ùÂð ÛþÀ± ùÚ÷ Àª±÷ ï ùÂð î Ýî éÁ ¤ ýÂÊäñ·õ ý . Ýû¢ üõ ô¹÷ ¤ éÁ ÛÞä ï éÁ ø ´¨ ï ùÂ𠤢 î °¨õéÁ ¤ ¢¤¢ ¤Âì (Óó) ´ÞÆì 4 Ûت Èþ¤ ¤¢ î 50 ÀÜî ÂÊä Ýû¿ Âð60 ÀÜî ýÂÊä þ 20 ÀÜî ýø ýÂÊä ´¨ ßØÞõ ÂÊä ßþ ùÚ÷ ÝîÂÊä ¥ Ý÷ üõ üÜî ´ó ¤¢ . À÷¤¢ ¤Âì ï ùÂ𠤢 úþ ø¢ Âû ø ¢ªËþãâìø ÀÜî ßþµØî ÂÊä þ ø ² ´Þ¨ ¤¢ âìø ´¡¤¢ Âþ¥ ¤¢ ÀÜî ßþµð¤Ã
.Ýî ù¢Ôµ¨ ,¢ª éÁ Àþ î ýÂÊä ´¨¤ ´Þ¨ ´¡¤¢ Âþ¥ ¤¢ýø¤  ¤ ¶½ ßþ . ÝþÂð üõ ÂÑ÷ ¤¢ ¤ ï ùÂð ×þ ¥ éÁ ú ¹µ÷ ¤¢ÍÖê 70 ÀÜî ÂÊä éÁ ý . Ýû¢ üõ õ¢ (Óó) ´ÞÆì 4 Ûت ´¡¤¢¤î ¹µ÷ . Ýû¢ üõ ¤Âì dataR.key ¤¢ ¤ MAXKEY , C ùÂ𠤢 î ´¨ üêîÛت 2-3 ´¡¤¢ ¥ 90 ÀÜî éÁ¡ ý . ´¨ ùÀª ù¢¤ø () 4 Ûت ¤¢Ã ÷ D ù 𠤢 ø Ý î üõ ÛÖ µ õ dataL ¤ dataR ´Æþ üõ () ´ÞÆì 4ßþ ¹µ÷. (dataR.key=MAXKEY) Ýû¢ üõ ¤Âì MAXKEY ¤ dataR.key
. ´¨ ùÀª ¤ ()´ÞÆì 4 Ûت 2-3 ´¡¤¢ ¤¢ ¤î
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 78
50 80
A
B C D10 20 60 70 90 95
óø2-3 ´¡¤¢(Óó)A
B C D
50 80
10 20 60 90 95
70 ùÂð éÁ ( )
50 80
10 20 60 95
A
B C D
90 ùÂð éÁ()
ø ø Óó ýû ´ÞÆì , 4 Ûت
C ùÂð î ¢ª üõ °õ Âõ ßþ. ÀþÂÚ ÂÑ÷ ¤¢ ¤ 60 ÀÜî ÂÊä éÁ ñüõ ø¤ ßþ ¥ , ´¨ 3-node ×þ B üãþ C ùÂð ² ¢ÃÞû î ¹÷ ¥ . ¢¢Âð üú¤ 50 ÀÜî ø ù¢¢ ñÖµ÷ , A ,¤À ùÂð dataL öØõ ¤ 20 ÀÜî ÂÊä Ý÷´¡¤¢ B ¤¢ dataR.key=MAXKEY ý¤Âì ¥ Àã Ýû¢ ñÖµ÷ C ùÂð ¤À ¥ßþ . ¢¢Âð üõ ÛþÀ± ,ùÀª ¤ () ´ÞÆì 4 Ûت ¤¢ î »÷ ¤¬ 2-3
www.Bshams.ir
www.Bshams.ir
79 2-3 öµ¡¤¢ .6.3
î üõÚû . ¢ª üõ ùÀõ÷ (rotation) Ç¡Â û ù¢¢ üþ¹ ø ñÖµ÷ ÀþÂê60 éÁ î üõÚû À÷õ . ¢ª üõ üú D ùÂð ,¢¢Âð üõ éÁ 95 ÀÜî ÂÊä2-node ×þ C üãþ ² ´Þ¨ ¢ÃÞû î  Àª üÞ÷ ßØÞõ rotation Àª ô¹÷Ýî üõ éÁ ¤ D ùÂð ø ù¢Âî ÛÖµõ C ² ¢ÃÞû Û¡¢ ¤ 80 ¤ ßþ . ´¨üõ éÁ ùÂð ×þ °î ¤¢.¢ª üõ µ Ô ð (combine) °î À þ ê ß þ .95 ÂÊä éÁ .¢¢Âð üÞ÷ éÁ ýùÂð ÷Ú»ûÇ¡Â ¤¢ î ü¤¬ ¤¢ ¢ª50 ÀÜî ÂÊä éÁ .¢¢Âð üõ () ´ÞÆì 4 Ûت 2-3 ´¡¤¢ üúµõñ .Àª Àû¡ () ´ÞÆì 4 Ûت 2-3 ´¡¤¢ ¤ °õ Ã÷ ´¡¤¢ ßþ ¥B ùÂ𠢪 üõ °õ î ÀþÂÚ ÂÑ÷ ¤¢ ´¡¤¢ ßþ ¥ ¤ 10 ÀÜî ÂÊä éÁ2-node ×þ C üãþ B ´¨¤ ´Þ¨ ¢ÃÞû þ î Ýî üõ ü¨¤Â öî .¢¢Âð üúî »÷ Èõ üÈ¡Â Ý÷ üõ Àª 3-node ×þ C Âð .3-node ×þ þ ´¨ÛÞä ×þ ùÚ÷ Àª 2-node ×þ Âð ø Ýû¢ ô¹÷, ´êÂ𠤬 60 éÁ ýÂéÁ ´ã®ø Èõ , ´¨ 2-node ×þ C ö ¹þ ¤¢ .¢Âð üõ ¤¬ °îÂùÂð ø ùÀª ÛÖµõ B 80 ø 20 ýûÀÜî Â¬ä ¤ ßþ .Ýî üõ ÛÞä 95÷Ú»û ý¤¢ A ùÂð ¤À î Àª üõ °õ óbÆõ ßþ ÀÂû.¢¢Âð üõ éÁ C
Ýþ¢¢ ô¹÷ C ýÂ î »÷ À÷õ ݵÆ÷ üõ ¢±÷ Èþ¤ ¤À Âð .Àª±÷ ýÂÊ䤢 ø(60 ÂÊä éÁ) Ýû¢ ¤Âì ´Æ ø ü¨¤Â ¢¤õ ¤ ö ´¨¤ ø ² ¢ÃÞû ,éÁ ü𢨠, ´¨ Èþ¤ A ö .Àþ¢Âð üõ üú (95ÂÊä éÁ) D ¹µ÷
.(() ´ÞÆì 4 Ûت) Àª Àû¡ ÀþÀ Èþ¤ B ø ùÀª
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 80
A
B C D
20 80
10 50 95
60 éÁ()A
B C
20
50 8010
95 éÁ()
10
20
80
A
B C
50 éÁ()
20 80B
10 éÁ()
4 Ûت2-3 ´¡¤¢ ×þ ï ùÂð¥ éÁ ÛÂõ
ÂÊä éÁ ¥ Šǵã®ø ö¢Âî ÅØãõ ý ôøÃó ¤¬ ¤¢ ¤ p ùÂð :1 ÜÂõ. Àû¢ Âç ÂÑ÷ ¢¤õ
:2 ÜÂõfor(;p has zero element && p!=root;p=r)
left r be the parent of p and let q be the left or right sibling of p ;
if(q is a 3-node) perform a rotation
else perform a combine;
www.Bshams.ir
www.Bshams.ir
81 2-3 öµ¡¤¢ .6.3
p ² ´Þ¨ À÷¥Âê . Àª Èþ¤ Àþ p ùÚ÷,¢¤À÷ ýÂÊä p Âð :3 ÜÂõ.¢ª üõ éÁ p ùÂð ø ùÀª Èþ¤ ÛþÀ±
¤À ü÷õ þ ø ´¨¤ , ² À÷¥Âê p î ßþ µÆ Ç¡Â ×þ ý ´ã®ø ¨¤ qùÚ÷ ,Àª r ² ´Þ¨ À÷¥Âê p Âð . Àþ üõ ¢ø ¡þ Àª r üãþ ¢¡ßµêÂð ÂÑ÷ ¤¢ öøÀ î Àª µª¢ . ÀîÂê p ² ´Þ¨ À÷¥Âê öä Ç¡Â ¨ . ´¨ ùÀª ÓþÂã üµ¨¤¢ q , ´¨ 3-nodeþ 2-node ×þ r î ßþÌä î Àû¢ üõ öÈ÷ ? ´õä . ´¨ ùÀª ¤ 5 Ûت ¤¢ ý¤¢Þ÷ ¤¬ üãþ)ÀµÆû û ùÂð öÀ÷¥Âê ùÀû¢ öÈ÷ d ø c,b,a. ¢¤À÷ üµÞû ¢þ¥ ÏÂõ ù¢¢
.( öµ¡¤¢ Âþ¥ ýû Èþ¤
-
r
p q
a b c d
X
Y Z
?
X
r
p qY ?
Z
a b c d
Àª üõ r ² À÷¥Âê p (Óó)
pq
r r
q
Àª üõ r ü÷õ À÷¥Âê p ()
Z
YX
a b c d dcba
? Y ?
X Zp-
a
r
b c cb
a
d de e
r
q p q p
X Y
ZW W Y
X Z
-
Àª üõ r ´¨¤ À÷¥Âê p ()
2-3 ´¡¤¢ ¤¢ Ç¡Â ý Óܵ¿õ ´ã®ø ¨-5 Ûت
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 82
6 Ûت ¤¢ ´¨ r ² ´Þ¨ À÷¥Âê p î üµìø combine ÜÞä ´ã®ø ø¢. ´¨ ùÀª ù¢¢ öÈ÷
r
p q
x
y
a b c
-
r
px y
a b c
a b c
d
r
p qx
y
z-
d
a b c
p
rz
x y
6 Ûت
( Óó)
( )
¤¬ 2-3 ´¡¤¢ ¤¢ ï ùÂð ×þ éÁ ÛÂõ ¥ ñø ýÜÂõ Àî ±ª:Àª üõ Âþ¥
template < class KeyType >
Two3< KeyType >::DeleteKey(Two3Node< KeyType > *p,
const Element< KeyType >& x)
//Key x.Key is to be deleted from the leaf node p.
if( x.Key==p→dataL.Key) // first element
if(p→dataR.Key!=MAXKEY )
// p is a 3-node
p →dataL = p → dataR;
p → dataR.Key =MAXKEY;
else p →dataL.Key=MAXKEY; // p is a 2-node
else p → dataR.Key =MAXKEY; // delete second element
www.Bshams.ir
www.Bshams.ir
83 2-3 öµ¡¤¢ .6.3
´¨ r ² À÷¥Âê p üµìø Combineø Rotation ýû ÜÞä Àî ß»Þû:Àª üõ Âþ¥ ¤¬
//Rotation when p is the left child of r and q is the middle child of r.
p → dataL= r → dataL;
p → MiddleChild = q → LeftChild;
r → dataL = q → dataL;
q → dataL = q → dataR;
q → LeftChild = q → MiddleChild;
q → MiddleChild = q → RightChild;
q → dataR.Key = MAXKEY;
...............................................................
//Combine when p is the left child of r and q is the right sibling of p.
p → dataL= r → dataL;
p → dataR= q → dataL;
p → MiddleChild = q → LeftChild;
q → RightChild = q → MiddleChild;
if(r → dataR.Key = MAXKEY)// r was a 2-node
r → dataL.Key = MAXKEY;
else r → dataL= r → dataR;
r → dataR.Key = MAXKEY ;
r → MiddleChild = r → RightChild;
2-3 ´¡¤¢ ×þ ¥ éÁ ¢ÂØÜÞä Ûܽ ø þù 4.6.3
O(1)  ü÷õ¥ ¤¢ üþú Ç¡Â þ °î ¢ÂØÜÞä ×þ î ´¨ É¿Èõ×þ Âð. ¢¢Âð üõ Ûõî éÁ ÛÞä ,¢ª ô¹÷ Ç¡Â ×þ Âð . ¢Âð üõ ô¹÷ßþ . ¢ª üõ ÛÖµõ  ¼Î¨×þ 2-3 ´¡¤¢ ¤¢ p ,¢Â𠤬 °îÂ2-3 ´¡¤¢ áÔ¤¥ À÷Â𠤬 À÷ üõ éÁ ×þ ñ¡ ¤¢ î ü±î ¢Àãü÷õ¥ ÂÊä n 2-3 ´¡¤¢ ×þ ¥ éÁ ÛÞä ¹µ÷ ¤¢ ø ¢Âî Àû¿÷ ¥ø¹
.¢¤¢ ¥÷ O(log n) ÂÂ
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 84
Red-Black ù¨ - ÃõÂì ´¡¤¢ 7.33:Àª üõ Âþ¥ ¤¬ ù¨-ÃõÂì ´¡¤¢ ×þ
ù¨ - ÃõÂì ´¡¤¢ «¡ 1.7.3
. ´¨ ù¨ þ ø ÃõÂì þ ùÂð Âû •
. ´¨ ù¨ nil ï Âû •
À÷ üÞ÷ ÃõÂì À÷¥Âê,ÃõÂì ùÂð ×þ ¤¢ ) .ÀµÆû ù¨ , ÃõÂì ùÂð ×þ À÷¥Âê ø¢ •(Àª
¢Àã Ûõª ( ÝÖµÆõ À÷¥Âê f õøÃó ÷) À÷¥Âê ï ùÂð ×þ ¥ ù¢¨ ÂÆõ Âû •. ´¨ ù¨ ùÂð ü÷ÆØþ
(Àª üÞ÷ ü¨¨ ¯øª ¥ ¯Âª ßþ). ´¨ ù¨ ´¡¤¢ Èþ¤ •
:Âþ¥ ñ·õ À÷õ
26
17 41
14 21
10 16 19 23
7 12 15 15
3
4730
28 38
35 39
NILNIL
NILNILNILNIL
NILNILNILNIL
NILNIL
NILNIL
NILNIL
NILNILNIL
NILNIL
.Àª üõ ü¨Àì ÀÞ½õ Âµî¢ ùøà ¥ µêÂð ´ÞÆì ßþ °óÎõ 3
www.Bshams.ir
www.Bshams.ir
85 RED-BLACK ù¨ - ÃõÂì ´¡¤¢ .7.3
üþÀµ ýþÌì ø Óþ¤ã 2.7.3
ùÂð ¢Àã ´¨  bh(X)þ Black-Height(x) ÓþÂã  :Black-Height(x)
.4À÷¥Âê ï ×þ x ¥ ù¨ ýû: uncle(x)
if parent[x]=right[parent[parent[x]]] then
uncle[x]:=left[parent[parent[x]]]
else uncle[x]:=right[parent[parent[x]]]
  , ´¨ ü Ü ¡¢ ù ð n ý¤¢ î RB ´¡¤¢ ×þ á Ô ¤  · îÀ : 1 Ì ì. ´¨ 2 log(n+1)
2
ù¿ó¢ Èþ¤ ´¡¤¢ Âþ¥ ×þ î Ýû¢ üõ öÈ÷ Àµ ëê Ìì ± ýÂ: ±áÔ¤ ýø¤  ÂÖµ¨ ¥ ± ý . ´¨ üÜ¡¢ ùÂð 2bh(x) − 1 ý¤¢ ÛìÀ x
.¢ª üõ ù¢Ôµ¨ ´¡¤¢ ¤¢ x üÜ¡¢ ùÂð: DZÂÖµ¨ þ
´¡¤¢ Âþ¥ ßþÂ. ´¨ nil ¹µ÷ ¤¢ ø ï fÞµ x , Àª ÂÔ¬ x áÔ¤ Âð.¢¤¢ üÜ¡¢ ùÂð 20 − 1 = 0 üãþ 2bh(x) − 1 ÛìÀ x Èþ¤
: ü ÂÖµ¨ ôðÀ÷¥Âê ø¢ ý¤¢ x ø Àª üõ ´±·õ ý¢Àä bh(x) . ÀþÂÚ ÂÑ÷ ¤¢ ¤ x üÜ¡¢ ùÂðú÷ Black - Height, ù¨ þ Àª ÃõÂì Ø÷ °Æ  öÀ÷¥Âê ¥ ôÀî Âû. Àª üõx ¢¡ ¥ µÞî üäÔ¤ x À÷¥Âê Âû Ø÷ ´Üä . ¢ Àû¡ bh(x)-1 þ bh(x) ÂÂ×þ Èþ¤ ´¡¤¢ Âþ¥ Âû î ÝþÂÚ ¹µ÷ ÂÖµ¨ Âê ¥ ù¢Ôµ¨ Ý÷ üõ ¢¤¢ÛìÀ x bÈþ¤ ´¡¤¢ Âþ¥ ßþÂ. ¢¤¢ üÜ¡¢ ùÂð 2bh(x)−1 − 1 ÛìÀ x À÷¥Âê
. ´ª¢ Àû¡ üÜ¡¢ ùÂð 2bh(x)−1 − 1+ 2bh(x)−1 − 1+ 1 = 2bh(x) − 1¤¢ öøÀ) û ùÂð ¥ üÞ÷ ÛìÀ h áÔ¤ ´¡¤¢ ¤¢ î Ý÷¢ üõ ÂÚþ¢ éÂÏ ¥Âè ¤¢ Âþ¥ . ÀµÆû ù¨ , ï Èþ¤ ¥ ù¢¨ ÂÆõ Âû ýø¤  ( Èþ¤ ßµª¢ ÂÑ÷Black-Height ¹µ÷ ¤¢. Àª Àû¡ËÖ÷ ´¡¤¢ «¡ ¥ 3 ´¬¡ ¤¬ ßþ
.¢ Àû¡ h2ÛìÀ Èþ¤
n ≥ 2h2 − 1 =⇒ 2
h2 ≤ n + 1 =⇒ h ≤ 2 log(n+1)
2
. ´¨ O(log n) ,RB ´¡¤¢ áÔ¤ : ¹µ÷
. Ýþ¤Þª üÞ÷ Â÷ ø ´¨ Âb ü x ¢¡ Ù÷¤ 4
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 86
ö¤ø¢ 3.7.3
¤±¹õ Íþª üÌã ¤¢ éÁ ø ¤¢ ÜÞä ¥ Àã RB ´¡¤¢«¡ üþ¥ ýÂû Âð ù¤ª ¤µ¡¨ ¤¢ üÂç þ Ýîä ¤ û ùÂð ¥ üÌã Ù÷¤ î Àª Ýû¡üõ ÓþÂã ( ¢ÂÚ³ ø ¢ÂÚµ¨¤ ) ö¤ø¢ ÛÞä ø¢ ¤Ñõ ßÞû . ÝþÞ÷ ñÞä×þ «¡ ¤¢ üóت ºû ÛÞä ø¢ ßþ î ´¨ ¼®ø Âþ¥ Ûت . ÝþÞ÷
. ¢Âî Àû¿÷ ¢¹þ üþø¢ø¢ ´¡¤¢À÷¥Âê î ÝþÞ÷ üõ Âê ¢ª üõ ô¹÷ ¢ÂÚ³ ö¤ø¢ ×þ î üõÚû : µØ÷
. Àª±÷ nil ÂÑ÷ ¢¤õ ùÂð ´¨¤Âç ö¤ø¢ ×þ  ¤¢ û Âð ù¤ª ú Âþ¥ Àª O(1) ¥ ö¤ø¢ î ´¨ ¼®ø
. À÷õ üõ Âç öøÀ à Âþ¨ ø ÀþÞ÷ üõ
y
x
x
y
β βα
αγ
γ
-Right-Rotate(T,y)
Left-Rotate(T,x)
Left-Rotate(T,x)
1. y ← right[x] // SET y
2. right[x] ← left[y] // Turn y’s left subtree into x’s right subtree
3. if left[y] 6= NIL then
4. p[left[y]] ← x
5. p[y] ← p[x] // Link x’s parent to y
6. if p[x] =Nil then
7. root[T] ← y
8. else if x= left[p[x]]then
9. left[p[x]] ← y
10. else right[p[x]] ←y
11. left[y] ← x // Put x on y’s left
12. p[x]← y
www.Bshams.ir
www.Bshams.ir
87 RED-BLACK ù¨ - ÃõÂì ´¡¤¢ .7.3
¤¢ 4.7.3üõ ÃõÂ ì ¤ x ¤ î ß þ ýÂ Ý þ Þ ÷ üõ ¤¢ ¤ x üø¢ø¢ ´¡¤¢ ¤¢ ¤¢ §¨  Àª ù¨ x ¤À Âð . À÷õ üõ ´ û ùÂð ôÞ ý 5bh î ´¨ ¼®ø , ÝþÞ÷¤¢ . Ýþø ¤ üõ y=uncle[x] å¨ Àª ÃõÂì x ¤À Âð õ À¨¤ üõ öþ ¤¢´¡¤¢ ¯Âõ 4 ´¬¡ ÐÔ ÜÂõ Âû ¤¢ î ´Æþ üܬ ùÀþ ýÀã ´ÞÆìáÔ¤ ý ¤ Àª üõ 3 ´¬¡ ý¤Âì ôÀä ¯Âõ î ¢õ ñت RB
ý ¤ ¤î ßþ ø ÝþÞ÷ ñ¨¤  äÔ¤ ¤ ÛØÈõ ø ÝþÞ÷ Û ´¡¤¢ üÜãêø ¢ª ¤Âì x ¤À ö¢ ù¨ ¯Âª þ ݨ Èþ¤ Ýû¢ õ¢ ¤ÀÖ÷  Ψ¼½Ê ´¨ ÃõÂì x ¤À î ü÷õ¥ ú ´¡¤¢ î Àª üõ ôÜãõ . ݨ úµ÷
.¢¤¢ ¥÷Ǫ ´¨ Parent[Parent[x]] ´¨¤ þ ² À÷¥Âê Parent[x] Ø÷ °Æ Â
:6 ´¨ ö¤Öµõ Âþ¥ ´ó ¨ ÂÚþ¢ ´ó ¨ î Àû¢ üõ ¤ øÔµõ ´ó. ´¨ ÃõÂì y : ñø ´ó
. ´¨ ©¤À ´¨¤ À÷¥Âê x ø ù¨ y : ôø¢ ´ó. ´¨ ©¤À ² À÷¥Âê x ø ù¨ y : ô¨ ´ó
üõ ù¨ ´¡¤¢ Èþ¤ 5 ´¬¡ ÐÔ ý RB-insert ý öþ ¤¢ : µØ÷. ¢ª
C
A D
B
y
xα
β γ
εδ
-A
C
D
Bα
β γ
δ ε
y
new x
C
B
A
D
x
α β
γ δ ε
-C
B
A γ
α β
D
δ ε
ñø ´ó
new x
y
Black-Height 5
¢ª üõ ßã y=uncle[x] Ù÷¤ §¨  ßþ 6
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 88
C
A
Bα
β
δ
ε
-ôø¢ ´ó
x
yC
A
B δ
y
x
α β
ε
?B
CA
α βε δ
x
ô¨ ´ó
RB-Insert(T,x)
1. Tree-Insert(T,x)
2. color[x]← RED
3. while x6=root[T] and color[p[x]]=RED do
4. if p[x] =left[p[p[x]]] then
5. y ← right[p[p[x]]]
6. if color[y] =RED then
7. color[p[x]] ← BLACK // Case 1
8. color[y] ← BLACK // Case 1
9. color[p[p[x]]] ← RED // Case 1
10. x ← p[p[x]] // Case 1
11. else if x = right[p[x]] then
12. x ← p[x] // Case 2
13. LEFT-Rotate(T,x) // Case 2
14. color[p[x]] ← BLACK // Case 3
15. color[p[x]] ← RED // Case 3
16. RIGHT-Rotate(T,p[p[x]]) // Case 3
17. else(same as then clause with ”right” and ”left” exchanged)
18. color[root[t]]←BLACK
www.Bshams.ir
www.Bshams.ir
89 RED-BLACK ù¨ - ÃõÂì ´¡¤¢ .7.3
1114
7
2
1
5 8
4
15-case 1
x
11
2
?case 2
7
4
15x
y
7
8
14case 3y
2
7
112
4
15
1
x
x
51
ùÂð ×þ ¤¢
14
15
5
4
11
1
5 8
14
éÁ 5.7.3
ô÷ üµÒÔ ùÂð ×þ RB-Delete ý¥¨ ù¢ ¤¢ ý¥Âõ Íþª ý¥¨ ù¢¨ ýÂî ´¨ üþû Ôóõ öÞû ýø ùÂð ßþ . ÝþÞ÷ üõ ÓþÂã T ´¡¤¢ ý nil[T]
Âþ¨ ø Àª üõ ù¨ DZüª ßþ Ù÷¤ Ôóõ . ¢¤¢ ¢ø ´¡¤¢ üóÞãõ ýû ùÂ𠤢. À÷ÂÚ ù¿ó¢ Âþ¢Öõ À÷ üõ û Ôóõ
üóÞãõ ùÂð ×þ À÷õ nil À÷¥Âê ×þ Ý÷ üõ üµÑê½õ DZ üª ßþ¥ ù¢Ôµ¨ DZ üª ßþ ¯Âõ Parent Ôóõ ù¢Ôµ¨) ÝþÞ÷ ¤µê¤ Àª üõ x ©¤À î ´¡¤¢(. Àª üõ while ÖÜ ý ßóø ø RB-Delete-Fixup ü÷¡ Âê ¤¢ üµÑê½õ
ßþ ¤¢) Ýû¢ ù¤ª nil[T] ¤ nil ýûÂð ù¤ª ôÞ RB ´¡¤¢ ¤¢ Àþ ßþ¤¢ ýù¢Ôµ¨ Ûì ø «¡ ¤ÀÖõ ¥û DZ üª ßþ ÂÒµõ Parent Ôóõ , ÜÂõ
(.¢¤À÷ ¢¡, ¹µÆ üø¢ø¢ ´¡¤¢ ¥ éÁ À÷õ üªø¤ Àµ ÂÊä ×þ éÁ ýÂÝþÞ÷ ´ì¢ Àþ. ÝþÞ÷ üõ ¼½Ê ¤ ´¡¤¢ ų¨ ø éÁ ¤ ÂÑ÷ ¢¤õ ÂÊäý¹µÆ ´¡¤¢ ¤¢ ¢¡ ýµÞû RB ´¡¤¢ ¥ éÁ ¯Âõ ¤µ¨¢ ±ª îüõ ù¤ª nil[T] nil ýûÂð ù¤ª RB ´¡¤¢ ¤¢ ö ´Æ÷ öÆØþ fÖì¢ üø¢ø¢
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 90
. ¢ª üõ üû¢ ¤ÀÖõ üϪ ºû öøÀ 7 Í¡ ¤¢ Parent[x] Ôóõ ß»Þû ø ÀþÞ÷
. ´êÂð Àû¡ ¤ÀÖõ nil[T].Parent, Àª nil ï ×þ x î Ýû ü¤¬ ¤¢  þ¥16 ¯Î¡ ¤¢ ´¡¤¢ , Àª ù¨ y Ù÷¤ î ü¤¬ ¤¢ , ùÀª Âî£ Âç ø¢  ùøäRB ´¡¤¢ ¤¢ 4 ´¬¡ ¢ª üõ ¼½Ê RB-Delete-Fixup ü÷¡Âê 17 ø
. ¢ª üþ¥ùÂð ö ¢¡ þ ¢ª ü÷¡Âê T ´¡¤¢ ýø¤  z ùÂð RB-Delete Âð : µØ÷¤µ¨¢ ôø¢ ´ó ¤¢ . ¢ª üõ éÁ ö (Successor) ýÀã ÂÊä þ ¢ª üõ éÁ
. Àª Àû¡  Ã÷ Key[z]:=Key[Succ(z)]
. Ýõ÷ üõ y ¤ ùÀª éÁ ùÂð : ¢¢¤Â줱ä y ¥ µªÁ𠤢 î ýÂÆõ ¢ª üõ °õ ö ¥ éÁ , Àª ù¨ y Âðßµê¤ ß ¥ ¶ä ßþ ø Àª µª¢ û ÂÆõ Âþ¨ ¥ µÞî ù¨ ùÂð ×þ , ù¢Âî üõùÂð Ý÷µ Øþ Âê ¤ ÛØÈõ ßþ Ý÷ üõ õ . ¢ª üõ ´¡¤¢ ¤¢ 4 ´¬¡×þ ¤ ( ´¨ ù¢ y öÀª éÁ ¥ Û±ì y ùÂð ´¨¤ þ ² À÷¥Âê ´ÖÖ ¤¢ î) x
ùÂð ø¢ ¥ ¤±ä ýãõ x ùÂð ¥ ¤±ä üãþ . ÝþÞ÷ Û , Ýî ù¨ Â ê® ¤x üãþ ©À÷¥Âê ¤ ö Ù÷¤ Ýî üõ éÁ ¤ y ùÂð î ü÷õ¥ ßþ . Àª ù¨¥ ©¢¡) . Àª ùÀª ù¨ ¤ø¢ x ¢¤¢ öØõ î ´¨ ßþ ÛØÈõ ú . ݵ¨Âê üõ
. ¢ª üõ ´¡¤¢ ¤¢ 1 ´¬¡ ßµê¤ ß ¥ ¶ä ßþ ø ( Àª ù¨ ۱촡¤¢ ¤¢  äÔ¤ éÂÏ ¤ üê® ù¨ Ù÷¤ ×þ î ´¨ ßþ õ éÀû
: ݨ Âþ¥ ýû ´ó ¥ üØþ ݵ¨ÂÔ
. ÝþÞ÷ üõ ù¨ ¤ ö õ ´ó ßþ ¤¢ î ÀþÞ÷ ù¤ª ÃõÂì ùÂð ×þ x ( Óó
. ´¡À÷ ¤ø¢ ö üõ ¤ üê® ù¨ , ´ó ßþ ¤¢ î Àî ù¤ª Èþ¤ x (
. ¢Þ÷ ¤ 1 ´¬¡ öµ ¢À¹õ ýÃõ Ù÷¤ ø °¨õ ýû ö¤ø¢ (
4 ´¨ ßØÞõ ݨ ´ã®ø ¨ ¥ üØþ î ÝþÈ÷ Õêõ ÜÂõ ×þ ¤¢ ÂðÀª ´¨¤ þ ² À÷¥Âê x Øþ °Æ  ´ÖÖ ¤¢) Ýþª ø¤ ø ¤ øÔµõ ´ó
: û ¢¢¤Âì (. Àþ üõ ¢ø ö¤Öµõ ø¢ ø¢ ´ã®ø 8
. ¢¤¢ ù¨ °Æ  ø¢ î ´¨ ý ùÂð x ÜÂõ Âû ¤¢ •
. ¢ Àû¡ w=sibling(x) •
ߪø¤ ýµÆî¡ ýû ùÂð ø ÃõÂì ýµÆî¡ ýû ùÂð , ù¨ Ù÷¤ ù ýû ùÂð •. c’,c À÷õ ´¨ ôÜãõ÷ Ù÷¤ ùÂð ÂÚ÷ þÞ÷
www.Bshams.ir
www.Bshams.ir
91 RED-BLACK ù¨ - ÃõÂì ´¡¤¢ .7.3
: ´¨ Âþ¥ ¤¬ Àþ ¢ø ´¨ ßØÞõ î üþû ´ó
( ¢¤¢ ù¨ öÀ÷¥Âê ßþ ) ´¨ ÃõÂì w(1
. ´¨ ù¨ ©À÷¥Âê ø¢ ø w(2
. ´¨ ù¨ ö ´¨¤ À÷¥Âê ø ÃõÂì ö ² À÷¥Âê ø ù¨ w(3
. ´¨ ÃõÂì ö ´¨¤ À÷¥Âê ø ù¨ w(4
B
A D
C Eα β
x
...
...
δ ξγ ε
-case 1D......
B
CA
E
α β γ δ
ε ξx new x
(a)
B
A D
C Eα β
γ δ ε ξ
-(b)
...
...
case 2x
B......
A D
C Eα β
γ δ ε ξ
B......
DA
EC
x w
new x
α β
γ δ ε ξ
-case 3
(c)
B......
A C
D
E
α β γ
δ
ε ξ
new wx
c c
c c
B......
A Dwx(d)
-
D......
B
C
case 4
C E Ac’
E
c c
α
α
β
βγ γδ
δε
ε
ξ
ξ
new x =root[T]
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 92
ö¤ø¢ ô¹÷ ø ÂÚþÀØþ B ø D ýû ùÂð Ù÷¤ Ëþã 1 ´ó : ñø ´ó (1. ¢ª üõ ÛþÀ± 4 þ 3 þ ø 2 ýû ´ó ¥ üØþ ¢Âð ²
ÃõÂì ´¨ ùÀª ù¢¢ ÇþÞ÷ x Âð ù¤ª î üê® ù¨ Ù÷¤ : ôø¢ ´ó (2ÕþÂÏ ¥ Âð . ¢ª üõ ÛÖµõ  áÔ¤ ×þ B x ö¢¢ ù¤ª ø D ö¢Âî. À¨¤ Àû¡ öþ ÖÜ ´¨ ÃõÂì c ö ݪ ùÀª 2 ´ó ¢¤ø ñø ´ó
ö¤ø¢ ×þ ô¹ ÷ ø D ø C ýû ù ð Ù÷¤ Ëþ ã 3 ´ó : ô¨ ´ó (3. ¢ª üõ ÛþÀ± 4 ´ó ¢ÂÚµ¨¤
ä ö üõ ¤ ´¨ ùÀª ù¢¢ ÇþÞ÷ x î üê® ù¨ Ù÷¤ 4 ´ó ¤¢ (4¢¥ ÞÎ ó ´¡¤¢ «¡ Ø ÷ öøÀ ¢Â ð ² ö¤ø¢ ×þ ø Ù÷¤ À ö¢Âî
. À¨¤ üõ öþ Ü Âõ ßþ ¤¢ ÖÜ ø ¢Þ÷ éÁ
. ´¨ O(lg n) ¥ Ýû ݵþ¤Úó ßþ öõ¥RB-Delete(T,z)
1. if left[z]=nil[T] or right[z]=nil[T] then
2. y ← z
3. else y ← Tree-Successor(z)
4. if left[y] 6= nil[T] then
5. x ← left[y]
6. else x ← right[y]
7. p[x] ← p[y]
8. if p[y] = nil[t] then
9. root[T] ← x
10. else if y = left [p[y]] then
11. left[p[y]] ← x
12. else right[p[y]]← x
13. if y 6= z then
14. key[z]← key[y]
15. // if y has other fields , copy them , too
16. if color[y] = BLACK then
www.Bshams.ir
www.Bshams.ir
93 RED-BLACK ù¨ - ÃõÂì ´¡¤¢ .7.3
17. RB-Delete-Fixup(T,x)
18. return y
RB-Delete-Fixup(T,x)
1. while x 6= root[T] and color[x] =BLACK do
2. if( x = left[p[x]]) then
3. w ← right[p[x]]
4. if( color[w]=RED) then
5. color[w]← BLACK //case1
6. color[p[x]]←RED //case1
7. LEFT-Rotate(T,p[x]) //case1
8. w← right[p[x]] //case1
9. if(color[left[w]]=BLACk and color[right[w]]=BLACK) then//case1
10. color[w]=RED //case2
11. x← p[x] //case2
12. else if color[right[w]]=BLACK then
13. color[left[w]] = BLACK //case3
14. color[w]← RED //case3
15. RIGHT-Rotate(T,w) //case3
16. w←right[p[x]] //case3
17. color[w]←color[p[x]] //case4
18. color[p[x]]←BLACK //case4
19. color[right[w]]← BLACK //case4
20. LEFT-Rotate(T,p[x]) //case4
21. x←root[T] //case4
22. else(same as then clause with ”right” and ”left” exchanged)
23. color[x]← BLACK
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 94
(Disjoin sets)ùõ ýû äÞ¹õ 8.3á÷ ßþÂù¢¨.Àõ÷ üõ ùõ Àª üú ø¢ ö íµª ùðÂû ¤ AøB äÞ¹õ ø¢°Æ nø ...ø2ø1 ýû ù¤Þª î ýÌä näÞ¹õ ý¥¨ ù¢ ý ýù¢¢
.´¨þ¤¥ù¢Ôµ¨À÷ù¢¤¡Ã¹õ ýû µ¨¢ î ¤ nø...ø2ø1 äÞ¹õ¬ä ö üõ ü𢨠þ¤ ×þö ÝÞ÷ üõ ÂÊä ô÷ ¤ äÞ¹õ Âþ¥ Âû ¤Ñõ ßþ ý .¢¢ ÇþÞ÷À÷ùÀª ¥Âêüõ ¤Âì ÝÞ÷ üõ ÂÊä ßÞû  ¤ ¤À ÂÊä ö  ùøä ø ù¢Þ÷ É¿Èõ
. ÝþÞ÷ üõ üû¢¤ÀÖõ ö ýû ÅþÀ÷Âþ¢Öõ ¤ set þ¤ Ã÷ Àµ ¤¢. Ýû¢
set=1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 set
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1=1 , 5 2=2 , 4 , 7 , 10 3=3 , 6 , 8 , 9
1
5
2
4 7 10
3
6 8 9
. Ýû¢ üõ ¤Âì set þ¤ ¤¢ ¤ ©¤À ùÂð ¢Àä ÂÊä Âû ý ų¨set
1 2 3 2 1 3 2 3 3 2
1 2 3 4 5 6 7 8 9 10
function find1(x)
find the lable of the set containing xreturn set[x]
ݵþ¤Úó ßþ. À÷¢Âð üõ ¤ ¢¤¢ ¤Âì ö ¤¢ x î ýäÞ¹õ °Æ find1 â. ´¨ θ(1) ¥
öõ¥.ÀþÞ÷ üõ ôè¢ Ýû ¤ ÀµÆû bø a Ûõª î ýäÞ¹õ ø¢ merge1 â. ´¨ θ(n) ¥ â ßþ
www.Bshams.ir
www.Bshams.ir
95 (DISJOIN SETS)ùõ ýû äÞ¹õ .8.3
function merge1(a,b)
merge the sets labled a and b i←min(a,b)
j←max(a,b)
fork←1 to n do
if set[k] = j then set[k]← i
merge2 ø find2 â ø ÝþÞ÷ üõ °î ýÂÚþ¢ ¤¬ ¤ äÞ¹õ ø¢ ñ: Ýî üõ ÓþÂã Âþ¥ ¤¬ ¤
function find2(x)
r ←x
while(set[r] 6= r) do
r←set[r]
return r
function merge2(a,b)
if(a<b) then set[b]← a
else set[a]← b
merge2 â ø ´¨üΡ·îÀ áÔ¤ ´ó ßþÂÀ ¤¢Âþ¥ ´¨ O(n) ¥find2 â. ´¨  ú üܱì ݵþ¤Úó ´±Æ÷ î ´¨ θ(1) ¥
ݵþ¤Úó ¤¢ ´¨ µØî ö °ÆÂ î ´¨ ýÀÜî Èþ¤ ÀÜî üÜ±ì ´¡¤¢ ø¢ ¤¢ö öÀª ï¤Ã ¥ø¢Âî ¤î áÔ¤ ýø¤ Àþ Å ´¨ ýÂµÈ öõ¥ ý¤¢ find ôø¢
.¢Âî ýÂðܤ ´þóø ø ÝþÂð üõ ÂÑ÷ ¤¢ üäÔ¤ ´¡¤¢ ¥ ùÂð Âû ý ¤Ñõ ßþ ýÂ
. ÀÜî ö¢ ×î ÷ Ýû¢üõ ¤Âì áÔ¤: ÝþÞ÷ üõ ÓþÂã Âþ¥ ¤¬ ¤ find3 ø merge3 â ¤¬ ßþ ¤¢
function merge3(a,b)
if(height[a] = height[b])
www.Bshams.ir
www.Bshams.ir
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ .3 ÛÊê 96
set[b]← a
height[a] ++
r← a
else
if(height[a]>height[b]) then
set[b]← a
r ← a
else
set[a] ← b
r ← b
return r
function find3(x)
r ← x
while(set[r] 6=r) do
r← set[r]
i←x
while i6= r do
j ← set[i]
set[i] ← r
i ← j
return r
.´¨ÂµÞî Ã÷ log n¥Ýµþ¤Úó ßþ öõ¥
www.Bshams.ir
www.Bshams.ir
4 ÛÊê
Óܵ¿õ ýû ©ø¤ üêÂãõüÆþ÷ ݵþ¤Úó
üÆþ÷ õ÷ ýû ©ø¤ á÷ .4
ù¤ ª  þ¥ ¢¤ õ ö ü õ ü Æ þ ÷ õ ÷ ý û × Ø á ÷ ¥:¢Þ÷
÷Êþ ×Ø •
Û ø ÝÆÖ ×Ø •
þ üÆþ÷õ÷ ×Ø •
°Öä ´Èð¥ ×Ø •
À ø ¡ª ×Ø •
û ý¥ ´Þ÷¤ ×Ø •
üóÞµ ýû ݵþ¤Úó •
ý¥õ ýû ݵþ¤Úó •
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 98
(Greedy Algorithms) ÷Êþ ýû ݵþ¤Úó 1.4.ÀµÆû üÆþ÷ ݵþ¤Úó ýû ©ø¤ ßþ ù¢¨ âìø ¤¢ø µ¨¢ ßóø û ݵþ¤Úó ßþ©¥¤  ñ ßä ¤¢ ø ßþ ´¤ ¢ª üõ ü㨠ù¤Þû Û ý ©ø¤ ßþ ¤¢Û ý ©ø¤ ×þ âìø ¤¢ ÷ÊþÂ×Ø.¢ª ¿µ÷ ôð Âû ¤¢ Û ù¤ ßþ©ø¤ ßþ ¤¢ î ´Æ÷ ©ø¤ ßþ ¤¢ ´Þû à µØ÷ õ .´¨ ý¥¨ ú ÛÆõ ´¨ ßØÞõ ÂÊä ßþ ©¥¤  ¿µ÷ î ¢¤À÷ ¢ø á®õ ßþ èÀè¢ ÃðÂû
.¢ª üúµõ ´Æ ß þ ø û ¢ª ¹õ Û ×þ Ø÷ ý:´¨Âþ¥ Control Abstraction ÕÎõ ÷Êþ ݵþ¤Úó ×þ ¤µ¡¨
Fuction Greedy(C):set //solution set
C is a set of condidates
S ← ∅ S ⊆ C is a set of solution ,if it is possible
Greedy loop
While (C 6= ∅ & not Solutions(S))
x ← Select(C)
C ← C \ x
if feasible ( S ∪ x ) then
S ← S ∪ x
if (solution(S)) then return S
else ” there are no solutions.”
î ¤ Âû ¢ª üõ ê® äÞ¹õ ¢ø ¤¬ ¤¢ ´¨ üúÀµ¤¢ S
éÁ C äÞ¹õ ¥ fÀäì Àî üõ ¿µ÷ ¤ C äÞ¹õ ¥ ÂÊä ×þ Select âC äÞ¹õ ¥ ÂÊä ö¢Âî ê® þ î ´Æþ feasible â ÔÒø .¢ª üõsolution , feasible ø Select â óbÆõ á÷ µÆ.¡ þ ´¨ ßØÞõ S äÞ¹õ
. ÀµÆû Âç Ûì
ßÞêû ý¥¨ ù¢ÂÈê ݵþ¤Úó 1.1.4
ý¢ø¤ø õ ÷ ©ø¤ ßþ¤¢ . ´¨ ßÞêû ©ø¤ û Ûþ ê ý¥¨ ù¢ÂÈê ©ø¤ ×þ¤¢ µê¤ ¤î ýû Æþ÷ ¥ ×þ Âû Å÷îÂê ų¨ ¢ª üõ ´êþ¤¢ Æþ÷ Æþ÷û Æþ÷ ü÷øÂê ¥ ù¢Ôµ¨ Ýû¢ üõ ¤Âì üóøÀ ¤¢ ¤ ö ø¢¢Âð üõ ±¨½õ ßµõ
:Ýî üõ Âþ¥ ª üø¢ø¢ ´¡¤¢ ×þ
www.Bshams.ir
www.Bshams.ir
99 (GREEDY ALGORITHMS) ÷Êþ ýû ݵþ¤Úó .1.4
ý¤¢ î ý ù ð ø¢ ų¨, Ý þ¥ ¨ ü õ ¤ ´¡¤¢ ¥ ïÂ × þ Æ þ ÷  û ý¥ Ýþ¥¨ üõ ¤À ùÂð ×þ ùÂð ø¢ ö ý ø ù¢Âî °î Ýû ¤ ÀµÆû ýµÞî Å÷îÂêø¢ ß .´¨ ö ùÀ÷¥¨ ùÂð ø¢ ýû Å÷îÂê áÞ¹õ  ¤À ùÂð ßþ Å÷îÂê î Ýû¢ üõ õ¢ ¤ À÷ø ¤ ßþ À÷ ùÀÈ÷ µêÂð ý¥ ñ½ î üþû ùÂð ø ¡ ùÂð û ï ýû Å÷îÂê áÞ¹õ Àþ Èþ¤ Å÷îÂê.Àþ ´¨¢ ´¡¤¢Èþ ¤ÂÑ÷ ¤¢ ×þ þ ÂÔ¬ °Æ ×þ ´¡¤¢ ñþ Âû ý Àª µ¡¨ ´¡¤¢ î ñ ,ÀªÂÔ¬ °Æ  ¤ ² ´Þ¨ ñþ Âû ø ×þ °Æ ¤ ´¨¤ ´Þ¨ ñþÂû. ÝþÂð üõüõ ´î û ï ´Þ¨ Èþ¤ ´Þ¨ ¥ î ýÂÆõ üÏ ¤¢ °Â ßþÀ .Ý÷¥ üõö ÂÒµõ Àî µª¤ ö î Àõ Àû¡ ´¨À ï ÂÒµõ ýÂþ Èþ¤ ×þ, Ýî
. ´¨ ïÂ¥ Ý þ¤¢ ¤ µ ¡ ¤¢ ü þ ± Ô ó é 7000 Û õ ª ü µ õ À î  ê ñ · õ ý 1100, Dé 1800 ,Cé 900, Aé 1200, B é 1800 ¢Àã ßþù¢ÂÈê ý ô¥ ýû ´ ¢Àã ÛìÀ Ýû¡ üõ. Ýþ¤¢ Mé 200ø EéÂ
. Ýþ¤ø ´¨¢ ¤ ßµõ ßþý¥¨
1200 1800 900 1100 1800 200
3000 1100
2200
4000
7000
0
0 0
0
01
1
1
1
1
A=00 B=01 C=1000 E=101 D=11 M=1001
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 100
ö üõ °Â ßþÀ.¢¤¢ ýµØî Àî , ¢¤¢ ý Å÷îÂê î ýÂÊä´ó ¤¢ µî¤î Âû ñ·õ ßþ ¤¢ .¢¢ ÇþÞ÷ ¤ äÏ Ûî , Ñê ¥ ýµÞî ¤ÀÖõ Âð ý¥¨ ù¢ÂÈê ¥ Å î üó ¤¢,ÀþÞ÷ üõ ñçª ¤ Ñê ¥ ´8 ý¢äñçª ¤ ´ 4·îÀ µî¤î Âû Ýû¢ ¤Âì ¤ ©ÂÒµõ üþø¢ø¢ Àî µî¤î Âû ý
:Àþüõ ´¨¢ Âþ¥ ¤¬ ñ·õ ßþ ¤¢ ùÀª éÂÊõ ýû ´ Ûî.ÀþÞ÷ üõ2 ×1200 +2 ×1800+4×900+3×1100+2×1800+4×200=17300
.Àª üõ 7000×8=56000üãþ ö ý¢ä ´ó ¥ µÞî ¤Æ îý ¤ î ß þ ý , Ý þ Þ ÷ ù¢ÂÈ ê ¤ DBAD µª¤ Ý û¡ üõ ñ · õ ö ä ×þ ñ¢ãõ î Àþ üõ ´¨¢ 11010011 Àî ø ù¢¢¤Âì ¤ ö ñ¢ãõ µî¤îÂûÝ÷À Ýû¡ üõ Ýþ¤¢ ¤ 01001001101Àî ÅØä þø ´¨ X f ·õ µî¤îýÂþ Àî ´¨¤ ² ´Þ¨ ¥ ¤î ßþ ý ,Àª üõ ýµª¤ ñ¢ãõ Àî ßþݨ ÂÑ÷ ¢¤õ µî¤î ù¢Âî ñ±÷¢ ¤ ö ´¡¤¢ Èþ¤ ¥ öõÃÞû ø ùÀ÷¡ ¤
.Àþ üõ ´¨¢ BAME ýµª¤ °Â ßþÀ.Àþ üõ ´¨¢ ¢Âê Âʽõ ¤¬ û Àî ßþ ¥ ôÀî Âû î ´ª¢ Àþ
.Àª üÞ÷ µð¤Ã Àî ¥ ýÀ÷È ÂµØî Àî Âû øÀ ¤¢ ´ó ßþ ¤¢ Ýî Àî ßÞêû ©ø¤ Ýû¡ üõ ¤ µî¤î n î ÀîÂêÀû¢ üõ ¤ ü÷õ¥ ´ó ßþµð¤Ã . ¢ Àû¡ n-1 Æþ÷ ·îÀ ñÏ öõ¥ ßþÂ. ´¨ ô i-1 1 ÂÊä ¥ ü÷øÂê áÞ¹õ ¥ µð¤Ã ö ü÷øÂê ô i ÂÊä ý î
1 2 4 8
3
7
15 .........................................................
................
www.Bshams.ir
www.Bshams.ir
101 (GREEDY ALGORITHMS) ÷Êþ ýû ݵþ¤Úó .1.4
MST ñÞõ ýª ´¡¤¢ ýû ݵþ¤Úó 2.1.4
§¤ äÞ¹õ îÀª ù¢¨ ¤¢ ´ú ÂèÀ±Þû éÂð ×þ G=<N,A> ÀîÂêî ´¨ üµ¡¤¢ éÂð ßþ¥ª´¡¤¢ ×þ¥¤Ñõ.ÀªAö ýúóþ äÞ¹õø N ö´¨ éÂð ßþ ýúóþ ¥ ü¡Â Ûõª ñ ßä ¤¢ üóø ù¢ éÂ𠧤 Þû Ûõª
.( ¤ø¢ ÀìêøÀ±Þû)Àª ´¡¤¢ ¢¡ ùÀõ ´¨À ¤µ¡¨ Øþ¤Î: Ìì
:Àª ¤Âì üþú Âþ¥ ýû ù¤Ãð ¥ ×þ Âû ÂðúøÂð ´¨ ´¡¤¢ T=<V,E>
.(û ñþ ¢Àã q , §¤ ¢Àã p) p=q+1 ,Àª ¤ø¢ Àìê T .1. p=q+1ø À±Þû T .2
.Àª µª¢ ¢ø ÂÆõ ×þÖì¢ ÃþÞµõ §¤ ø¢Âû ß .3.Àª ¤ø¢ Àìê ø À±Þû .4
 ö ñ þ  û î ü µ ¡¤¢)¤¢ ÷ È ÷ ´ ¡¤¢ pp−2 ½ Ô ¬ ¤¢ Î Ö ÷ p .¢Âî ݨ¤ ö üõ( ¢¤¢ °Æ
: ñ·õ´¡¤¢ pp−2 ý¤¢ Kp Ûõî ´¡¤¢ :üÞû¤)?¢¤¢ ª ´¡¤¢ À Âþ¥ éÂð
(.´¨ ª
︸ ︷︷ ︸ ︸ ︷︷ ︸K3 K4
:Û
33−2 × 44−2 = 48
ö ýúóþ ¥ ×þ Âû îÀª ¤¢ ö¥ø éÂð ¤îÁõ Íþª G éÂð Âð ñßþ ¥ ÝÞ÷ üõ ýª ´¡¤¢ ×þ ö üõ Àª ù¢¤¡ °Æ  üÔõ÷ ý¢Àä(minimum spaning tree) ÝÞõ ýª ´¡¤¢ ×þ ¥ ¤Ñõ¢Âî ¿µ¨ éÂð
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 102
áÞ¹õ Øþ¤Î ´¨ ö ýúóþ ¥ ü¡Âø éÂ𠧤 Þû Ûõªî ´¨ üµ¡¤¢. ´¨ Þî ª ýû ´¡¤¢ Âþ¨ ß ¤¢ ö ýúóþ ö¥ø
× þ ý¤¢ f Þ µ ù¢ ¨ ¤¢ ´ ú Â è ¤¢ ö¥ø À ± Þ û é ð  û: À÷µõ Øþ üãþ Àª±÷ ¢Âê Âʽõ À÷ üõ õøÃó î ´¨ ÝÞõ ýª ´¡¤¢
.Àþ ´¨À ª ´¡¤¢ ßþ ¥ Ç: ¢¤¢ ¢ø ÝÞõ ýª ´¡¤¢ ßµêþ ý ݵþ¤Úó À üÜî ¤Ï
Prim , Kruskal, Boruvka ,Sollin
:kruskal ݵþ¤Úó
:¢¥¨ üõ ¤ ñÞõ ýª ´¡¤¢ ×þ Âþ¥ ùª ݵþ¤Úó ßþ¢Àã äÞ¹õ n ų¨ ÀØõ °Âõ ý¢ã¬ °Â ¤ éÂð ýúóþ Àµ¥ äÞ¹õ ¬ä î ´¨ ßþ  Âê)¢¥¨ üõ éÂ𠧤 äÞ¹õ ¬俵÷ ñþ n-1 ¢Èõ ¤ÂؤÀì ö greedy ÖÜ ñ( À÷ù¢¤¡ °Æ n 1find â ų¨ Àª µª¢ ¤ ßØÞõ ö¥ø ßþµÞî î ¢ª üõ ¿µ÷ üóþ. À÷ª±¨½õ find(v) ,find (u) Àª e=uv Âð üãþ¢Èõ ü÷¡Âê ñþ ßþ¨ ø¢ ýÂù¢øÃê éÂð ýúóþ äÞ¹õ ¤îÁõ ñþ Àª±÷  ø¢ ßþ Û¬ Âð.À÷ª üõ°î Ýû À÷ ùÀõ ´¨¢ find(v),find(u) ¥ î ý Ôóõ ø¢ ß Ýû ¢Èõ
.¢ª ñþ n-1 Ûõª T Àþ üõ õ¢ ¤ÀÖ÷ À÷ø ¤ ßþÀ÷ª üõ
function kruskal(G=< N,A > : graph,length :A → R+): set of edge
sort A by increasing length
initialize n sets , each set containing an element of N
T← ∅greedy loop
repeat
e←u,v
A← A \ eucomp←find (u)
vcomp←find (v)
www.Bshams.ir
www.Bshams.ir
103 (GREEDY ALGORITHMS) ÷Êþ ýû ݵþ¤Úó .1.4
if(vcomp 6= ucomp) then
T←T ∪e
merge(ucomp,vcomp)
until T is containing n-1 elements
return T
:ÀþÂÚ ÂÑ÷ ¤¢ ¤ Âþ¥ éÂð ñ·õ öä
1 2 3
4 5 6
7
1 2
64
3
37
4
54 68 3
3
4
4
1 2
step T connected components
initialization - 12345671 1,2 1,2345672 2,3 1,2,345673 4,5 1,2,34,5674 6,7 1,2,34,56,75 1,4 1,2,3,4,56,76 2,5 reject
7 4,7 1,2,3,4,5,6,7
.n log n Ýþ¤¢ ü÷¡Âê ¤ n Å , ´¨ log n ù¥À÷ merge,find öõ¥ ßþ ¤¢: Ýþ¤¢ üêÂÏ ¥. §¤ ¢Àã n ø ´¨úóþ¢Àã |A| = a
(n− 1) ≤ a ≤ n(n−1)2
⇒ log (n− 1) ≤ log a ≤ log n + log (n− 1)− log2
⇒ log n ≤ log a ≤ 2 log n
.¢ Àû¡ O(a log a)¥ sort öõ¥ Å ´¨logn ¤¢ Ýû log a Å
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 104
: Prim ݵþ¤Úó
:¢¥¨ üõ ¤ ª ´¡¤¢ Âþ¥ ùª ݵþ¤Úó ßþ¢ÂðüõÂÑ÷ ¤¢ ´¨ G éÂ𠧤 ¥ üØþ Ûõª î ¤ B ô÷ ý äÞ¹õ Àµ´Æ÷ B ¤¢ ö ÂÚþ¢ ¨ ø ´¨ B ¤¢ ú÷ ¨ ×þ î éÂð ýû ñþ ôÞ ß Å³¨ê® B ¤ ÂÚþ¢ §b¤ ų¨,Àª µª¢ ¤ °Æ  ßþµÞî î Àþ üõ ¤ üóþ ,.¢ª éÂ𠧤 üãþ N äÞ¹õ  B ÀûÀõ õ¢ ¤ÀÖ÷ ¤ À÷ø ¤ ßþ.Àî üõý¥¨ ù¢ (üÆþÂõ ) ýÀã ø¢ ýû þ¤ ù¢¢ öÞµ¡¨ ¤ ݵþ¤Úó ßþ ÂðÝî ý¥¨ ù¢ binary heap ×þ Âð õ . ´¨ O(n2) À ¤¢ ô¥ öõ¥ ÝþÞ÷öõ¥ ÝþÞ÷ ý¥¨ ù¢ fibonacci heap Âð ø ´¨ O((a + n)logn) öõ¥Âç ¤  öõ¥ ý ù¢¢ öÞµ¡¨ ø ý¥¨ ù¢Âç Å. ´¨ O(a + nlogn) Â
.Àû¢ üõfunction Prim(G=< N, A >:graph,length:A −→ R+):set of edges
B ←− an arbitary element of NT ←− ∅
while B 6= N do
e ←− u,v such that e is minimum and u∈ B,v∈ N\B
T ←− e ∪ T
B ←− B ∪ v
: ¤ø¹õ ÅþÂõ ÕþÂÏ ¥ ý¥¨ ù¢
function Prim(L[1..n,1..n]):set of edges
1. initialization : only node 1 is in B2.T ←− φ will contain the edges of the minimum spanning tree
3. for i=2 to n do
4. nearest[i] ←− 1
5. mindist[i] ←− L[i,1]
6. greedy loop
7. repeat n-1 times
8. min ←∞
9. for j ←2 to n do
10. if 0≤ mindist[j] < min Then
www.Bshams.ir
www.Bshams.ir
105 (GREEDY ALGORITHMS) ÷Êþ ýû ݵþ¤Úó .1.4
11. min ← mindist[j]
12. k ← j
13. T=T ∪ nearest[k],k
14. mindist[k] ← -1add k to B
15. for j ← 2 to n do
16. if L[j,k] < mindist[j] Then
17. mindist[j] ←L[j,k]
18. nearest[j] ←k Return T
: heap PRIM ݵþ¤Úó ý¥¨ ù¢
HEAP-PRIM(G)
1. A ←− φ
2. for each x ∈ V do key[x] ←−∞
3. H ←− Build-heap(key)
4. select arbitrary vertex v
5. S ←− v
6. Decrease-key(H,v,0)
7. Extract-min(H)
8. for each x adjacent to v do
decrease-key(H,x,w(v,x)), π [x] ←− v
9. for i=1 to |V| - 1 do
10. begin
11. Extract-min(H),let v be the vertex
12. A ←− A∪ (v,π[v])
13. S ←− S ∪ v
14. for each x ∈ V-S adjacent to v do
15. if w(x,v) < key[x] Then
16. Decrease-key(H,x,w(x,v)),π[x] ←−v
17. end
18. return A
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 106
: ݵþ¤Úó Ãó÷öõ¥ ø ö ´ó ø¢ î.¢ª ý¥¨ ù¢ À÷ üõ ¤¬ ø¢ heap ݵþ¤Úó ßþ ¤¢
: ´¨ ùÀª ù¢¢ ª Âþ¥ ¤¢ û ö ý ô¥
:binary-heap ¥ ù¢Ôµ¨ •üõ key[x] óø  þ¢Öõ heap ×þõ ý î Build-heap â ´ó ßþ ¤¢heap ¤ÀÖõ ßþµØî Extract-Min â .¢Âð üõ O(|V |)  ü÷õ¥ , ¢¥¨ö¢¤ø ´¨¢ ´ó ßþ ¤¢ î,¢¥¨ üõ ¤¡ heap ¥ ¤ ö øÀ÷¢Âð üõ  ¤Àþ ų¨,¢¤¢ ¤Âì Èþ¤ ¤¢ ¤ÀÖõ ßþ Âþ¥, ´¨ Θ(1)¥ heap ¤ÀÖõ ßþµØî×þ ù¤ø¢ ø ÝþÞ÷ ö ßþÃÚþ ¤ heap ÂÊä ßþ¡, µª¢Â ¤ ¤ÀÖõ ßþ
.Àª üõ O(log|V |) ¥ ÜÞä ßþ î, Ýî À ´¨¢ heap
üõ ßþÃÚþ ýµØî ¤ÀÖõ ¤ heap ¥ÂÊä ×þ ¤ÀÖõ Decrease-Key âßþ ´ó ßþ ¤¢ î , ÀþÞ÷ üõ ý¥¨¥ ¤ heap ¤µ¡¨ ù¤ø¢ ų¨ ø ÀþÞ÷
.Àª üõ O(log|V |) ¥ Ã÷ ÜÞäO(|E|log|V | + |V |log|V |) = ¥ Ý µ þ¤ Ú ó Û î ö õ¥ ° Â ß þ
.Àª Àû¡ O((|E| + |V |)log|V |)
:fibonacci-heap(amortized) ¥ ù¢Ôµ¨ •Extract-Min â ,¢Âð üõ ¤ O(|V |) öõ¥ öÞû Build-heap â ´ó ßþ ¤¢üõ ¤ O(1) öõ¥ Decrease-Key â õ, ¢Âð üõ ¤ O(log|V |) öõ¥ öÞû Ã÷
.¢Âð.Àª Àû¡ O(|E| + |V |log|V |) ¥ ݵþ¤Úó Ûî öõ¥ ¤¬ ßþ
¤¬ ö ¤¢ , |E| = Θ(|V |) üãþ , Àª §¤³¨ éÂð ×þ ÂÑ÷ ¢¤õ éÂð Âðü÷õ¥ ²û ø¢ Âû Âþ¥ ¢Âî Àû¿÷ õ ü÷À ×Þî fibonacci-heap¥ ù¢Ôµ¨
. ´êÂð Àû¡ ¤ O(|V |log|V |) ÂÂ|E| = Θ(|V |2) üãþ Àª (dense graph) Ýîµõ éÂð ×þ ÂÑ÷ ¢¤õ éÂð Âðfibonacci-¥ ù¢Ôµ¨ öõ¥ ø O(|V |2log|V |) binary-heap ¥ ù¢Ôµ¨ öõ¥ ,
.¢ Àû¡ O(|V |2)ÂÂ heap
.Àª |V | ¥ µð¤Ã |E| î ´¨ µú ü÷õ¥ fibonacci-heap ¥ ù¢Ôµ¨ ßþÂü÷õ¥ ¤ø¹õ ÅþÂõ ܨø ݵþ¤Úó ßþ ý¥¨ ù¢ î ´¨ üó ¤¢ ßþ ø
.¢Âð üõ O(|V |2) ¥
www.Bshams.ir
www.Bshams.ir
107 (GREEDY ALGORITHMS) ÷Êþ ýû ݵþ¤Úó .1.4
: Sollin ݵþ¤Úó
üõ ¤Âì ñþ öøÀ ¤ û §b¤ ôÞ Àµ , Ýû¢ üõ ª Âþ¥ ñ·õ ¤ ݵþ¤Úó ßþµØî °Æ Â ÂÑ÷ ¥ î ö ÝþÞ÷ üõ ÆþÖõ áøª ÂÔ¬ §¤ ¥ ų¨ Ý4,3,2︸ ︷︷ ︸
C
ø1,6︸︷︷︸B
,5,0︸︷︷︸A
´¡¤¢ ¨ ¤¬ ßþ ¤¢ Àû¢ üõ ÛØÈ ¤ ñ þ ×þ ´¨
ýû ©¥¤ ý¤¢ ¢ª üõ Ûʵõ C B ´¡¤¢ ¥ î üþû ÂÆõ . ¢ª üõ ÛØÈ©¥¤ ý¤¢ ¢ª üõ Ûʵõ C ø B A ´¡¤¢ î üþû ÂÆõ ø ´¨ 24ø18ø16ø Àî üõ Ûʵõ C ¤ B ´¡¤¢ î ´¨ 16 ÂÆõ ßþµûîÅ ´¨ 25ø28
.´¨ 25 ÂÆõ ßþµûî Ã÷ 28ø25 ß
0 1
5 6 2
4 3
-
0
5
4
6
1
2
3
10
28
14 16
2425
22
1218
1410
25
22
12
16
algorithm Sollin(G)
begin
Fo=(v,k);
i=0;
while there is more than one tree Fj do
for each tree Tj in forest Fj do
choose the minimum weighted edge (u,v) joining some
vertix u in Tj to a vertix v in some other tree Tk in forest Fj
from the otherforest Fj+i by joining all Tj and Tk of Fj with tree
converesponding select edge
i++;
end;
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 108
: Boruvka ݵþ¤Úó
Boruvka( G = (V, E) , w )
initialize each vertex to be its own component ;
A = ; //A holds edges of the MST
do
for ( each component C )
find the lightest edge (u,v) with u in C and v not in C ;
add u, v to A ( unless it is already there ) ;
apply DFS to graph H = (V, A) , to compute the new components
while (there are 2 or more components) ;
return A ; // return final MST edges
BORUVKA(V,E):
F = ( V , ∅ )
while F has more than one component
choose leader using DFS
FIND-SAFE-EDGES(V , E)
for each leader v add safe ( v ) to F
FIND-SAFE-EDGES(V, E):
for each leader v
safe(v)←∞
for each edge (u,v)∈ E
u← leader(u)
v ← leader(v)
if u 6= v
if (w(u,v) < w( safe( u ))
safe ( u)← (u, v)
if (w (u,v) < w(safe(v ))
safe ( v)← (u, v)
www.Bshams.ir
www.Bshams.ir
109 (GREEDY ALGORITHMS) ÷Êþ ýû ݵþ¤Úó .1.4
: Knapsack üµÈ óî ݵþ¤Úó 3.1.4
ßþ Ýû¡ üõ.Àî ÛÞ½ À÷ üõ ¤ W ö¥ø î Ýþ¤¢ üµÈ óî î Àî Âê, i DZüª À÷õ û DZüª ¥ ×þ Âû Àî Âê .Ýî 1,2, ..., nýû DZüª ¤ óîßþÂµÈ üµÈ óî ö¢Âî  ýÂ î ´Æ÷ éÀû .Àª vi©¥¤ ø wi ö¥ø ý¤¢ø Àø ÂÔ¬ þ Àø ×þ üª Âû ¥ ö üõ ¤Ñõ ßþ ý Ýþ ´¨¢ ßØÞõ ©¥¤
:¹µ÷ ¤¢ .¢Âî ¿µ÷ Àø ¥ ýÂÆî þ∑
xiwi ≤W , xi ∈ [0,1]
. ݨ max [∑
xivi] Ýû¡ üõ õ øÀ÷¤¢ ÝÖµÆõ ´±Æ÷ ©¥¤ û ¿µ÷üóøÃ÷ ´Â ¤ ú÷ ų¨. Ýþ¤ø üõ ´¨À DZª ôÞ ý ¤ vi
wi´±Æ÷ Àµ
¤Âì óî ¤¢ ø Ýî üõ ¿µ÷ ¤ DZª üØþ üØþ ´Æó ¨ ¥ ßþ Ýî üõ °Âõ üãþ Ýþ¥À óî Û¡¢ Ûõî ¤Ï ¤ ý üª Ý÷µ÷ î ü . Ýû¢ üõ¥ ÂµÈ weight üãþ Ýþ µ¿þ¤ üµÈ óî Û¡¢ ¤¢ î üª ö¥ø üª ö ¿µ÷
.¢ª W
üõ ¿µ÷ x[k] = W−weightW [k] ù¥À÷ ô k üª üãþ üª ßþ ý ¤¬ ßþ ¤¢
ú÷ ©¥¤ ø .À¨¤ Àû¡ W óî Û¡¢ ãÎì ö¥ø üª ßþ ¿µ÷ .¢ªý¥¨ °ÂõÎÖê Âþ¥ ´¨ O(n log n)¥ Ã÷ ݵþ¤Úó ßþ öõ¥ .Àª Àû¡ max Ã÷
. Ýþ¤¢function Knapsack(w[1..n],v[1..n],W):array[1..n]
for i←1 to n do
x[i]←0
weight← 0
gready loop
while (weight<W) do
i← the best remaining object
if(weight+w[i]≤W )then
x[i]←1
weight←weight+w[i]
else
x[i]← (W−weight)w[i]
weight ← W
return x
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 110
: DIJKSTRA ݵþ¤Úó 4.1.4
Ýþ¤¢ ¤µ¡ ¤¢ ¤¢ ´ú üêÂð ÀîÂê .´¨ üþ ÂÆõ ݵþ¤Úó ݵþ¤Úó ßþßþµûî ñÏ Ýû¡ üõ .´¨ ù¢¤¡ °Æ üÔõ÷ ý¢Àä ö ñþ Âû î¤Ñõ ßþ ý . Ýþ¤ø ´¨¢ §¤ Âþ¨ ¤ â±õ §b¤ ô÷ ü¨b¤ ¥ ÂÆõ
.ÝþÂð üõ ÂÑ÷ ¤¢ ݵþ¤Úó ý¢ø¤ø öä ¤ éÂð ö¥ø ÅþÂõfunction Dijkstra(L[1..n,1..n]):array D[2..n]
C←−2,..,n s=N\C exists only implicityfor i ←− 2 to n
D[i]←− L[1,i]
repeat n-2 times
v←− some element of C minimizing D[v]
C←− C\vfor each w∈ C do
D[w]←− min(D[w], D[v]+L[v,w])
return D
Lij =
weight of edge (i,j)∈ E0 i=j∞ else
: ñ·õ
1
2
34
5 R
W
=
50
U
3
10
10
100
5
30
50
20-
step v C D
initilization - 2,3,4,5 [50,30,100,10]
1 5 2,3,4 [50,30,20,10]
2 4 2,3 [40,30,20,10]
3 3 2 [35,30,20,10]
www.Bshams.ir
www.Bshams.ir
111 (GREEDY ALGORITHMS) ÷Êþ ýû ݵþ¤Úó .1.4
µª¢ ¤ ÂÆõ Øþ ý Š.Àû¢ üõ ¤ ñþ Âû ¥ ¤±ä þÃû ú ݵþ¤Úó ßþÝû¡Å ÝþÃþ ö ¤¢ ¤ ý¤±ä ýû ùÂð ݪ µª¢ ÂÚþ¢ ý þ¤ Àþ ݪ
: ´ª¢function Dijkstra(L[1..n,1..n]):array D[2..n] , array P[2..n]
C←−2,..,ns=N\C exists only implicityfor i ←− 2 to n
D[i]←− L[1,i]
P[i]←0
repeat n-2 times
v←− some element of C minimizing D[v]
C←− C\v
for each w∈ C do
if ( D[w]>D[v]+L[v,w] ) then
D[w]←− D[v]+L[v,w]
P[w]←− v
return D , P
: ü÷õ¥ Ûܽ: ´¨ ÂÂ î ´¨Â ÛÂõ ¢Àã ¥ ü±þ® öõ¥
(n− 2) + (n− 3) + . . . + 2+ 1 =(n− 1)(n− 2)
2∈ θ(n2)
:ÂÆõ ö¢Âî À: Ýþ¤¢ Û±ì ñ·õ ý .Ýþ¤ø üõ ´¨¢ P þ¤ ýø¤ ¥ ¤ ÂÆõ
3 0 5 02 3 4 5
P
üõ ÝÖµÆõ §b¤ ö 1 §b¤ ¥ î ÀµÆû üãõ ßþÀ ÀµÆû ÂÔ¬ î üþû þ¤¢4 §b¤ f ·õ,ÂÔ¬ Âè ýû þ¤¢ õ. ´¨ ÂÆõ ßþ ùî ¢¡ ÂÆõ ßþø Ýþø ¤ýþ¤¢ õ ø Ýþø ¤ 5 Àµ Àþ 4 ßµê¤ ý Š´¨ 5 ýø 4 ýþ¤¢ ö,. Ýþø ¤ üõ 4 ų¨ ø 5 1 ¥ Àµ4 ßµê¤ ý Š´¨ ÂÔ¬ ýø ¢¡ 5 ø O(a+nlogn) ¥ Fibonacci-heap ý¥ ¨ ù¢ Ý µ þ¤ Ú ó ß þ ý ö õ¥
.´¨ O((a+n)logn) ¥Binary-heap
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 112
(timetable or scheduling) ýÀ öõ¥ ýû ݵþ¤Úó 5.1.4
¤±ä öõ¥ ý¥¨ ú þ ø Ûõä ݵƨ ö ü·±õ ¤¢ Ýúõ ¤Æ ¶±õ ¥ üØþ´¨ ¤î À ß server ×þ öõ¥ ÝÆÖ ôúÔõ ýÀ öõ¥. ýÀ öõ¥ ¥ ´¨ÂÑ÷ ¢¤õ éÀû Ý÷µ À÷Âð üõ Åþø¨ öþµÈõ ôÞ Ø÷ ßä ¤¢ î ý¤Ï ùª ×þ ´¨ Ó¬ ¤¢ öþµÈõ öõ¥ ö¢Âî minimum éÀû Âð. Ýþ ´¨¢ Ã÷
. Ýî ÛÞä ÂÚþ¢ ùª ´¨ ¥µõ þ ¢¨ ßþÂµÈ ö¢¤ø ´¨À éÀû Âð øÀª üõ ´¿¨ ÛÆõ ¥ µ¨¢ ×þ ýÀ öõ¥ ÛÆõ üÞµþ¤Úó ¶½ Àþ¢ ¥
.Ý ÜÿÆõ á÷ °¨õ ü ö Íþª îüõ ÝÆÖ (with deadline) ¤¢ ´Üúõ ø (simple) ù¢¨ µ¨¢ ø¢ ýÀ öõ¥
.¢ª
ù¢¨ ýÀ öõ¥
n ñ·õ ý ýµÈõ üÊ¿Èõ ¢Àã Àû¡ üõ î Ýþ¤¢ server ×þ ÀþÞ÷Âê Âê. Àª üõÉ¿Èõ Û±ì ¥ ýµÈõ Âû Åþø¨ öõ¥ .Àû¢ Åþø¨ ýµÈõÂû ¤¢ ø ¢¤¢ ¥÷ ¤ ti(1 ≤ i ≤ n) ù¥À÷ üÆþø¨ öõ¥ ôi ýµÈõ î ´¨ ßþü±Â ݱ Ýû¡ üõ. Àû¢ Åþø¨ ýµÈõ ×þ À÷ üõ server öõ¥ÂÑ÷ ÎÖ÷ ¥ ݵƨ ¤¢ ùÀª ý³¨ öõ¥ Ýû¢ Åþø¨ öþµÈõ ßþ ö üõöõ¥ ͨµõ öþµÈõ ùÚ÷ ¥ Øþ üãþ . ¢¢Âð ÞîÅþø¨ ´êþ¤¢ ý öþµÈõ
.Àª ÝÞ÷ üõ û ö ý ùÀª ÓÜTi = t1 + t2 + ... + ti−1 + ti: ôi ýµÈõ ¤Ñµ÷ öõ¥
T =∑ Ti
n : Åþø¨ ´êþ¤¢ ý ¤Ñµ÷ öõ¥ ͨµõ. ¢ª Þî∑T ´¨ üêî ø ô¥ T öÀª Þî ýÂ
: Ýþ¥¢Â üõ Âþ¥ ñ·õ Ýþ¤ø ´¨À Ýû¡ üõ î üÞµþ¤Úó µú í¤¢ ýÂ, 5 ñø ýµÈõ ý öõ¥. Àû¢ üõ Åþø¨ ýµÈõ 3 server ßþ ÀþÞ÷ Âê
.À÷ÂÚ Åþø¨ À÷ üõ ´ó 6 ýµÈõ 3 ßþ î ´¨ 3 ô¨ ø 10 ôø¢1,2,3 =⇒ T = 5+ (5+ 10) + (5+ 10+ 3)
1,3,2 =⇒ T = 5+ (5+ 3) + (5+ 3+ 10)
2,1,3 =⇒ T = 10+ (10+ 5) + (10+ 5+ 3)
2,3,1 =⇒ T = 10+ (10+ 3) + (10+ 3+ 5)
3,1,2 =⇒ T = 3+ (3+ 5) + (3+ 5+ 10)√
3,2,1 =⇒ T = 3+ (3+ 10) + (3+ 10+ 5)
www.Bshams.ir
www.Bshams.ir
113 (GREEDY ALGORITHMS) ÷Êþ ýû ݵþ¤Úó .1.4
ý¢ã¬ °Â Åþø¨ öõ¥ °Æ  ¤ öþµÈõ Åþø¨ ý ݵƨ ßþ ¤¢¤ À÷ø ¤ ßþ ø Ýû¢ üõ Åþø¨ ú÷ ´Æó ýÀµ ¥ °Â ø ÝþÞ÷ üõ °Âõý¥¨ °Âõ öõ¥ ú ö .À÷ÂÚ ¤ öÈÆþø¨ û¤î ôÞ Ýû¢ üõ õ¢ ¤ÀÖ÷
. ´¨ O(n log n) ¥ Ýþ¤¢ ¤
(Scheduling with deedline)¤¢ ´Üúõ ýÀ öõ¥
ø À÷¤¢ ¥÷  ý öõ¥ Àø ×þ ×þ Âû î Ýþ¤¢ üþ ¤î n ÀþÞ÷ Âêù¥À÷ ý¢¨ ô i ¤î . ¢ª ô¹÷ À÷ üõ ¤î ×þ ÍÖê (T=1,2,...)öõ¥ Âû ¤¢Àª ö ´Üúõ î di ýøÆõ µÞî öõ¥ ¤¢ ¤ ¤î ßþ Âð úø Âð À÷¨¤ üõ gi ≥ 0Åþø¨ öþµÈõ ßþ Àþ ý½÷ Ý÷À Ýû¡ üõ .Àª ùÀ¨¤ ôÞ
. Ýþ ü¨Âµ¨¢ ¢¨ ßþÂµÈ ¢¢: ñ·õ
ª û ö deedlineø ¢¨ öÃõ °Â î Ýþ¤¢ ýµÈõ ¤ú î ÀîÂê: ´¨ Âþ¥
i 1 2 3 4gi 50 10 15 30di 2 1 2 1sequence profit sequence profit
1 50 2,1 602 10 2,3 253 15 3,1 654 30 4,1 80−→ optimum
1,3 65 4,3 45
fisible þ ü÷Àª ó±÷¢
äÞ¹õ Âû ßþ . ¢Âî  ¤ ú÷ °Â Ý÷µ Âð Ýð fisible ¤ ý ó±÷¢ó±÷¢ õ ´¨ fisible , 2,1äÞ¹õ ñ·õ ý .´¨ fisible ó±÷¢ ×þ ý¤¢ fisible
. Àª üÞ÷ fisible , 1,2
°ÜÎõ ´ Ü î ¥ î ö öøÀ ø Àª Ûçª k ¥ ý äÞ¹õ j À þ Þ ÷ Âê¤ ¬ ø À ÷ ù¢¤ ¡ ° Æ Â 1,2, ..., k û¤ î î À î Â ê ¢ ª Ý î, 1, ..., k Âð úø Âð ´¨ fisible , j ¤¬ ßþ ¤¢. Àª d1 ≤ d2 ≤ ... ≤ dk
. ˻ fisible
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 114
°Â À÷¨¤ üõ î ý¢¨ §¨Â ¤ û Ûçª Àµ ¢¨ ßþÂµÈ öÀ¨¤ ý¢¨ ßþÂµÈ û ö deedline ßµ¡À÷ Õþã ų¨ ø Ýî üõ °Âõ üóøÃ÷
. Ýþ üõ ´¨¢Function sequence(d[0..n]):k , array[1..k]
array j[0..n]
The schedule is constructed step by step in the array j ,the variable k
say how many jobs are already in the scheduled[0]←j[0]←0 sentinelsk← j[1]←1job 1 is always choosengready loopfor i ← 2 to n do decreasing order of g
r ← k
while d[j[r]]>MAX(d[i],r) do r ← r-1
if d[i]> r then
for m ← k step -1 to r+1 do j[m+1]←j[m]
j[r+1]←i
k ← k+1
return k,j[1..k]
: Ýþ¤¢ ñ·õ ýÂi 1 2 3 4 5 6gi 20 15 10 7 5 3di 3 1 1 3 1 3
3
Initialization: 1
↑
1 3
Try 2: 2 1
↑Try 3: unchanged
1 3 3
www.Bshams.ir
www.Bshams.ir
115 (GREEDY ALGORITHMS) ÷Êþ ýû ݵþ¤Úó .1.4
Try 4: 2 1 4
↑
Try 5: unchanged
Try 6: unchanged
=⇒ optimal sequence: 2 , 1 , 4 value=42
. ´¨ O(n2)¥ ݵþ¤Úó ßþ ý öõ¥: Disjoin Set ¥ ù¢Ôµ¨ ýÀ öõ¥ ôø¢ ݵþ¤Úó
üõ ô¹÷ ¤ ýÀ öõ¥ óbÆõ ùõ äÞ¹õ ù¢¢ öÞµ¡¨ §¨  ݵþ¤Úó ßþmerge â ø Àþ üõ ¤ ´¡¤¢ ýÈþ¤ find â Àª ùÀûÈõ f ±ì î ¤Ï öÞû, Àû¢´¨ µÞî ©ÀÜî î ö ø Àî üõ °î Ýû ¤ É¿Èõ ýû Èþ¤ ´¡¤¢ ø¢
.Àª Àû¡ ÂÚþ¢ ýÈþ¤ À÷¥ÂêFunction sequence2(d[1..n]):k,array[1..k]
array j ,F[0..n]
initialization
for i ← 0 to n do
j[i] ← 0
F[i]← i
initialize set [i]
gready loop
for i ← 1 to n do decreasing order of g
k ← find(min(n,d[i]))
m ← F[k]
if m 6= 0 then
j[m] ←i , l← find(m-1)
F[k]←F[l]
merge(k,l)
k ← 0
for i ←1 to n do
if j[i]>0 then k←k+1 , j[k]←j[i]
return k,j[1..k]
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 116
. ´¨ Èþ¤ ö î ¢ª üõÉ¿Èõ Àª ©¢¡ ýÂÊä ¤À Âð: Ýþ¤¢ Û±ì ñ·õ ýÂ
Initilize : L=min(6, max(d,1))= 3
0 1 2 3 4 5 6F= 0 1 2 3 4 5 6
Try 1: d1=3 , assign task 1 to position 3
0 1 2
3
M
F= 0 1 2
Try 2: d2=1 assign task 2 to position 1
0
1
2
3K K
F=0 2
Try 3: d3=1 no free position available since the F value is 0
Try 4: d4=3 assign task 4 to position 2
0
1 2
3
o
]
F= 0
Try 5: d5=1 no free position available
Try 6: d6=3 no free position available
=⇒ optimal sequence: 2 , 1 , 4 value=42
. ´¨ O(nlogn)¥ ݵþ¤Úó ßþ ý öõ¥
www.Bshams.ir
www.Bshams.ir
117 (DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
(devide and conquer) Ûø ÝÆÖ 2.4¤µ¡¨×þ ¥ ù¢Ôµ¨ üܬ óbÆõ ö ¤¢ î ´¨ üÆþ÷ õ÷ ×Ø D & C
ßþ ÀµÆû üܬ óbÆõ ±ª fÖì¢ î¢ª üõ ÝÆÖ üþûóbÆõ Âþ¥ üµÈð¥óbÆõ Âþ¥ Û .ÀµÆû üܬ óbÆõ ¥  ù¢¨ þ µØî ù¥À÷ ÂÑ÷¥ î øÔ¤¢ ×þ ö üõ Ýû ú÷ °îÂø ùÀª ù¢¨ ø ×î üêî ù¥À÷ ýû
.´êþ ´¨¢ üܬ óbÆõ ý öØõ ¤¬:´¨ Âþ¥ ÕÎõ D& Cݵþ¤Úó ×þ üÜî ¤µ¡¨
function DC(x)
if x is sufficiently small or simple then return adhoc(x);
decompose x into smaller instances x1, x2, ..., xl;
for i←1 to l do yi ←DC(xi);
recombine the yi’s to obtain a solution y for x;
return y;
ï¤Ã ¢Àä ® 1.2.4
¤Ï Ý þÞ÷ ® Ýû ¤¢ ´¨ üÞì¤ n µð¤Ã ¢Àä î ¤ ¢Àä ø¢ Ýû¿ Âð?Àµê üõ üìÔ , Ýî ÛÞä Âþ¥ ¤¬ Âð ñ .Àª üõ O(n2) ¥ ñÞãõ
981× 1234 = ( 9︸︷︷︸w
×102 + 81︸︷︷︸x
)× ( 12︸︷︷︸y
×102 + 34︸︷︷︸z
) =
(w × 102 + x)(y × 102 + z) = wy × 104 + (wz + xy)× 102 + xz
: Ýþ¤¢ Å. À÷ª âÞ Ýû Àþ n2¢Àä ¤ú Ýû ¥
T (n) ≤ 4T (n2) + θ(n)⇒ T (n) ∈ O(n2)
µú ¤ öõ¥ î ´¨ O(n2) ¥Ã÷ ݵþ¤Úó ßþ ÀþõÂê üõ Ñõ î ¤Î÷Þû.Àª üÞ÷ µú ÈÞû D&C ¹µ÷ ¤¢ Àî üÞ÷
(wz + xy) = (w + x)(y + z)︸ ︷︷ ︸r
− wy︸︷︷︸p
− xz︸︷︷︸q
= r − p− q
⇒ wy×104 + (wz + xy)×102 + xz = p×104 + (r− p− q)×102+ q
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 118
⇒ T (n) ≤ 3T (n2) + θ(n) =⇒ T (n) ∈ O(nlog3
2)
¤¢ ´¨ n2¥ üÂÌõ Å Ýþ¤¢ âÞ n
2+1 þ n
2üÞì¤ n
2¢Àä ø¢ âÞ ýÂ
.´¨ θ(n) ¥ ¹µ÷
: ݵþ¤Úólarge-integer prod(large-integer u , large-integer v)
large-integer x,y,w,z,r,p,q
int m , n
n=Maximum(number of digits in u , number of digits in v )
if(u==0 || v==0)
return 0
else if(n≤ threshold )
return u×v obtained in usual way
else
m=bn2c
x=u divide 10m ;
y= u rem 10m
w=v divide 10m ;
z= v rem 10m
r=prod(x+y,w+z)
p=prod(x,w)
q=prod(y,z)
return p×102m + (r-p-q)×10m+q
www.Bshams.ir
www.Bshams.ir
119 (DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
merge sort ݵþ¤Úó 2.2.4
procedure merge-sort (T[1..n])
if n is sufficiently small then insertion sort(T[1..n])
else//arrayu[1 . . . bn
2c+ 1], array v[1 . . . dn
2e+ 1]
u[1 . . . bn2c]← T [1 . . . bn
2c]
v[1 . . . dn2e]← T [1+ bn
2c . . . n]
merge− sort(u[1 . . . bn2c])
merge− sort(v[1 . . . dn2e])
merge(u,v,T)insertion sort¥ Å ´¨ ¢þ¥ ö¢ °Âõ ñÞµ Àª ×î î üµó ¤¢
.¢Èõ ù¢Ôµ¨procedure merge(u[1..m+1],v[1..n+1],T[1..m+n])i,j← 1
u[m+1]=v[n+1] ←∞for k← 1 to m+n Do
if u[i]<v[j]
T[k]←u[i]
i++
else
T[k]←v[j]
j++
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 120
: ñ·õ: ÝþÞ÷ üõ °Âõ ©ø¤ ßþ ¤ Âþ¥ ýþ¤
1 2 3 4 5 6 7 8 9 10 11
31 3 10 54 7 17 12 43 48 8 2
31 3 10 54 7 17 12 43 48 8 2
31 3 10 54 7 17 12 43 48 8 2
3 31 10 7 54 17 12 43 48 82
3 31 10 ∞ 7 54∞ 17 ∞ 1243 ∞ 48 ∞ 2 8 ∞
3 31 ∞ 7 10 54 ∞ 12 17 43 ∞ 2 8 48 ∞
3 7 10 31 54 ∞ 2 8 12 17 43 48 ∞
2 3 7 8 10 12 17 31 43 48 54
: ݵþ¤Úó Ãó÷
T (n) = T (dn2e) + T (bn
2c) + θ(n)
T (n) = 2T (n2) + θ(n)
=⇒ T (n) ∈ O(nlogn)
¤ ± ä ¤ if u[i] < v[j] ¤ ± ä  ð õ À ª ü Þ ÷ stable Ý µ þ¤ Ú ó ß þüÞ÷ inplace ݵþ¤Úó ßþ ß»Þû .¢ Àû¡ stable Ýî ÛþÀ± if u[i] ≤ v[j]
.ÀþÞ÷ üõ ù¢Ôµ¨ üØÞî ýÑê ¥ Âþ¥ Àª
www.Bshams.ir
www.Bshams.ir
121 (DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
Quick Sort ݵþ¤Úó 3.2.4
Procedure pivot(T[1. . .n] , var L)
permutes the elements in array T[i . . .j] and return a value L such that
at the end,i ≤L ≤ j, T [k] < p for all i ≤k < L, T[L]=p and
T[k] > p for all L<k≤j , where p is the initial value of T[i]
p←T[i]
k←i , L←j+1
repeat k←k+1 until T[k] > p or k ≥ j
repeat L←L-1 until T[L] ≤ p
while(k < L) do
swap(T[L],T[k])
repeat k ←k+1 until T[k] > p
repeat L ←L-1 until T[L] ≤ p
swap(T[i],T[L])
procedure quicksort (T[i. . .j])
sorts subarray T[i. . .j] into nondecreasing order
if (j - i) is sufficiently small then sort with insertion-sort(T)
else
pivot(T[i . . . j],L)
quicksort(T[i . . . L -1])
quicksort(T[L+1 . . . j])
: ñ·õi j
5 1 17 4 48 7 3 9 8 5 25
1 2 3 4 5 6 7 8 9 10 11
p=T[i]=5
k ← i
L← j+1
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 122
5 1 17 4 48 7 3 9 8 5 25
↑ ↑k L
5 1 5 4 48 7 3 9 8 17 25
↑ ↑k L
5 1 5 4 3 7 48 9 8 17 25
↑ ↑L k
.¢ª üõ ä p ô LÂÊä ý Å¢µêÂÜ L¥ k
3 1 5 4 5 7 48 9 8 17 25
︸ ︷︷ ︸ ⇑ ︸ ︷︷ ︸
:ݵþ¤Úó ý öõ¥ ±¨½õ
: ´ó ßþÂÀ¤¢Ãó ÷ •Å ¢Âî ´î þ¤ ¡ ýÂÚþ¢ ø ñø üØþ éÂÏ ø¢ ¥ Àþ pivot ¤¢ î¹÷¥
. ´¨ θ(n) ¥ ÈÞû
T(n)=T(n-1)+θ(n)=⇒ T(n)=θ(n2)
T(n)=c n≤ n0
÷¡ ¤¢ þ ø ¢¡ ý¤¢ þ ¤ Âû ¤¢ pivot î Àµê üõ ëÔ ü÷õ¥ ´ó ßþÂÀû ù¢¢ þ Ø÷ üãþ ¢Âð ¤Âì , ´Æ÷ üÜãê Û½õ i î (n-i+1) üãþ ö¤Öµõ
.Àª ùÀª °Âõ üóøÃ÷ þ ø À÷ ý¢ã¬
: ´ó ßþµú ¤¢ ݵþ¤Úó Ãó ÷ •Àª ü÷õ ¯Ö÷ ¤¢ pivot î Àµê üõ ëÔ üõÚû ´ó ßþµú ݵþ¤Úó ßþ¤¢
: ´¨  ݵþ¤Úó ý öõ¥ ¤¬ ßþ ¤¢ ,
T(n)' 2T (n2) + θ(n)⇒ T (n) = θ(n log n)
www.Bshams.ir
www.Bshams.ir
123 (DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
: ñ·õ×þ ¤ þ¤ ñø ÂÊä 2
√n+1 , quick sort ݵþ¤Úó ¥ ýÀþÀ ý ÷𠤢
¤ ÷õ ÂÊä ų¨ , ÝþÞ÷ üõ °Âõ insertion sort À÷õ üõÀÖõ ݵþ¤Úó ¥ Ýµþ¤Úó ßþ ý öõ¥ ´ó ßþ À ¤¢ , ÝþÂð üõ ÂÑ÷ ¤¢ pivot öä
?Àþ üõ ´¨¢ üµÈð¥ Τ:Û
÷õ ÂÊä =2√
n + 1+ 1
2=√
n + 1
µ¨¢ ø¢ Å À÷Þ üì ¢¡ ý ¤¢ ÂÊä ßþ î ´Æ÷ ö õ¥ ßþÂÀ Å.Àã √n+2 ¥ ôø¢ µ¨¢ ø ¢Àä √n µ¨¢ ×þ , Ýþ¤¢ ÂÊä
´ ¨ O((2√
n + 1)2) ∈ O(n) Ý û insertion ý¥ ¨ ° Â õ ýÂ ô¥ ö õ¥.
T(n-(√
n+2)) θ(n)
T(n)≤ T (√
n) +︷ ︸︸ ︷T (n−
√n) +
︷ ︸︸ ︷θ(n) + O(n)
: ͨµõ ´ó ¤¢ ݵþ¤Úó Ãó ÷ •k−1︷ ︸︸ ︷1 . . . k
n−k︷ ︸︸ ︷(k + 1) . . . n
T (n) = T (k − 1) + T (n− (k + 1) + 1) + θ(n) =
1
n
n∑k=1
(T (k − 1) + T (n − k)) + θ(n) = 1
n
n∑k=1
T (k − 1) + 1
n
n∑k=1
T (n −
k) + θ(n) = 1
n
n−1∑k=0
T (k) + 1
n
n−1∑k=0
T (k′) + θ(n) = 2
n
n−1∑k=0
T (k) + θ(n) =
2
n (T (0) + T (1)) + 2
n
n−1∑k=2
T (k) + θ(n) = 2
n × a + 2
n
n−1∑k=2
T (k) + θ(n)
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 124
θ(n lg n) ͨ µ õ ´ ó ¤¢ ö õ¥ î Ý û¢ üõ öÈ ÷ ü® þ¤ ýÂ Ö µ ¨ ñü êÂ Ï ¥ .´ ¨ 1 Ý µ þ¤ Ú ó ö õ¥ À ª n=2 ð î ´ ¨ ¼ ®ø .´ ¨ü ÀîÂê ñ. ´¨ ¤Âì ñø ôð Å, ´¨ θ(n lg n) = θ(2 lg2) = 2
ùÚ÷, ´¨ θ(k lg k) ô¥ öõ¥ k < nÂû
T (n) =2
n× a +
2
n
n−1∑
k=2
T (k) + θ(n) =2
na +
2
n
n−1∑
k=2
θ(klogk) + θ(n)
→ T (n) =2
n× a + θ((
2
n)
n−1∑
k=2
(klogk)) + θ(n)
=2
n× a + θ(
2
n
∫ n−1
2
xlogxdx) + θ(n)
→ T (n) = θ(nlogn)
:ßþÂÞ´¨¢ ¤ ÂÊä ßþµØî ßõ k î Àû¢ Âç ý¤Ï ¤ quick sort ݵþ¤Úó
. Ýþ¤ø:ßþÂÞ
.Àþ¤ø ´¨¢ quick sort ¤¢ Âç ×þ ¥ ù¢Ôµ¨ ¤ û ÷õ ö¢Âî À
:Ýþ¤ø ´¨À Âþ¥ ùª ¤ ¢Àä ßþµØî ßõ k Ýû¡ üõ ñµ¨¢ ×þ ·îÀ . Ýî üõ ÝÆÖ üþ 5 ýûµ¨¢ (bn/5c) ¤ ÂÊä n Àµî Ýþ¤¢ ùøÂð (dn/5e) ßþ Àª µª¢ ÂÊä 5 ¥ µÞî ý¢Àã ´¨ ßØÞõ
.´¨ ÂÊä n mod 5 ý¤¢ û µ¨¢ ¥ üØþ ·îÀݵþ¤Úó ¥ ù¢Ôµ¨ ¤ ýÌä 5 ýû µ¨¢ ¥ ×þ Âû ý÷õ ÂÊä ų¨ø¥ µ¨¢ ×þ Â¬ä ¢Àã Âð ´¨ ¼®ø . ÝþÞ÷ üõ ±¨½õ insertion sort
üµÈð¥ â ×þ ¥ ù¢Ôµ¨ . Ýî üõ Âê µØî ÂÊä ¤ ÷õ ÂÊä Àªã¨ ¿Æ÷ ×þ ¥ ù¢Ôµ¨ ,Ýþ¤ø üõ ´¨À ¤ ¬ä ýû ÷õ ÷õ select ôi î Àî Âê ßþ . Ýî üõ ÝÆÖ x üãþ û ÷õ ÷õ ñ ¤ pivotµêþý Ç¿ ¤¢ Â¬ä ¢Àã n− i Å Àª ÝÆÖ ÎÖ÷ ßþ Ç¿ Â¬ä ¢Àãý üµÈ𥠤¬ select ¥ Àª i ýøÆõ µØî k Âð . Àª ÝÆÖ ÎÖ÷
www.Bshams.ir
www.Bshams.ir
125 (DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
k− i ¤¬ ßþ Âè ¤¢ø Ýî üõ ù¢Ôµ¨ üþ Ç¿ ¤¢ Þî ÂÊä ßõ k ßµêþ.ÝþÞ÷ üõ À µð¤Ã Ç¿ ¤¢ ¤ Þî ÂÊä ßõ
• • • • •
• • • • • •
• • x •
• •
• •
x ¥ µð¤Ã Â¬ä ¢Àã ÛìÀ: 3(12dn5e − 2) ≥ 3n
10− 6
x ¥ µØî Â¬ä ¢Àã ·îÀ: n− (3n10− 6) = 7n
10+ 6
üþ5 ýûµ¨¢ ý¥¨ °Âõ ýÂ î ¢ª Âî£ Àþ ݵþ¤Úó öõ¥ ü¨¤Â ýÂÅ Ýþ¤¢ µ¨¢ dn/5e ö ø ´¨ O(1) ¥ î ¢ª üõ ù¢Ôµ¨ insertion sort ¥¤¢ .´¨ T (dn/5e) Å Àþ ´¨Àû÷õ ÷õ Àþ ÂÚþ¢ üêÂÏ ¥ø ´¨ O(n) ¥3n10− 6 þ 7n
10+ 6 ýûµ¨¢ ¥ üØþ ¤¢ ÂÊä ßõ k î ´¨ ßØÞõ ´ó ßþÂÀ
: Ýþ¤¢ Ûî ¤¢ Ýî üõ ±¨½õ ¤ µð¤Ã µ¨¢ öõ¥ Àû¢ ¤
T (n) = T (dn/5e) + T (7n/10+ 6) + O(n)
T (n) ∈ O(n)
ýÂ¬ä ¢Àã ·îÀ 2(n/5)− 1 Ýþ¤¢ ÂÚþ¢ ö¥ ùÀª ¤ üÞµþ¤Úó ¤¢.Àª û ÷õ ÷õ éÂÏ ø¢ ¤¢ À÷ üõ î ´¨
:Àª û ÷õ ÷õ éÂÏ ×þ ¤¢ À÷ üõ î ýÂ¬ä ¢Àã ·îÀ
1
2((n− 1)− 2(n
5− 1)) + 2(n
5− 1) = 7n
10− 3
2
=⇒ T (n) ≤ T (dn5e) + T (7n
10− 3
2) + O(n)
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 126
(û ÅþÂõ ® ݵþ¤Úó) ߨµ¨ ݵþ¤Úó 4.2.4
üªø¤ Ýû¡ üõ , 2 ¥ ü÷ b ±Âõ ¥ Ýþ¤¢ ¤µ¡ ¤¢ ÅþÂõ ø¢ Àî ÂêöÈ÷ ߨµ¨ .Ýî ±¨½õ ¤ û ÅþÂõ ® Û¬üóÞãõ ® ¥  âþ¨¥÷ θ(n3) bù¥À÷ ü÷õ¥ ý¢ä ´ó ¤¢ î ¤ û ÅþÂõ ® ö üõ î ¢¢
.¢¢ Çûî θ(nlog72) ñ¢ãõ ü÷õ¥ , ¢¤¢
ÅþÂõ ø¢ ® ´Æ÷ û ÅþÂõ ö¢Âî îÜ ß¨Âµ¨ ¤Ñõ ßþ ýÂ.Àû¢ Çûî ® 7 ¢¤¢ ¥÷ ® 8 ý¢ä ´ó ¤¢ î ¤ 2× 2
:Âþ¥ ñ·õ À÷õ
C =
c11 c12 c13 c14c21 c22 c23 c24c31 c32 c33 c34c41 c42 c43 c44
=
(c′11
c′12
c′21
c′22
)
: ÝþÞ÷ ® Ýû ¤¢ ¤ Bø A, n× n ÅþÂõ ø¢ Ýû¡ üõ ñ
A =(
an2
× n2
11a12
a21 a22
)
n×n
B =(
b11 b12b21 b22
)
n×n
, C = A×B
m1 = (a21 + a22 − a11)(b22 − b12 + b11)
m2 = a11b11
m3 = a12b21
m4 = (a11 − a21)(b22 − b12)
m5 = (a21 + a22)(b12 − b11)
m6 = (a12 − a21 + a11 − a22)b22m7 = a22(b11 + b22 − b12 − b21)
:Àþ üõ ´¨¢ Âþ¥ ¤¬ C ÅþÂõ(m2 + m3 m1 + m2 + m5 + m6
m1 + m2 + m4 −m7 m1 + m2 + m4 + m5
)
. Ýþ¤¢ ¥÷ n2× n
2ýû ÅþÂõ ý âÞ ÛÞä 18ø ® ÛÞä 7 ßþÂ
: ´ª¢ Ýû¡ ÅT (n) = 7T (n
2) + 18
(n2
)2
18(
n2
)2 ∈ O(nlog72−ε) =⇒ T (n) ∈ O(nlog7
2 )
. Ýþ¢Þ÷ ù¢Ôµ¨ O ¥ θ ý À÷ª ÂÔ¬ û þ¤¢ ¥ üÌã ´¨ ßØÞõ ö
www.Bshams.ir
www.Bshams.ir
127 (DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
:ßþÂÞÛìÀ.Ýû¢ ô¹÷ ¤ 24 ±Âõ ¥ ÅþÂõ ø¢ ® ߨµ¨ ©ø¤ Ýû¡ üõ
?´¨ ¤ÀÖ Â® ¢ÀãT (24) = 7T (12) = 72T (6) = 73T (3) = 73 × 33
: ñ·õ¤ an b ±¨½õ ý ô¥ ýû ® ¢Àã ßþµÞî î ¤ üÞµþ¤Úó Ýû¡ üõ
. Ýþ¤ø ´¨¢ Àû¢ üõ õ
an =
(an2 )
2 ø¥ na× an−1 ¢Âê na n = 1
: Ýþ¤¢ ßþ . ÝþÂð üõ û ® ¢Àã  ¤ T(n) : Û
T (n) =
T (n2) + 1 ø¥ n
T (n− 1) + 1 ¢Âê n0 n = 1
⇒ T (n) =
T (bn2c) + 1 ø¥ n
T (n− 1) + 1 = T (n−12
) + 2 = T (bn2c) + 2 ¢Âê n
0 n = 1
⇒ T (n) = T (bn2c) + θ(1) , θ(1) = θ(nlog21(logn)0)
⇒ T (n) = θ(logn)
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 128
Dynamic Programming þ üÆþ÷ õ÷ 3.4 ¤ üܬ óbÆõ ö ¤¢ î ´¨û ݵþ¤Úó ßµª÷ ©ø¤ ×þ þ üÆþ÷ õ÷Âή×þ óbÆõ ý Àµ ¤¢ üãþ ÝþÞ÷ üõ Û üµÈð¥ ñõÂê ×þ ¥ ù¢Ôµ¨óbÆõ Àµ ¤¢ î Ýþ¤¢ ö  ü㨠Ñê ×þ ¥ ù¢Ôµ¨ ų¨ .Ýþ üõ üµÈ𥤢 ¤ óbÆõ Û Â üõÀÖõ ýû Û °î ų¨ Ýî Û óø Âþ¢Öõ ý ¤ý ü¿¨ î Ýû¢ üõ õ¢ ¹÷ ¤ À÷ø ¤ ßþ . ÝþÞ÷ üõ ñ±÷¢  ´óÛ ù¤ À÷µ î ´¨ ùÀþ¢Âð áÀ ¹÷ ¥ DP ©ø¤ . Ýþ ´¨¢ üܬ óbÆõ
.ÀþÞ÷ éÁ ¤ Àþ ¢ø D&C ©ø¤ ¤¢ ´¨ ßØÞõ î ¤ ý¤ÂØ ýû. ´¨ Bottom - Up üÜ ù¤ Û ù¤ ßþ ¤¢
:(
nk
)±¨½õ 1.3.4
(nk
)=1 k = 0 or k = n(n−1
k
)+(n−1k−1)
else
(5
2
)
(4
2
)(4
1
)
(3
0
) (3
1
) (3
1
) (3
2
)
?1
.......
.................... (
2
1
) (2
2
)
(1
1
) (1
0
)
? ?
?
1 1
1
ݵþ¤Úó ßþ ý ô¥ öõ¥ ÛìÀ üãþ ´¨ µÞî (nk) ¥ üØþû âÞ ¢Àã
.´¨ Ω((nk
))
T(n,k)=0 k = 0 or k = nT (n− 1, k) + T (n− 1, k − 1) + 1 else
www.Bshams.ir
www.Bshams.ir
129 DYNAMIC PROGRAMMING þ üÆþ÷ õ÷ .3.4
g(n, k) = T (n, k) + 1:Âê
g(n,k)=1 k = 0 or k = ng(n− 1, k) + g(n− 1, k − 1) else
g(n, k) = T (n− 1, k) + T (n− 1, k − 1) + 1+ 1 = (T (n− 1, k) + 1) +
(T (n− 1, k − 1) + 1) = g(n− 1, k) + g(n− 1, k − 1)⇒ g(n, k) =(nk
)
⇒ T (n, k) =(nk
)− 1
: Ýþ¤¢ üÜî¤Ï
T(n,k)=1− l k = 0 or k = nT (n− 1, k) + T (n− 1, k − 1) + l else
. ´¨ T (n, k) =(nk
)− l üµÈð¥ ó¢ãõ 1− l ≥ 0 ýÂ
ÛÞä Âþ¥ ÕþÂÏ ×õþ¢ üÆþ÷ õ÷ ¥ ù¢Ôµ¨ °î ßþ ±¨½õ ýÂ:Ýî üõ
:Ý÷¢ üõ ø ÝþÂð üõ ÂÑ÷ ¤¢ c ô÷ ý¤¢Â
c[n,k]=c[n-1,k-1]+c[n-1,k]
. Ýû¢ ÛØÈ ¤ Âþ¥ ñøÀ ´¨ üêî Åc 0 1 2 . . . . k-1 k0 1
1 1 → 1↓
2 1 → 2 → 1↓ ↓
3 1 → 3 → 3. .. .. .. .. .
n-1 1 c[n-1,k-1] → c[n-1,k]↓
n 1 c[n,k]
. Ýþ¤¢ öµ¨ k ø ÂΨ n Âþ¥ , ¢ Àû¡ θ(nk) ¥ ±¨½õ öõ¥ Å
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 130
û ñ ö¢Âî ¢Â¡ óbÆõ 2.3.4
Âê .Ýî ¢Â¡ ýÀø dn,. . . d2,d1 ýû ب ͨ ¤ ñ Àø N Ýû¡ üõ Ý÷À Ýû¡ üõ . ´¨ ¢õ üêî ù¥À÷ ب Âû ¥ î ´¨ ßþ Âû ب ¢Àã ßþµÞî ¥ î ý¤Ï Ýî ¢Â¡ ¤ ñ Àø N ßþ Ý÷ üõ ü±Â
.Ýî ù¢Ôµ¨¢Â¡ ý ô¥ ب ¢Àã ÛìÀ ¤ c[i,j] Ýî üõ ÓþÂã óbÆõ ßþ Û ýÂ
. ýÀø di , . . . , d1ýû ب ͨ ñ Àø j ö¢Âî
c[i,j]=
0 j=0∞ i=1 , j < d11+c[1 , j-d1] i=1 , j ≥ d1c[i-1 , j] i > 1 , j < di
min c[i-1 , j],1+c[i , j - di] i >1 , j ≥ di
:¢¢Âð üõ ¢Â¡ Âþ¥ ¤¬ ñ Àø 8 ñ·õ öä amount 0 1 2 3 4 5 6 7 8d1=1 0 1 2 3 4 5 6 7 8d2=4 0 1 2 3 1 2 3 4 2d3=6 0 1 2 3 1 2 1 2 2
:ݵþ¤ÚóFunction coins(N,n)
array d[1..n] specifies the coin,in example there are 1,4,6 units
array d[1..n]
array C[0..n,0..N]
for i←1 to n do
C[i,0]←0
for i←1 to n do
for j ←1 to N do
if(i=1 and j<d[1]) then C[i,j]←∞
else if(i=1 and j≥ d[1]) then C[i,j]← 1+C[1,j-d[1]]
else if(i>1 and j<d[i])then C[i,j]← C[i-1,j]
else C[i,j]← minC[i-1,j],1+C[i,j-d[i]]
. Ýþ¤¢ öµ¨ N+1øÂΨ n Âþ¥ ,´¨ θ((N + 1)n) ¥ öõ¥
www.Bshams.ir
www.Bshams.ir
131 DYNAMIC PROGRAMMING þ üÆþ÷ õ÷ .3.4
0,1 üµÈ óî óbÆõ 3.3.4
¤ ö Ýû¡ üõ . Àî ÛÞ½ À÷ üõ ¤ W ö¥ø î Ýþ¤¢ üµÈ óî ÀîÂêö ö¢Âî  ýÂ.Àª üõ vi ö ©¥¤ø wi ô i üª ö¥ø .Ýî  1,2,. . . n ýªÀþ ßþ .(Ýþ¤À÷ ýÂÆî ´ó)¢ÂØ÷ þ ¢Âî ¿µ÷ ¤ üª ö ö üõ ¤ Âû
.xi ∈ 0,1 ö ¤¢ î ݪ µª¢ ¤ max(∑
xivi) ø∑
xiwi ≤W
Ûì ö¥ø üµÈ óî ×þ î üª¥¤ ·îÀ v[i,j] Ýî üõ ÓþÂãÛ ýÂ: Ýþ¤¢ ßþ .Àª µª¢ 1,2,. . . i ýª À÷ üõ j ÛÞ½
V[i,j]=
0 j=0,∀ i−∞ or 0 i=1 , 0<j < w1
V1 i=1 , j ≥ w1
V[i-1,j] i > 1 ,0< j < wi
max V[i-1,j],Vi+V[i-1,j-wi] i >1 , j ≥ wi
:ÀþÞ÷ ´ì¢ Âþ¥ ñ·õ
weight unit 0 1 2 3 4 5 6 7 8 9 10 11w1=1 v1=1 0 1 1 1 1 1 1 1 1 1 1 1w2=2 v2=6 0 1 6 7 7 7 7 7 7 7 7 7w3=5 v3=6 0 1 6 7 7 18 19 24 25 25 25 25w4=6 v4=22 0 1 6 7 7 18 22 24 28 29 29 40w5=7 v5=28 0 1 6 7 7 18 22 28 29 34 35 40
. ´¨ θ((W + 1)n) ¥ öõ¥ ¢ª üõ ùÀûÈõ î ¤Ï öÞû
: Floyd ݵþ¤Úó 4.3.4
¤¢ ´ú éÂð ×þ ¥ ÃþÞµõ §¤ ø¢ Âû ß ÂÆõ ßþ ùî þÃû ݵþ¤Úó ßþ.Àî üõ ±¨½õ ´¨ üÔõ÷ ö ñþ Âû ö¥ø î ¤ ¤¢ ö¥ø
Function Floyd (L[1..n,1..n]):array D[1..n,1..n]
D←L
for k ← 1 to n do
for i ← 1 to n do
for j ← 1 to n do
D[i,j] ← min(D[i, j], D[i, k] + D[k, j])
return D
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 132
P üØÞî þ¤ ¥ ö üõ ÂÆõ ßµêÂð ýÂ. ´¨ θ(n3) ¥ ݵþ¤Úó ßþ öõ¥:¢Þ÷ ù¢Ôµ¨
Function Floyd (L[1..n,1..n]):array D[1..n,1..n],array P[1..n,1..n]
D←L
P← ∅for k ← 1 to n do
for i ← 1 to n do
for j ← 1 to n do
if D[i,j] > D[i,k]+D[k,j]
D[i,j] ← D[i,k]+D[k,j]
P[i,j] ← k
return D , P
:ÀþÞ÷ ´ì¢ Âþ¥ ñ·õ
1
2
4
3
I
-
15
530
505
15
515
D0 = L =
0 5 ∞ ∞50 0 15 5
30 ∞ 0 15
15 ∞ 5 0
D1 =
0 5 ∞ ∞50 0 15 5
30 35 0 15
15 20 5 0
D2 =
0 5 20 10
50 0 15 5
30 35 0 15
15 20 5 0
D3 =
0 5 20 10
45 0 15 5
30 35 0 15
15 20 5 0
D4 =
0 5 15 10
20 0 10 5
30 35 0 15
15 20 5 0
P =
0 0 4 2
4 0 4 0
0 1 0 0
0 1 0 0
?Àî ¢¹þ À÷ üõ üÜØÈõ Àª üÔõ éÂð ýû ñþ ö¥ø Âð : ßþÂÞ? ÀþÞ÷ ü¨¤Â Dijkstra ݵþ¤Úó ¢¤õ ¤¢ ¤ ßþÂÞ : ßþÂÞ
www.Bshams.ir
www.Bshams.ir
133 DYNAMIC PROGRAMMING þ üÆþ÷ õ÷ .3.4
(chained matrix multiplication) ûÅþÂõ ýù¹÷¥ ® 5.3.4
üõ di−1 × di ±Âõ ¥Ai ÅþÂõ Âû.ÀµÆûøÂÔõ A1, A2, ..., An ÅþÂõ n
® ßþ Øþ¤Ï ÝþÞ÷ ±¨½õ¤ A=A1A2.....An Û¬ Ýû¡ üõ .Àª÷ð Àþ û ÅþÂõ ¤î ßþ ý ´¨ üúþÀ .Àµê ëÔ ßØÞõ öõ¥ ßþµÞî ¤¢
.¢ª Þî ú÷ ýú® ¢Àã î À÷ª ý¤Áðõ÷ ý® ¢Àã ÛìÀ mij îÝþ¥¨ üõ ö ¤ M=(mij)n∗nÅþÂõ ¤Ñõ ßþ ýÂ
.Àª AiAi+1.....Aj ® ±¨½õ ý ô¥mii = 0 Ai±¨½õ ¤¢ô¥ ® ¢Àãmii+1 = di−1didi+1 AiAi+1±¨½õ ¤¢ô¥ ® ¢Àã
: Ýþ¤¢ ¤ Âþ¥ Íø ¤ û ÅþÂõ ® ¤¢ Ý÷¢ üõA = (aij)p×q B = (bij)q×r C = (cij)p×r = AB
⇒ cij=q∑
k=1
aikbkj
for i=1 to p do
for j=1 to r do ∈ θ(pqr)
for k=1 to q do
cij = cij + aikbkj
: Ýþ¤¢ ßþÂ
( AiAi+1...Ak)(Ak+1...Aj)
mij =
0 i=jmini≤k≤j−1mik + mk+1,j + di−1dkdj j>i , i=1,2,.....n-1
: Ýþ¤¢ Âþ¥ Âçµõ Âç
j=i+s ⇒
mi,i+s =
0 s=0 , i=1,...,n
mini≤k≤i+s−1mik + mk+1,i+s + di−1dkdi+s i=1,2,.....n-s ,1≤ s ≤n-1
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 134
: ݵþ¤Úóint minmult(int n,const int d[ ],index p[ ][ ])
index i,j,k,diagonal;
int M[1..n][1..n]
for (i=1;i ≤ n;i++)
M[i][[i]=0;
for (diagonal=1;diagonal ≤ n-1;diagonal++)
for (i=1;i ≤ n-diagonal;i++)
j ← i+diagonal
m[i][j] = mini≤k≤j−1m[i][k] + m[k + 1][j] + d[i− 1]d[k]d[j]
p[i][j]=a value of k that gave the minimum
return M[1][n];
: ´¨ Âþ¥ ¤¬ ݵþ¤Úó ý öõ¥
n−1∑
s=1
s(n− s) = Θ(n3)
.Àþ¤ø ´¨À ¤ û ® ¢Àã ÛìÀ Âþ¥ ýû ÅþÂõ ¤¢: ñ·õA1 = A13×5 A2 = B5×89 A3 = C89×3 A4 = D3×34
s=0 =⇒
m11 = 0
m22 = 0
m33 = 0
m44 = 0
s=1 =⇒
m12 = d0d1d2 = 13× 5× 89 = 5785
m23 = d1d2d3 = 5× 89× 3 = 1335
m34 = d2d3d4 = 89× 3× 34 = 9078
s=2 =⇒
m13 = m11 + m23 + 13× 5× 3, m12 + m33 + 13× 89× 3= min1530,9256 = 1530
m24 = 1845
www.Bshams.ir
www.Bshams.ir
135 DYNAMIC PROGRAMMING þ üÆþ÷ õ÷ .3.4
s=3 =⇒
m14 = minm11 + m24 + d0d1d4, m12 + m34 + d0d2d4, m13+
m44 + d0d3d4=2856
ú üþø¢ø¢ ý¹µÆ ´¡¤¢ 6.3.4
´¡¤¢ ×þ ýø¤ ¤ ÀÜî n ßþ Ýû¡ üõ î Ýþ¤¢ ¤µ¡ ¤¢ ÀÜî n î Àî Âêý üãõ ñÞµ ý¤¢ û ÀÜî ßþ ¥ ×þ Âû .Ýû¢ ¤Âì üþø¢ø¢ ý¹µÆ¢Âê Âʽõ ÀÜî) .À÷ ùÀª °Âõ ý¢ã¬ °Â û ÀÜî .Àª üõ ü¨Âµ¨¢´¨ ¼®ø .Àª üõ pi ô i ÀÜî ü¨Âµ¨¢ ñÞµ î ´¨ ßþ  Âê( ´¨×þ ¤ ÀÜî n ßþ ü±Â î ÝþÞ÷ ü¨¤Â Ýû¡ üõ .
n∑i=1
pi = 1 îÝÞ÷ üõ û ùÂð ü¨Âµ¨¢ þÃû ͨµõ ÝþÞ÷ ÛþÀ± üþø¢ø¢ ý¹µÆ ´¡¤¢
.ÀªÕÎõ ú÷ ü¨Âµ¨¢ ñÞµ ø û ÀÜî ù¤Þª ñøÀ î Àî Âê ñ·õ ýÂ
:Àª Âþ¥node 6 12 18 20 27 34 35
probability 0.2 0.25 0.05 0.1 0.05 0.3 0.05
üõ. ´¨ Âþ¥ Ûت ´ª¢ üþø¢ø¢ ý¹µÆ ´¡¤¢ ×þ ö üõ î ü¥ üØþ¢Àã üê¢Ê Âçµõ Å. Ý ¤ û ùÂð áÞ¹õ ü¨Âµ¨¢ þÃû ͨµõ Ýû¡
.Àª üõ ü¨Âµ¨¢ ý û ÆþÖõ
34
12 35
6 20
18 27
1×0.3+2×0.25+2×0.05+3×0.2+3×0.1+4×0.05+4×0.05= 2.2
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 136
ñ , Àª üõn∑
i=1
pi(depth(ci) + 1) ÂÂû ùÂð ôÞ ü¨Âµ¨¢ þÃû ͨµõ.Àõ Àû¡ ´¨¢ ýÂÚþ¢ ¤ÀÖõ Àª Âþ¥ ¤¬ ´¡¤¢ Âð
12
6 20
18 34
27 35
1×0.25+2×0.2+2×0.1+3×0.05+3×0.3+4×0.05+4×0.05= 2.3
: ÜÿÆõ Û ý ×õþ¢ ù¤.Àª ci, ci+1, . . . , cjýûùÂð ü¨Âµ¨¢ ý þÃû ÛìÀ cijÀîÂê
.´¨ Èþ¤ ¤¢ î Ýþ¤¢ ùÂð ×þ . ´¨ óbÆõ c1nßþÂ
ck
ci < . . . < ck−1 ck+1 < . . . < cj
1)i = j ⇒ cii = pi
2)j > i ⇒ ci < . . . < ck−1 < ck < ck+1 < . . . < cj
´¨¤ ´Þ¨ ý þÃû ø ´¨ ci,k−1 ck ² ´Þ¨ ýûÈþ¤ ý þÃû ck öÀ ÷¥Â ê ôÞ ¥ ñÞ µ ×þ Ýþ¤¢ ¤ ck Èþ¤ î üµ ìø Å .´¨ ck+1,j
. ´¨ pk Ã÷ Èþ¤ ¢¡ ý .¢ª üõ ê® áÞ¹õ
ci,k−1+ck+1,j +pk +pi + ...+pk−1+pk+1+ . . .+pj = cik−1+ck+1j +j∑
t=i
pt
www.Bshams.ir
www.Bshams.ir
137 DYNAMIC PROGRAMMING þ üÆþ÷ õ÷ .3.4
⇒ cij = mini≤k≤j(cik−1 + ck+1j) +j∑
t=i
pt
: Ýþ¤¢ Å j = s + i ÝþÞ÷ üõ ÓþÂã
ci,i+s =
pi s = 0, i = 1, ..., n
mini≤k≤i+sci,k−1 + ck+1,i+s+i+s∑t=i
pt 1 ≤ s ≤ n− 1
,1 ≤ i ≤ n− s
.´¨ û ÅþÂõ ý ù¹÷¥ ® ±ª õ÷ ßþ Àî.
n−1∑s=1
(n− s)(s + 1) = θ(n3): Ýþ¤¢ Ã÷  öõ¥ ý ø: ñ·õ
:Ýþ¤¢ ¤µ¡ ¤¢ ¤ Âþ¥ ÀÜî 4 Àî Âê
Don Isabelle Rulph Wally
key[1] key[2] key[3] key[4]
p1 = 3
8p2 = 3
8p3 = 1
8p4 = 1
8
C 11
2
2
3
3 4
4
3
8
9
811
8
7
4
3
8
5
8
1
8
3
81
8
1
P 11 1 1
2
22 2
2 2 2
3
3 33
4
4 4
Isabelle
Don Rulph
Wally
. ´¨ ÂÆõ ÅþÂõ P
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 138
íµÈõ µª¤Âþ¥ ßþµð¤Ã 7.3.4
Ý û ¡ ü õ .À ª µ ª¤ ø¢ Y = y1y2 . . . yn, X = x1x2 . . . xn À î  ê,µª¤ ×þ ¥ µª¤ Âþ¥ ×þ ¥ ¤Ñõ.Ý ¤ ø¢ ßþ ß íµÈõ µª¤ Âþ¥ ßþµð¤Ã.Àª ùÀõ ´¨À µª¤ ö ¥ é À þ ×þ þ ºû éÁ ¥ î ´¨ ý µª¤
:×õþ¢ Û.Yj = y1y2 . . . yj ,Xi = x1x2 . . . xi ÝþÞ÷ üõ ÓþÂã
LCS=Longest Common Subsequence
LCS[Xi, Yj ] =
0 i = 0 or j = 0
1+ LCS[Xi−1, Yj−1] xi = yj , i 6= 0, j 6= 0
MaxLCS[Xi−1, Yj ], LCS[Xi, Yj−1]xi 6= yj , i 6= 0, j 6= 0
LCS-length(X,Y)
1 m← length(X)
2 n← length(Y)
3 for i← 1 to m do
4 c[i,0]← 0
5 for j←0 to n do
6 c[0,j]←0
7 for i←1 to m do
8 for j←1 to n do
9 if (xi = yj) then
10 c[i,j] ←− c[i-1,j-1]+ 1
11 b[i,j] ←− ” ”
12 else if (c[i-1,j] ≥ c[i,j-1]) then
13 c[i,j] ←− c[i-1,j]
14 b[i,j] ←− ” ↑ ”
15 else
16 c[i,j] ←− c[i,j-1]
17 b[i,j] ←− ”← ”
18 return c and b //θ(nm)
www.Bshams.ir
www.Bshams.ir
139 DYNAMIC PROGRAMMING þ üÆþ÷ õ÷ .3.4
Print-LCS(b,X,i,j)
1 if i=0 or j=0 then
2 return
3 if b[i,j]=”” then
4 Print-LCS(b,X,i-1,j-1)
5 Print xi
6 if b[i,j]=”↑ ” then
7 Print-LCS(b,X,i-1,j)
8 else Print-LCS(b,X,i,j-1) //O(n + m)
Âþ¥ ö¢¤ø ´¨¢ ýÂ.Àª üÞ÷ ¢Âê Âʽõ ßþ î ¢Þ÷ Àþ.ÝþÞ÷ ñ±÷¢ ¤ û ÇÜê ´ú Àþ íµÈõ µª¤
: ñ·õ
X=ABCBDAB Y=BDCABA LCS=BCBA
j 0 1 2 3 4 5 6
i yj B D C A B A
0 xi 0 0 0 0 0 0 0
1 A 0 ↑0
↑0
↑0
1
←1
1
2 B 0 1
←1
←1
↑1
2
←2
3 C 0 ↑1
↑1
2
←2
↑2
↑2
4 B 0 1
↑1
↑2
↑2
3
←3
5 D 0 ↑1
2
↑2
↑2
↑3
↑3
6 A 0 ↑1
↑2
↑2
3
↑3
4
7 B 0 1
↑2
↑2
↑3
4
↑4
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 140
ü÷ú ÖÆõ ý óbÆõ 8.3.4
ö ¤¢ Àþ ´¨¢ ý¥ø n Ý ø¢ ¥ üØþ Àû¢ üõ ÖÆõ ¤ÀÖ÷ B ø A Ý ø¢ø¢ ßþ î ´¨ üúþÀ .Àþ ù¤ ÖÆõ Àã ýÜÂõ À÷ üõ Ý ßþ ¤¬.(¢¤À÷ ¢ø ýøÆ ´ó ) Àª µª¢ ý¥ 2n− 1 ·îÀ ø n ÛìÀ Àþ ÝÀª q  B ¢Â ¹µ÷ ¤¢ A ´Æت ñÞµ ø p ý¥ Âû ¤¢ A Ý ¢Â ñÞµ Âð»÷ ¢Âð üõ ¤¬ ÂÚþ¢ ý¥ ¥ ÛÖµÆõ Ûت ý¥ Âû î ÝîÂê øý¥ø j B Ý ø ý¥ø i A Ý Øþ  ¯øÂÈõ Àª A ¢Â ñÞµ p(i, j)
.Àª µª¢ ¥÷: ´¨ Âþ¥ üµÈð¥ Ûت p(i, j) üóÞµ ý Τ •
p(i, j) = p ∗ p(i− 1, j) + q ∗ p(i, j − 1) , i ≥ 1, j ≥ 1p(0, j) = 1 ∀j ≥ 1p(i,0) = 0 ∀i ≥ 1
: Devide and conquer ©ø¤ Û •
function p(i,j)
if i=0 then return 1
else if j=0 then return 0
else return p*p(i-1,j)+q*p(i,j-1)
;
ý Τ ø Ý ¤ p(n, n) ý ±¨½õ ý ô¥ ýû âÞ ¢Àã Ýû¡ üõ ñ: Ýþ¤¢ û âÞ ¢Àã ý ¤ Âþ¥ üµÈð¥
g(i, j) = g(i− 1, j) + g(i, j − 1) + 1
g(i,0) = g(0, j) = 0
:Àþ üõ ¤¢ Âþ¥ ¤¬ ý Τ h(i + j, j) = g(i, j) Âaçµõ Âç
h(i + j, j) = h(i + j − 1, j) + h(i + j − 1, j − 1) + 1
h(i + 0,0) = h(0+ j, j) = 0
.¢ Àû¡ (i+jj
)− 1 µê¤ ¤î ýû âÞ ¢Àã ñب ñõÂê ¥ ù¢Ôµ¨
¢Àã  ø¢ ü¨¤Â ¢¤õ üµÈð¥ ý Τ ¤¢ û ® ¢Àã î Ý÷¢ üõ õ
www.Bshams.ir
www.Bshams.ir
141 DYNAMIC PROGRAMMING þ üÆþ÷ õ÷ .3.4
üõ ô¹÷ ® 2(2nn
)− 2 ¢Àã p(n, n) ý ±¨½õ ý Š. ´¨û âÞ
üõ 4n
2n+1¥ µð¤Ã î, ´¨ Ω(2n
n
) À ¤¢ ü÷õ¥ ý¤¢ Àî ¹µ÷ ¤¢ ø .¢ª. ´Æ÷ Àõ¤î ©ø¤ ßþ ¥ ù¢Ôµ¨ Å. Àª
: Dynamic programming ©ø¤ Û •
function series(n,p)
array p[0..n,0..n]
q = 1 - p
fill from topleft to diagonal
for s = 1 to n do
p[0,s] = 1 , p[s,0] = 0
for k = 1 to s - 1 do
p[k,s - k] = p * p[k - 1,s - k] + q * p[k,s - k - 1]
fill from below diagonal to bottomright
for s = 1 to n do
for k = 0 to n - s do
p[s + k,n - k] = p * p[s + k - 1,n - k] + q * p[s + k,n - k - 1]
return p[ n , n ];
. ´¨ Û±ì ©ø¤ ¥  ú ¤Æ î Àª θ(n2)¥ ü÷õ¥ üðÀ» °Â ßþ
1
0
0
0
1
p p+pq
p2p3 + pq + pq2
0
n 0
1
2
0
3
0 1 2 n3
1
4
......................
...................................
................................................
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 142
¢Âð ù¤ø¢ ùÀªøÂê óbÆõ 9.3.4
î ý¤Ï ¢¢Âð ø ¢ø Âúª n Àû¡ üõ ¢Âð ù¤ø¢ ùÀªøÂê ×þ ÀîÂêÉ¿Èõ þÃû ÂÆõ ×þ ÂÚþ¢ Âúª Âû ¥ üãþ Àª µª¢ ¤ ÂÆõ þÃû ßþµÞî
.¢¤¢ ¢ø
üõ öÈ÷ W ýÀã ø¢ þ¤ ͨ ¤ §¤ n ¤¢ ´ú éÂð ¹þ ¤¢ :Ûminlenght. ´¨ j ø i §¤ ß ñ þ ñÏ ùÀû¢ öÈ ÷ W[i][j] ¤Ê÷ ¤¢ Ýû¢ø ´¨ n 1 ¥ ö ýûÂΨ î ´¨ ýÀã ø¢ þ¤ P , ´¨ ú ¤ ùÀû¢ öÈ÷ÅþÀ÷ P[i][A] . ´¨ ùÀª ý¤Áð ÅþÀ÷ V − v1 ýû äÞ¹õ Âþ¥ ͨ ö öµ¨A §¤ Þû ¥ î ´¨ v1 vi ¥ ÂÆõ ßþ ùî ýø¤ vi ¥ Å §¤ ߵƿ÷
. ¢¤Áð üõ ¤±Øþ fÖì¢void travel(int n,const number W,index P,number & minlenght)
index i,j,k;
number D[1..n][subset of V-v1];
for (i=2 ;i ≤ n;i++)
D[i][∅]=W[i][1];
for(k=1;k≤n-2;k++)
for(all subset A ⊆ V -v1contaning k vertices)
for (i such that i6=1 and vi is not in A)
D[i][A]=minj:vj∈A(W[i][j]+D[j][A-vj);
P[i][A]=value of j that gave the minimum ;
D[1][V-v1]=min2≤j≤n(W[1][j]+D[j][V-v1, vj])
P[1][V-v1]=value of j that gave the minimum;
minleght=D[1][V-v1];
www.Bshams.ir
www.Bshams.ir
143 û ý¥ ´Þ÷¤ .4.4
û ý¥ ´Þ÷¤ 4.4ÂÊä n ß ¤ ÂÊä ßþµð¤Ã ßõø¢ üãÎì ݵþ¤Úó ×þ ¥ ù¢Ôµ¨ Ýû¡ üõ©ø¤ ßþ ¤¢. ´¨ ùÀª ý¤¢Â Úó üêÁ ýû ô ©ø¤ ¥ ´Þ÷¤ ©ø¤ Ý
:¢ª üõ ÛÞä Âþ¥ ùª û Ý öõÂúì ö¢¤ø ´¨À ýÂÖÆõ Ýû Ý ø¢ Âû ų¨ ùÀª ÝÆÖ üþ 2 ýû µ¨¢ ¢õ ýû Ýý¤Ãð  À÷ø ¤ ßþ ų¨ Àþ ù¤ Àã ¤ø¢ À÷ üõ û Ý ßþ öõÂúì Àû¢ üõ
.¢ª É¿Èõ û öõÂúì öõÂúì Ø÷ Àþ üõ õ¢ ýÀã ´Þ÷¤:ñ·õ
19 20 14 9 12 5 13 8
20 14 12 13
20 13
20
¢Àã .´¨ dlg ne áÔ ¤ Àª± ÷ 2 ö ¥ üÂÌõ Â¬ä ¢Àã Âð ¹ þ ¤¢.´¨ 2h − n −∞ ¬ä
n = 2k :
lg n∑
i=1
n
2i=
n2(1− (1
2)lg n)
1− 1
2
= n(1− 1
n) = n− 1
Àª±÷ 2 ¥ ü÷ öª¢Àã î ý¬ä ÝÞþÃîõ ö¢¤ø ´¨À ý ©ø¤ ßþ´¨À ý õ ¢¤À÷ üóÞãõ ©ø¤ üìÂê î,¢¤¢ ¥÷ ÆþÖõ n-1 öÞû Ã÷
. ´¨ °¨õ ÂÊä ßþµð¤Ã ßõø¢ ö¢¤øÈþ¤ ýû ùÀ÷¥ ß ¤¢ ¤ ÝÞÆîõ Àþ ÂÊä ßþµð¤Ã ßõø¢ ö¢¤ø ´¨À ýÂ.Ýþ¤¢ Èþ¤ ùÀ÷¥ ÂÊä, ´¡¤¢ áÔ¤ ù¥À÷ Å . ÝþÞ÷ À( 20 üãþ)n-1+dlgne-1=n+dlgne-2 Û î ¤¢ Å . ´¨ dlg ne -1 û Æ þ Ö õ ¢À ã Å
. Ýþ¤¢ ÆþÖõ
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 144
ö¢¤ø ´¨À ý ÆþÖõ ¢Àã ÛìÀ ÆþÖõ ¢Àã ßþ Àû¢ öÈ÷ : ßþÂÞ. ´¨ ÂÊä ßþµð¤Ã ßõø¢
B &T ( Back Tracking ) 5.4¥ ÜÿÆõ ×þ Û ý ö ¤¢ î ´¨ üÆþ÷ õ÷ ×Ø ¢Âð °Öä ´Èð¥ýÌê ¥ ÎÖ÷ Âû üãþ. ¢¢Âð üõ ù¢Ôµ¨(¤¢ ´ú ´¡¤¢) ¤¢ ´ú éÂð ×þüõ ÂÑ÷ ¤¢ ¤¢ ´ú ´¡¤¢ þ éÂð ×þ ¥ ñþ ×þ þ ø §¤ ×þ ÂÒµõ ¤ ÜÿÆõÂþ¥ µØ÷ üµÆþ î ´Æ÷ ´¨ Ýúõ B&T ÛÆõ Û ¢¤õ ¤¢ î »÷ . ÝþÂð
Promissing â : ¡ª ¤µîê : Óó . ¢ª öä §b¤ ×þ ¥ ö üõ î üþû ùÂð ¢Àã ·îÀ üãþ ¡ª ¤µîê þ î Àî üõ ü¨¤Â î ´¨ üã promissing â ø ´ª¢ ü¨Âµ¨¢ À÷¥Âêüãþ ¡ ùÂð ¿µ÷ öØõ ¥ ¤Ñõ . ¡ þ ´¨ (fisible) ü÷Àª ¡ ùÂð ¿µ÷ßþ ´þÃõ . ¡ þ Àõ Àû¡ ¢ø üÜ¡À þ Ëì ùÂð ßþ ¿µ÷ Øþ
. ´¨û ´ó ôÞ ö¢¢ ©ø¤
Âþ¥ø nóÆõ 1.5.4
ý¤Ï Ýû¢ ¤Âì ¤ Âþ¥ø n ,n×n ¸÷ÂΪ ½Ô¬×þ ¤¢ Ýû¡ üõ î Àî ÂêÛ¡À î ¢ª × Àþ ¹þ ¤¢ .À þÞ ÷ ÀþÀú ¤ ÂÚþÀØþ ýÂþ¥ø ø¢ ºû î[k,col[k]] ÷¡ ¤¢ ôk Âþ¥ø . ´¨ [i,col[i]] ÷¡ ¤¢i Âþ¥ø . ÀµÔ÷ ëÔ ô kø ôiÂþ¥ø
:Àû¢ ¤ Âþ¥ ´ó ø¢ k < i ýÂ Àþ Å .´¨col[i]6= col[k], |col[i]− col[k]| 6= i-k
bool promssing (index i) index k;
bool switch;
k=1;
switch=true;
while(k < i && switch)if (col[i]==col[k] ‖ abs(col[i]-col[k])==i-k)
switch=false;
k++;//end of whilereturn switch;
.´¨n ¡ª ¤µîê Å Ýþ¤¢ öµ¨ n¡ª Âû¤¢ :¡ª ¤µîê
www.Bshams.ir
www.Bshams.ir
145 B &T ( BACK TRACKING ) .5.4
void queens (index i)
index j;
if (promissing (i))
if (i==n)
cout<< col[1] through col[n];
else
for(j=1;j <= n;j++)
col[i+1]=j;
queens(i+1);
.ÀþÞ÷ ÛÞ½¤ W ö¥ø À÷ üõ î Ýþ¤¢ üµÈ óî ×þ î ÀîÂê : ñ·õ¤¢.´¨ wi ö¥ø ý¤¢ üª Âû.Ýî  n, ...,2,1 ª ¤ óî ßþ Ýû¡ üõî Àª ý ÷ð Àþ ö¢Âî  ù½÷.ÝþÞ÷ ¿µ÷ Ý÷µõ ¤ üª ºû þ ×þ ¹þßØÞõ ýúµó ôÞ Ýû¡ üõ .Àª w  À÷ª üõ ¿µ÷ î üþª ö¥ø fÖì¢
.Ý ¤w1 = 3, w2 = 4, w3 = 5 ª ö¥ø ø 13 üµÈ óî ö¥ø î Àî Âê
Â𠢪 üõ ê® üª ö Àª ×þ ñþ °Æ Âð ´¡¤¢ ßþ ¤¢ .Àª w4 = 6 ø¤¢ Âþ¥ ´¨ 2 ¡ª ¤µîê .´¨ ÕÞä ñø ´¡¤¢ ßþ. ¢ÈÞ÷ ê® Àª ÂÔ¬
.Ýþ¤¢ À÷¥Âêø¢ ùÂðÂû
0
3 0
7 3 4
412 7
13 7
8 3 9
0
0
0
00
0
0
0
1
1
1
1
1 1
1
√×
× × × ×
×
×
w1
w2
w3
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 146
weightk =k−1∑i=1
xiwi , totalk =n∑
i=k
wi
void sum-of-subset(index i,int weight,int total)
if (promissing(i))
if(weight==W)
cout<<x[1] through x[n];
else
x[i+1]←− 1
sum-of-subset(i+1,weight+w[i+1],total-w[i+1]);
x[i+1]←− 0
sum-of-subset(i+1,weight,total-w[i+1]);
bool promissing(index i)
return
((weight + total ≥W )&&((weight == W )||(weight + w[i +1] ≤W ))
ü÷µÜÞû ¤ø¢ ßµêþ óbÆõ 2.5.4
void hamiltonian(index i)
index j;
if(promissing(i))
if(i==n-1)
cout vindex[0] through vindex[n-1];
else
for(j = 2 ;j ≤n ; j++)
vindex[i+1] = j ;
hamiltonian(i+1);
www.Bshams.ir
www.Bshams.ir
147 B &T ( BACK TRACKING ) .5.4
bool promissing(index i)index j;
bool switch;
if (i==n-1 && !w[vindex[n-1]][vindex[0]])
switch=false;
else if (i > 0 && !w[vindex[i-1]][vindex[i]])
switch=false;
else switch=true;
j=1;
while(j <i && switch)if(vindex[i]==vindex[j])
switch=false;
j=j+1;
return switch;
m-coloring óbÆõ 3.5.4
ýÃõ Ù÷¤ ö Ù÷¤ m ¤ Àªüõ §b¤ n Ûõª î éÂð ×þ §¤ Ýû¡üõ.Àª±÷ Ù÷ÂÞû ý¤ø¹õ §b¤ ø¢ ºû î Ýî
. ´¨ m ¡ª ¤µîê óbÆõ ßþ ¤¢void m-coloring (index i)
int color;
if (promissing(i))
if (i == n)
cout << vcolor[1] through vcolor[n]
else
for (color = 1; color <= m; color++) volor[i+1] = color;
m-coloring(i+1);
www.Bshams.ir
www.Bshams.ir
üÆþ÷ ݵþ¤Úó Óܵ¿õ ýû ©ø¤ üêÂãõ .4 ÛÊê 148
bool promissing (index i) index j;
bool switch = true;
j = 1;
while (j < i && switch) if (W[i][j] && vcolor[i] == vcolor[j])
switch = false;
j++; return switch;
Branch and Bound (B&B) ×Ø 6.4
Back Tracking ©ø¤ ü÷øÂê ´û±ª î ´¨û ݵþ¤Úó ý¥¨ù¢ ×Ø ×þ¤¢ ùÂð Âû ý (óø ¤ÀÖõ) Bound ×þ B&B ©ø¤ ý¥¨ù¢ ¤¢ f Þãõ .¢¤¢Ýî ùÂð Âû ¿µ÷ ø ÂÆõ Âû ¿µ÷ ý üµÆþ ¹µ÷ ¤¢ ,¢ªüõ µêÂð ÂÑ÷ÂÑ÷ ¤¢ î Àª ýÀ÷ ¥ ÂµÈ ÀÊÖõ ùÂð ùÂð ßþ ¥ öÀ¨¤ b þÃû Âð îý f ± óè .¢ªüõ §Âû ÂÆõ ö âìø ¤¢ .ÝþÂÚ÷ ÂÑ÷ ¤¢ ¤ ÂÆõ ö ,ÝþµêÂð
.¢¢Âðüõ ù¢Ôµ¨ BFS ¤µ¡¨ ¥ ©ø¤ ßþ ý¥¨ù¢
www.Bshams.ir
www.Bshams.ir
5 ÛÊê
û éÂð Çþ
Exploring graphs û éÂð Çþ .5
(Depth First Search) DFS ݵþ¤Úó 1.5procedure DF-Search(G=< N,A > )
for each v ∈ N do mark[v] ← not-visited
for each v ∈ N do
if mark[v] 6= visited then
DFS(v)
procedure DFS(v)
Node v has not previously been visited
mark[v] ← visited
for each node w adjacent to v do
if mark[w] 6= visited then
DFS(w)
www.Bshams.ir
www.Bshams.ir
û éÂð Çþ .5 ÛÊê 150
: Ýþ¤¢ ñ·õ öä
1
32
5 6
4
7 8
1
2
3
6
5
4
7
8
1. DFS(1) =⇒ mark[1]=visited , mark[2] 6= visited
2. DFS(2)
3. DFS(3)
4. DFS(6)
5. DFS(5)→ .À÷ùÀª visit ¤ø¹õ ýû¢÷ Þû ¹þ
6. DFS(4)
7. DFS(7)
8. DFS(8)
: ñ·õö õ¥ ¤¢ î ¢¤¢ ¢ ø DF-Search Ý µ þ¤ Ú ó ¥ ý¥ ¨ ù¢ À û¢ ö È ÷
. ´¨úóþ ¢Àã A ø §¤ ¢Àã N î .¢ª üõ ý¥¨ ù¢ θ(|N |+ |A|)
www.Bshams.ir
www.Bshams.ir
151 (DEPTH FIRST SEARCH) DFS ݵþ¤Úó .1.5
:Ûöõ¥ öÞû Öì¢ Ýµþ¤Úó ý¥¨ ù¢ î ¢Þ÷ öÈ÷ ÂÏ¡ Àþ ¾¨ ¤¢
.¢Þ÷ ù¢Ôµ¨ ´Æó ý¥¨ ù¢ ¥ ö üõ ø ¢¤¢ ¥÷ ùÀª Âî£ î ´¨ ßØÞõ ¤¢ ´ú éÂð ×þ ¤¢ ´¨ ¢úÈõ Âþ¥ ñ·õ ¤¢ î ¤Î÷Þû´¨ ¼®ø Àª À±Þû Âè éÂð »÷.¢ÂîÇþÞ ¤ §¤ ôÞ öµ÷ §b¤ ×þ
.¢ª ü÷¡Âê DF-Search ñø¤ üµÆþ éÂð ýû Ôóbõ ¢Àã ù¥À÷ î
1
2 3 4
7 85 6
6
-
6 6I
w
I
R
R
6?
1
2
3
4
8
76
5
?
~
?
??
q
o
-
K
1. DFS(1)
2. DFS(2)
3. DFS(3)
4. DFS(4)
5. DFS(8)
6. DFS(7)
7. DFS(5)
8. DFS(6)
www.Bshams.ir
www.Bshams.ir
û éÂð Çþ .5 ÛÊê 152
µÈ ý¥¨ ù¢ 1.1.5
Procedure DFS2(v)
p ←empty-stack
Mark[v]←visited
push v on to p
while p is not empty do
while there exites a node w adjacent to top(p)
such that mark[w]6=visited do
mark[w]← visited
push w on to pw is the new top(p)pop(p)
(Breath First Search) BFS ݵþ¤Úó 2.5procedure BF-Search(G)
for each v ∈ N do Mark[v]← not-visited
for each v ∈ N do
if Mark[v] 6= visited then
BFS(v)
procedure BFS(v)
Q← empty-queue
mark[v] ← visited
enqueue v into Q
While Q is not empty do
u ← first(Q)
dequeue u from Q
for each node w adjacent to u do
if Mark[w] 6= visited then
Mark[w] ←− visited
enqueue w into Q
ö¢Âî visit à ÷ û ñþ ôÞ Â þ¥ ´¨ O(|N | + |A|) ¥ µÞî ݵþ¤Úó öõ¥.À÷¤À÷
www.Bshams.ir
www.Bshams.ir
153 TOPOLOGICAL SORT ý¦ó ý¥¨ °Âõ .3.5
: Ýþ¤¢ ñø ñ·õ ý ÷Þ÷ öä
node visited Q
1. 1 61,2,3,4︸ ︷︷ ︸2. 2 62,3,4,5,6︸︷︷︸3. 3 63,4,5,6
4. 4 64,5,6,7,8︸︷︷︸5. 5 65,6,7,8
6. 6 66,7,8
7. 7 67,8
8. 8 68
Topological Sort ý¦ó ý¥¨ °Âõ 3.5üóþ  °Öä ÂÜ §b¤ ¥) ´¨ ¤ø¢ Àìê ø ¤¢ ´ú î Ýþ¤¢ üêÂð ÀîÂê î ´¨ ö éÂð ßþ §¤ ý¥¨ °Âõ ý ©ø¤ ×þ ¤¬ ßþ ¤¢ ( Ýþ¤À÷
: Ýî ÛÞä Âþ¥ ùª´¨ ÕÞä ñø ÇþÞ) .´¨ ÂÔ¬ ö ý¢ø¤ø ¤¢ î Ýþ üõ ¤ ü¨b¤ ÀµÛʵõ ýû ñþ ôÞ ø §b¤ ö ų¨ ù¢Þ÷ ¿µ÷ ¤ §b¤ ö ( ê® ¯Âª õ¤ÀÖ÷ ¤ À÷ø ¤ ßþ . ÝûÀõ õ¢ ¤ Õ¨ þø ¤ f¢À¹õ . Ýî üõ éÁ ¤ ö ¥ µêÂð ©ø¤ ßþ î ´¨ üúþÀ . À÷ª ù¢Þ éÂ𠧤 ôÞ ÝûÀõ õ¢öõ¥ ¹µ÷ ¤¢. ÂµÈ ùÀî ¢øÀ½õ Íþª õ , ´¨ ö Èõ fÖì¢ ø DFS ©ø¤.´¨ θ(1) ¥ ùÀî ¢øÀ½õ Íþª öõ¥ Âþ¥ ´¨ θ(|N |+ |A|) À ¤¢ ö ýÂ
¥ Óܵ¿õ üø¡ À ø Àª üÞ÷ ¢Âê Âʽõ î ´ª¢ Àþ: Ýþ¤¢ ñ·õ öä . ݪ µª¢ Ý÷ üõ ݵþ¤Úó ßþ
1
3
2
6
4
5* -
s -
j
3?
:Àª ¤¬ ßþ À÷ üõ û üø¡ ¥ üØþ ñ·õ ßþ ýÂ1,3,2,4,6,5
www.Bshams.ir
www.Bshams.ir
û éÂð Çþ .5 ÛÊê 154
Bellman Ford ݵþ¤Úó 4.5
Bellmanݵþ¤Úó ¢ª ù¢Ôµ¨ üþÂÆõ ý À÷ üõ î üþû ݵþ¤Úó ¥ üØþÀ÷µõ ö ýúóþ °ÆÂ î ¤¢ ´ú éÂð ×þ ý ݵþ¤Úó ßþ . ´¨ Ford
¤Ø §¤ Âþ¨ â±õ ùÂð ô÷ üûÂð ¥ ÂÆõ ßþµûî ßµêþ ´ú Àª üÔõüÔõ ö¥ø ý¤ø¢ î Àî ¤î ´¨¤¢ À÷ üõ ü÷õ¥ ݵþ¤Úó ßþ µ±ó . ¢ø ¤ üõ
.Àª µªÀ÷. Àª üõ â±õ §¤ s ø G=< V, E > ø éÂ𠧤 äÞ¹õ V[G]
INITILIZE − SINGLE − SOURCE(G, s)
1. for each vertex v ∈ V [G] do
2. d[v]←∞3. π[v]← NIL
4. d[s]← 0
RELAX(u, v, w)
1. if d[v] >d[u]+w[u,v] then
2. d[v]← d[u] + w[u, v]
3. π[v]← u
BELLMAN − FORD(G,w,s)
1. INITIALIZE-SINGLE-SOURCE(G,s)
2. for i← 1 to (|V [G]|-1) do
3. for each edge (u, v) ∈ E(G) do
4. RELAX(u,v,w)
5. for each edge (u, v) ∈ E(G)
6. if d[v] > d[u]+w(u,v) then
7. return FALSE
8. return TRUE //θ(|V ||E|)
: Ýþ¤¢ ñ·õ öä
www.Bshams.ir
www.Bshams.ir
155 DAG ݵþ¤Úó .5.5
∞ ∞
∞ ∞
0s
x
y z
r
3
?j
-
6
R
^
I
y
6
7
5
-28
9
2 7-4
-30
6
7
∞
∞
>
s ?-
6
R
y
R
Y
s
6
7
y z9
-42
8
r
5
-2-3
7
x
(a) (b)
0
6 4
7 2
s
7
w-?
6
i
^
I
s
y 97
286
-2
z
-4
-37
5r x
(c)
0
7 2
423
s
R
I
^
?-
6s
y z9
72y
86
r5
-2
x
7-3
-4
(d)
0
2 4
-27
3
q
R
I
?-
6y
w
s
y 9 z
28
6
7
-2
-4-3 7
xr5
(e)
DAG ݵþ¤Úó 5.5éÂð ×þ ¤¢ §¤ × × É¿Èõ ùÂð ×þ ¥ ÂÆõ ßþ ùî ݵþ¤Úó ßþ
.Àû¢ üõ õ ¤ ¤ø¢ Àìê ¤¢ ´úDAG-Shortest-Path(G,w,s)
1. Topologically sort the vertics of G
2. initialize-single-source(G,s)
3. for each vertex u,taken in Topologically sorted order do
for each vertex v∈Adj[u] do
RELAX(u,v,w)
www.Bshams.ir
www.Bshams.ir
û éÂð Çþ .5 ÛÊê 156
ý¥¨ °Âõ ´Üä öõ¥ ø ´¨ ¤ø¹õ ´Æó ݵþ¤Úó ßþ ý¥¨ ù¢:Àî ´ì¢ Âþ¥ ñ·õ .´¨ θ(|V |+ |E|) ñØþ¦ó
∞ 0 ∞ ∞ ∞ ∞- - - - -*
~ s
> >
r s t x y z5
3
2
6
7 -1
4
2
-2
1
∞ 0 ∞ ∞ ∞ ∞r s
- - - - -s ~
3 *
32
4
5 2
6 1t x zy
7 -1 -2
∞ 0 2 6 ∞ ∞-s
- - - ->
~
r s5
3
2
6t x
1y z
4
2
7 -1 -2
∞ 0 2 6 6 4- s
* >
- - - -s
r s5
3
2
6t x
7 -1
1
-2y z
42
∞ 0 2 6 5 3- - -j
- -j
3 >
5 2
3
6 1
7 -1 -2
42
r s t x y z
∞ 0 2 6 5 3- - -s
- -s
* * 3
r5
s6
2 7t
3 42
-1 -2yx1
z
∞ - 0 - 25r
3
t
6
6 5 4-72x
-1
1y
-2z
- -s
333 42
s ~
www.Bshams.ir
www.Bshams.ir
6 ÛÊê
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
LOOP INVARIANT 1.6? ´Æ LOOP INVARIANT
. ´¨ üÜØÈõ ¤Æ ¤î Àµê üõ üìÔ ÖÜ Âû¤¢ Ý÷À õ î ßþ,À÷ÂþÁ üõ öþ ÂÑ÷ ¢¤õ éÀû öÀ¨¤ öøÀ î üþû ÖÜ þ öþ ü ýû ÖÜLoop Invariant ßþ õ¥ ßþ ¤¢.ÀµÆû ³õî üÆþ÷ õ÷ ¤¢ ¸þ¤ ÛØÈõ ×þ
.Àî üõ ×Þî õ î ´¨´¨¤¢ ݵþ¤Úó ×þ þ Ý÷À ÝþÞ÷ üõ ù¢Ôµ¨ û Loop Invariant ¥ õ âìø ¤¢
.¡ þ Àî üõ ¤îû Âçµõ ß Î¤ î ´¨ µó õÂê ¤±ä À üûð þ ×þ Loop Invariant
ß»Þû ø ÖÜ Û¡¢ öõ¥ Âû ,ÖÜ ý ¥ Û±ì î Àî üõ ö ¤õ ýõ÷ ¤¢.À÷õ üõ üì ´¨¤¢ ÖÜ ýúµ÷ ¤¢
ø LOOP INVARINT óø Ý û Ô õ î ´ ¨ ö  ü ã ¨ ´ Þ Æ ì ß þ ¤¢ñ·õ À Ã÷ úµ÷ ¤¢ ø ¢ª ù¢¢ ¼® Âʵ¿õ üÜ¡ ¤¬ ö ¥ ù¢Ôµ¨ ¥ÂÏ
. ´¨ ùÀª ù¢¤ø ö ¥ ù¢Ôµ¨ ¥ Óܵ¿õ
ùÀ û È õ ¤ Loop Invariant ¥ ù¢ Ô µ ¨ ü Ü î ý Ú ó × þ ´ Þ Æ ì ß þ ¤¢
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 158
:ÀþÞ÷ üõ...
// the Loop Invariant must be true here
while ( TEST CONDITION ) //top of the loop
...
//bottom of the loop
//the Loop Invariant must be true here
// Termination + Loop Invariant ⇒ Goal
...
üÞ÷ ýÂç Loop Invariant üµ¨¤¢ Àî Âç ÖÜ ¤¢ û Âçµõ Âþ¢Öõ î üµìø¤±ä î ¢Þ÷ µØ÷ ßþ Àþ Loop Invariant ö¢Þ÷ É¿Èõ ý .Àîõ À÷õ üõ üì ´¨¤¢ ø ´ ÖÜ ¤ÂØ Âû ¥ Àã ø Û±ì î À÷¤¢ ¢ø ý¤Æ î ßþ  Ýúõ ö ¥ ø ´¨ ͱ Âõ ÖÜ ¤î î ´¨ Loop Invarint ü¤±äö ¥ ¤Ñµ÷ ¢¤õ ø ù¿ó¢ ¹µ÷ ¤ õ Loop Invariant üµ¨¤¢ ÖÜ ßµêþ öþ
: ÝþÞ÷ üõ É¿Èõ ¤ ά À ´ÞÆì ßþ ¤¢ .À÷¨¤ üõ ÖÜ.Àª ´¨¤¢ ÖÜ ý ¥ Û±ì Àþ î ´¨ ýà ö:Pre-condition
À÷õ üõ üì ´¨¤¢ ÖÜ Ûõî ý ¥ Àã î ´¨ ýà ö :Post-condition
¹µ÷ öÞû î Àþ üõ ´¨¢ Loop Invariant ¤¢ ÖÜ ¥ ø¡ ¯Âª ý¥ ø.´¨ ÖÜ ¥ ¤Ñµ÷ ¢¤õ
¥ ø¡ âìø ¤¢ ø Àî üõ ñÂµî ¤ ÖÜ ýÂ î ´¨ üϪ :Loop Variant
.ÀþÞ÷ üõ ñÂµî ¤ ÖÜ ýõ¢ þÖÜ
: Ýû¢ ¤Âì ¢¤õ ¤ Âþ¥ Ø÷ Àþ ÖÜ ×þ ¤î ö¢Âî × ýÂ
. ´¨ ´¨¤¢ ¢ª ¥è ÖÜ Øþ ¥ Û±ì Pre-condition Ýþª ßÿÞÎõ 1
.´¨ ´¨¤¢ Pre-condition ý Loop Invariant Ýû¢ öÈ÷ 2
.¢¤À÷ Loop Invariant üµ¨¤¢  ü±÷  Loop Variant ý Ýû¢ öÈ÷ 3
.´¨ ´¨¤¢ ÖÜ ý Âû¥ Àã Loop Invariant Ýû¢ öÈ÷ 4
www.Bshams.ir
www.Bshams.ir
159 LOOP INVARIANT .1.6
ü µ ¨¤¢  ´ ó¢ Loop Invariant Ö Ü ö þ ¢Â ¹ õ Ý û¢ ö È ÷ 5.¢¤¢ Post-condition
.Àû¢ üõ Çûî þ ÇþÃê¤ Loop Variant ÖÜ ¤ÂØ Âû Ýû¢ öÈ÷ 6
×þ ¥ Û±ì loop Invariant ÂðÝû¢ öÈ÷ Àþ ô¤ú ¢¤õ üµ¨¤¢ ö¢¢ öÈ÷ ýÂ.À÷õ üõ ´¨¤¢ Ã÷ ýÀã ¤ÂØ ¥ Û±ì ´¨ ´¨¤¢ ÖÜ ¤ÂØ
î ´ ¨ ß þ ö ø Ý þ Þ ÷ ü ± ó µ Ø ÷ À þ ´ Þ Æ ì ß þ ¤¢þ 2 ¢¤õ ö¢¢ öÈ÷ âìø ¤¢. ´¨ ü®þ¤ ýÂÖµ¨ Èõ 14 ÛÂõ ýÂøÔ ßþ Ýþ ù¢Þ ¤ ÂÖµ¨ ýû ôð 4 ¢¤õ ö¢¢ öÈ÷ ø Ýþ ù¢ú÷ ¤ ÂÖµ¨ âìø ¤¢. ݪ µª¢ ¢øÀ½õ ýÂÖµ¨ á÷ ×þ õ î ¢ª üõ ¶ä 5 ¢¤õ î
.¢¢Âð üõ Óìµõ ÂÖµ¨ ÖÜ ßµêþ öþ: Ýû¢ üõ öÈ÷ ¤ ëê ÛÂõ ô¹÷ ñ·õ À Âî£ ñ
:ÀþÞ÷ üõ ±¨½õ ¤ n 1 ¥ ¼½¬ ¢Àä áÞ¹õ î üÞµþ¤Úó(1
1. int sum=0;
2. int k=0;
3. while(k < n)
4. k++;
5. sum+=k;
6. ........................................................................................................
precondition : sum = 0, k = 0
postcondition : sum =n∑
i=1
i
loop invariant : sumk =k∑
i=1
i
INITIALIZATION:
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 160
´¨ ´¨¤¢ precondition ý loop invariant ¢¢Âð üõ ùÀûÈõ î ¤Ï öÞû:
k = 0⇒ sum =0∑
i=1
i = 0 = sum
MAINTENANCE:
Àª ´¨¤¢ ÖÜ ¤ÂØ ¥ ô j ÜÂõ ý loop invariant ÂðÝû¢ üõ öÈ÷ ñ: ´¨ ´¨¤¢ Ã÷ ÖÜ ¤ÂØ ¥ ô j+1 ÜÂõ ýÂ
sumj =kj+1∑j=1
j , kj+1 = kj + 1
sumj+1 = sumj + kj+1 = (kj∑
j=1
j) + kj+1 = (kj∑
j=1
j) + kj + 1 =kj+1∑j=1
j
TERMINATION:
¤±ä loop invariant ö ý¥ î ÝþÞ÷ üõ × ¤ ÖÜ ¥ ø¡ ¯Âª ñý¥ îÀª üõ k = n ÖÜ ¥ ø¡ ¯Âª.Àû¢ üõ õ ¤ postcondition
: Ýþ¤¢ ö
sum =n∑
i=1
i ≡ postcondition
:ÀþÞ÷ üõ ±¨½õ ¤ ÂÔ¬ ¥ µð¤Ãø ¼½¬ ý¢Àä Ûþ¤µîê î üÞµþ¤Úó(2
1. int factorial(n)
2. i =1;
3. fact =1;
4. while(i ! = n)
5. i++;
6. fact=fact×i;
7. return fact;
8.
.............................................................................................................
precondition : n ≥ 1
www.Bshams.ir
www.Bshams.ir
161 LOOP INVARIANT .1.6
loop invariant : fact = i !
postcondition : fact = n !
........................................................................................
INITIALIZATION:
i = 1⇒ fact = 1! = 1⇒ fact = i !
MAINTENANCE:
fact′ = j′! , j = j′ + 1 , fact = fact′ × j
⇒ fact = j′!× j = j′ × (j′ + 1) = (j′ + 1)! = j!⇒ fact = j!
TERMINATION:
i = n , fact = i!⇒ fact = n! ≡ postcondition
¤ precondition ¯Âª ´Þû ö ¤¢ î ´¨ üÞµþ¤Úó, ݵþ¤Úó ßþ : µØ÷ÝþÂÚ ÂÔ¬  ¤ nø µêÂÚ÷ ÂÑ÷ ¤¢ ¤ n ≥ 1Ϫ Âð Âþ¥,Àû¢ üõ öÈ÷ ü¡
.À÷¨¤ Àû¿÷ ù¿ó¢ ¹µ÷ ¤ õ øÀª Àû¡ ¤ÂØ ¤ ´þú÷ ü ÖÜ
¤ ÂÔ¬ ¥ µð¤Ã ¼½¬ ¢Àä ø¢ ß íµÈõ Üä ôÆÖõ ßþµð¤Ã î üÞµþ¤Úó(3:À÷¢Âð üõ Â
1. int gcd(int m ,int n)
2. int mprime = m;
3. int nprime = n;
4. while(mprime ! =nprime)
5. if(mprime > nprime)
6. mprime - = nprime;
7. else
8. nprime - = mprime;
9. return mprime;
10. .....................................................................................................
precondition : m, n ∈ Z+
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 162
loop invariant : gcd[m, n] = gcd[mprime, nprime]
postcondition : gcd[m, n] = mprime
...........................................................................
INITIALIZATION:
mprime = m nprime = n⇒ gcd[m, n] = gcd[mprime, nprime]
MAINTENANCE:
gcd[m, n] = gcd[mprimei, nprimei]
• if(mprimei > nprimei) :
mprimei+1 = mprimei − nprimei, nprimei+1 = nprimei
⇒ gcd[mprimei+1, nprimei+1] = gcd[mprimei−nprimei, nprimei] =
gcd[mprimei, nprimei] = gcd[m, n]
• else :
nprimei+1 = nprimei −mprimei, mprimei+1 = mprimei
⇒ gcd[mprimei+1, nprimei+1] = gcd[mprimei, nprimei−mprimei] =
gcd[mprimei, nprimei] = gcd[m, n]
TERMINATION:
mprime = nprime⇒ gcd[m, n] = gcd[mprime, nprime] =
gcd[mprime, mprime] = mprime ≡ postcondition
:ÀþÞ÷ üõ ±¨½õ ¤ en ¤Ü ÍÆ ñø ýÜÞ k î üÞµþ¤Úó(41. double TaylorExp(double n ,int k)
www.Bshams.ir
www.Bshams.ir
163 LOOP INVARIANT .1.6
2. double result =1;
3. int count =0;
4. int denom=1;
5. while (count<k)
6. count ++;
7. denom×=count;
8. result+=pow(n,count)/denom;
9.
10. return result;
11. ......................................................................................................
precondition : n ∈ Z k ∈ N, k > 0
loop invariant : result = 1+ n + n2
2!+ · · ·+ ncount
count! , denom = count!
postcondition : 1+ n + n2
2!+ · · ·+ nK
K! = result
...............................................................
INITIALIZATION:
count = 0, denom = 1, result = 1⇒ n0
0!= 1 = result
MAINTENANCE:
resulti = 1+ n + n2
2!+ · · ·+ ncounti
counti!, denomi = counti!
⇒ denomi+1 = denomi×counti+1 = (counti!)×counti+1 = (counti+1)!,
resulti+1 = resulti + ncounti+1
(counti+1)!= 1+ n + n2
2!+ · · ·+ ncounti
counti!+ n
counti+1
(counti+1)!
TERMINATION:
count = k ⇒ result = 1+ n + n2
2!+ · · ·+ nK
K! ≡ postcondition
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 164
ô¹÷ ¤ üã±Ï ¢Àä ø¢ âÞ Âþ¥ ݵþ¤ÚóÀû¢ öÈ÷ loop invariant ¥ ù¢Ôµ¨ (5:Àû¢ üõ
function add(y,z)
comment return y + z, where y,z ∈ N
1. x := 0 ; c := 0 ; d := 1 ;
2. while(y > 0 ) ∨ (z > 0 ) ∨ (c > 0 )do
3. a := y mod 2;
b :=z mod 2;
4. ifa ⊕ b ⊕ c then x : = x+d ;
5. c := (a ∧ b) ∨ (b ∧ c) ∨ (a ∧ c);
6. d :=2 d; y := b y /2 c;
z:=b z /2 c;
7. return(x)
.......................................................................................................
loop invariant : (yj + zj + cj )dj + xj = y0 + z0
: Ýþ¤¢ ÖÜ áøª ¥ Û±ì ÝþÂÚ ÂÑ÷ ¤¢ z0ø y0 ¤ óø z ø yÂðx0 = 0, c0 = 0, d0 = 1⇒(yj + zj + cj)dj + xj = (y0 + z0 + 0)× 1+ 0 = y0 + z0
: üãþ ´¨ ¤Âì ô j ýÜÂõ ý loop invariant ÝþÞ÷ üõ Âê ñ(yj + zj + cj)dj + xj = y0 + z0
: Ýþ¤¢ ÖÜ ñø¤ Õ±Ï ß»Þûaj+1 = yj mod 2 , bj+1 = zj mod 2
yj+1 = byj/ 2 c , zj+1 = bzj /2c , dj+1=2×dj
¥ÜÂõ ßþ ¤¢ î cj+1 ¢ª üõ ùÀûÈõ ݹ Í¡ ¤¢ î ¤Ï öÞû ß»Þûø bj+1ø aj+1 ¥ ø¢ î ´¨ ×þ üµìø ú Àþ üõ ´¨¢ cj ø bj+1ø aj+1
: ´ª÷ Âþ¥ ¤¬ ¤ cj+1 ö üõ Å,Àª ×þ cj
www.Bshams.ir
www.Bshams.ir
165 LOOP INVARIANT .1.6
cj+1 = b(aj+1 + bj+1 + cj) / 2 c
¢ø ¤ xj+1ø ùÀª âÞ dj xj üµìø ô¤ú Í¡ ÕÎõ Ýû ¤¬ ßÞû ¤¬ ¤ xj+1 ö üõ Å Àª ×þ aj+1 ⊕ bj+1 ⊕ cj ¤±ä î À÷¤ø üõ
:¢Þ÷ ÓþÂã Âþ¥
xj+1 = xj + dj((aj+1 + bj+1 + cj) mod 2)
ø Ýõ ÷ üõ (*) Τ ¤ ö î ÂÚþ¢ Ýúõ Τ ×þ ¥ ÷ ± õ¢ýÂ: Ýþ¤¢ Ã÷ ´¨ Âþ¥ ¤¬
2b n /2c + ( n mod 2)= n ∀n ∈ N (*)
: Ýþ¤¢ø µª÷ ¤ loop invariant ýøÆ ñø éÂÏ ñ
(yj+1 + zj+1 + cj+1)dj+1 + xj+1 =
(byj/2c+ bzj/2c+ b(yj mod 2+ zj mod 2+ cj)/2c)× 2dj + xj+
dj ((yj mod 2+ zj mod 2+ cj) mod 2) = (byj/2c+ bzj/2c)× 2dj
+xj + (b(yj mod 2+ zj mod 2+ cj)/2c)× 2dj+
dj ((yj mod 2+ zj mod 2+ cj) mod 2) (∗) (byj/2c+ bzj/2c)× 2dj
+xj + dj (yj mod 2+ zj mod 2+ cj) = byj/2c × 2dj+
dj (yj mod 2) + bzj/2c × 2dj + dj (zj mod 2) + cj × dj + xj(∗)
(yj + zj + cj) dj + xj = y0 + z0
¤ÂØ k ¥ Àã Âð,Àî üõ À Þ¡ ÖÜ î ÝþÂð üõ ÂÑ÷ ¤¢ ¤ ü÷õ¥ ñ: Ýþ¤¢ loop invarint Õ±Ï Àþ Þ¡ ÖÜ
(yk + zk + ck)dk + xk = y0 + z0
Àþ üõ Çûî bz/2cø by/2c Âþ¢Öõ ¤ÂØ Âû ¤¢ zø y ¤ Âû ö ß»Þû: Ýþ¤¢ ¤ÂØ ßõ k ¥ Àã üãþ ÖÜ ¥ ø¡ öõ¥
yk = zk = ck = 0⇒ xk = y0 + z0
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 166
ùÀ÷¢Âð  î ý x ¤ÀÖõ À¨¤ üõ öþ ݵþ¤Úó üµìø î ¢ª üõ ùÀûÈõ Å. ´¨õ ýóø zø y áÞ¹õ  ¢ª üõ
ô¹÷ ¤ üã±Ï ¢Àä ø¢ ® Âþ¥ ݵþ¤ÚóÀû¢ öÈ÷ loop invariant ¥ ù¢Ôµ¨ (6:Àû¢ üõ
function multiply(y,z)
comment return y z , where y , z ∈ N
1. x :=0
2. while (z >0)do
3. x :=x + y × (z mod 2);
4. y := 2 y; z :=b z/2 c;
5. return(x)
........................................................................................................
loop invariant : xj + yj × zj = y0 × z0
x0 = 0 Àµ ¤¢ , ÝþÂð üõÂÑ÷ ¤¢ z0ø y0 ¤ zø y óø Âþ¢Öõ Û±ì ñ·õ ÕÎõ: Ýþ¤¢ ø ù¢
x0 = 0⇒ xj + yj × zj = x0 + y0 × z0 = y0 × z0
: üãþ ´¨ ¤Âì ô j ýÜÂõ ý loop invariant ÝþÞ÷ üõ Âê ñxj + yj × zj = y0 × z0
: Ýþ¤¢ ÖÜ ñø¤ Õ±Ï ß»Þûxj+1 = xj + yj(zj mod 2) yj+1 = 2 yj zj+1 = bzj/2c
: Ýþ¤¢ Åxj+1 + yj+1 × zj+1 = xj + yj(zj mod 2)+2yj(bzj/2c) =
xj + yj((zj mod 2)+2bzj/2 c))(∗)=
xj + yj × zj = y0 × z0
www.Bshams.ir
www.Bshams.ir
167 LOOP INVARIANT .1.6
k ¤¢ ëÔ ßþ Âð î Àª Àû¡ ÂÔ¬  z ¤ÀÖõ Àþ üõ öþ ÖÜ î úµ÷ ¤¢ø: Ýþ¤¢ Àû¢ ¤ ÖÜ ¤ÂØ ßõ
zk = 0, xk +yk× zk = y0z0 ⇒ xk +yk× zk = xk +yk×0 = xk = y0× z0
ùÀ÷¢Âð î ý x ¤ÀÖõ À¨¤ üõ öþ ݵ þ¤Úó üµìø î Àª ùÀûÈõ Åø ÜÎõ ¹µ÷ öÞû ßþ ø ¢ Àû¡ z ø y ýóø Âþ¢Öõ ® ¢ª üõ
. ´¨õ ¤Ñµ÷ ¢¤õ
ùÀ÷õ üì ø ´ÞÆì ¤¡ Âþ¥ ݵþ¤ÚóÀû¢ öÈ÷ loop invariant ¥ ù¢Ôµ¨ (7:À÷¢Âð üõ  ¤ üã±Ï ¢Àä ø¢ ÝÆÖ
function divide(y,z)
comment return q, r ∈ Nsuch that y = qz+r
and r < z , where y , z ∈ N
1. r :=y; q :=0; w :=z;
2. while w ≤y do w :=2 w;
3. while w > z do
4. q :=2 q; w := b w /2 c ;
5. if w ≤ r then
6. r :=r - w; q :=q+1;
7. return (q , r)
.......................................................................................................
loop invariant : qjwj + rj = y0, rj < wj
r = y0 ø q = 0 ÖÜ ¢ø¤ø ¥ Û±ì, ÝþÂð üõ ÂÑ÷ ¤¢ ¤¢ y0 ¤ yýóø ¤ÀÖõ: Ýþ¤¢ Å ´¨
r = y0 , q = 0⇒ qjwj + rj = 0+ y0 = y0
: üãþ,Àª ¤Âì ô j ýÜÂõ ý loop invariant Ýî üõ Âê ñ
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 168
qjwj + rj = y0, rj < wj
ÖÜ ø¢ ýø¤ ý¤Àì ´¨ ô¥ ýÀã ¤ÂØ ¤¢ û Âçµõ ´ã®ø ßã ý ñÖÜ ¤¢, ݵêÂð ÂÑ÷ ¤¢ z  ¤ w ñø ÖÜ áøª ¥ Û±ì,ÝþÞ÷ Ûõ ݵþ¤Úóýúµ÷ ¤¢ Å, ÀþÞ÷ üõ  ø¢ ¤ w ´¨ ¤Âì w ≤ y ¯Âª î üãìõ ñøüõ ø¥ ý¢Àä ß»Þûø ´¨ µð¤Ã y ¥î Àþ üõ ´¨¢ ýw ÖÜ ßþw ´¨ w > z î üãìõ ÖÜ ßþ ¤¢, Ýþª üõ ôø¢ ÖÜ ¢¤ø ñ,Àª ø¥ ý¢Àä bw/2c ù¤Þû î ´¨ ¼®ø,¢¢Âð üõ ±¨½õ ö Óî ø ùÀª ÓÊ÷ø¥ z Âð, ݵêÂð ÂÑ÷ ¤¢ w = zõ Âõ ýÀµ ¤¢ î ´¨ ÂÏ¡ ßþ ßþ ø ´¨¤ Âû ø À÷õ üõ üì ø¥ Ã÷ öÀª  ø¢ ¤ Âû ø ù¢ ø¥ Ã÷ w ÀªÀª ¢Âê z¤ÀÖõ Âð ñ, ÝþÂÚ ùÀþ¢÷ ¤ Óî ´õä Ý÷ üõ Ã÷ öÀª ÓÊ÷ w ßþ Ã÷ ôø¢ ÖÜ ¤¢ õ , Ýþ¤¢ ¤µ¡ ¤¢ üø¥ ý w ñø ÖÜ ýúµ÷ ¥ Àãý¢Âê ¤ÀÖõ Àû¿ Âð ø ¢¢Âð üõ ±¨½õ ö Óîø ùÀª ÓÊ÷ ¤ Âû ùÀõ ´¨¢ÖÜ ý¤Â젯ª î ´¨ üó ¤¢ ßþ ø ¢ Àû¡ z ¢¡  Àª µª¢.Àª üõ w/2  bw/2c ¤ÀÖõ ÖÜ ßþ ¤¢ ¤ÂØ ¤ Âû ¤¢ Å, ´¨ w > z
qj+1 = 2qj , wj+1 = bwj/2c : Ýþ¤¢ ô j + 1 ¤ÂØ ¤¢ ñ: ÝþÞ÷ ü¨¤Â ¤ ´ó ø¢ Àþ ñ
: Ýþ¤¢ Àª±÷ ¤Âì ݹ Í¡ ¯Âª Âð (a)
wj+1 > rj ⇒
1 : rj+1 = rj , qj+1wj+1 + rj+1 =
2qjbwj/2c+ rj = 2qj(wj/2) + rj = qjwj + rj = y0
2 : wj+1 > rj ⇒ rj < wj+1 , rj+1 = rj
⇒ rj+1 < wj+1
: Ýþ¤¢ Àª ¤Âì ݹ Í¡ ¯Âª Âð (b)
www.Bshams.ir
www.Bshams.ir
169 LOOP INVARIANT .1.6
wj+1 < rj ⇒
1 : rj+1 = rj − wj+1 = rj − bwj/2c, qj+1 =
qj+1 + 1 = 2qj + 1⇒ qj+1wj+1 + rj+1 =
(2qj + 1)bwj/2c+ rj − bwj/2c =
qjwj + bwj/2c+ rj − bwj/2c = y0
2 : wj+1 < rj , rj+1 = rj − wj+1 (1)
öû ¥ ¤î ßþ ýÂ, rj+1 < wj+1 ÝþÞ÷ ± Àþ (1) ßµª¢ ñ: Ýþ¤¢ Å rj+1 ≥ wj+1 ÝþÞ÷ üõ Âê ø ù¢Þ÷ ù¢Ôµ¨ ÓÜ¡
rj − wj+1 ≥ wj+1 ⇒ rj ≥ 2wj+1 ⇒ rj ≥ 2bwj/2c ⇒ rj ≥ wj
ýÜÂõ ý loop invariant ö¢ ¤Âì öÞû î õ Âê ¹µ÷ ßþ îôø¢ ´ÞÆì °Â ßþ , rj+1 < wj+1: Ýþ¤¢ ø µª¢ Ëì ¢ ô j
. ´¨ ¤Âì Ã÷ ô j+1 ýÜÂõ ý Ã÷ loop invariant
öþ ¤ÂØ k ¥ Àã ݵþ¤Úóø ùÀª ¤¡ ôø¢ ýÖÜ ¥ üµìø Ã÷ úµ÷ ¤¢.wk = z0 Ýþ¤¢ À¨¤ üõ
ݵþ¤Úó Å qkz0 + rk = y0 , rk < z0 : Ýþ¤¢ loop invariant Õ±Ï Å.À÷¢Âð õ ý ¤ ¼½¬ ¢Àä ø¢ ÝÆÖ ýùÀ÷õ üìø ´ÞÆì ¤¡
ö ¤ üÖÖ ý¢Àä Âþ¥ ݵþ¤ÚóÀû¢ öÈ÷ loop invariant ¥ ù¢Ôµ¨ (8:À÷¨¤ üõ üã±Ï ý¢Àä
function power(y,z)
comment return yz, where y ∈ R,z ∈ N
1. x :=1;
2. while z > 0 do
3. if z is odd then x := x.y;
4. z :=bz /2 c;
5. y :=y2;
6. return (x)
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 170
loop invariant : xj yjzj = y0
z0
loop Õ±Ïø ù¢ x0 = 1 Àµ ¤¢ , ÝþÂð üõÂÑ÷ ¤¢ z0ø y0 ¤ zø y óø Âþ¢Öõ: Ýþ¤¢ invariant
xjyjzj = y0
z0
j+1 ÜÂõ ý ÖÜ ñø ¤ Õ±Ï ø ô j ÜÂõ ý loop invariant §¨  ñ: Ýþ¤¢ ô
xjyjzj = y0
z0 ,
Àª ¢Âê z Âð ⇒ xj+1 = xjyj , zj+1 = bzj/2c, yj+1 = yj2
Àª ø¥ z Âð ⇒ xj+1 = xj , zj+1 = bzj/2c, yj+1 = yj2
: Ýþ¤¢ Å
Àª ¢Âê z Âð : xj+1yj+1zj+1 = xjyj × (yj)
2×bzj/2c =
xjyj × (yj)2×(zj−1)/2 = xjyj
zj = y0z0
Àª ø¥ z Âð : xj+1yj+1zj+1 = xj × (yj)
2×bzj/2c =
xj × (yj)2×(zj)/2 = xjyj
zj = y0z0
ô k ÜÂõ À÷õ ÜÂõ ×þ ¤¢ î À¨¤ üõ öþ üãìõ ÖÜ Ã÷ ¤î ýúµ÷ ¤¢: Ýþ¤¢ Å z=0ݪ µª¢
xk × ykzk = y0
z0 , zk = 0⇒ xk = y0z0
ö óø y ¢ª üõ ù¢¢ Ûþ½ õ ݵþ¤Úó ýúµ÷ ¤¢ î ý x °Â ßþÀ.¢¢ õ ¤ ÜÎõ ý¹µ÷ Ã÷ ݵþ¤Úó ßþ Å, ´¨ óø z
www.Bshams.ir
www.Bshams.ir
171 LOOP INVARIANT .1.6
þ¤ ¤¢ ¢ õ  þ¢ Ö õ  þ¥ Ý µ þ¤Ú óÀ û¢ öÈ ÷ loop invariant ¥ ù¢ Ô µ ¨ (9:ÀþÞ÷ üõ âÞ ÂÚþÀØþ ¤ A[1 · · ·n]
function sum(A)
comment return∑n
i=1 A[i]
1. s :=0;
2. for i := 1 ton do
3. s :=s+A[i]
4. return (s)
.....................................................................................................
loop invariant : sj =j∑
i=1
A[i ]
loop Õ±Ï Ã ÷ õ ø ´¨ ÂÔ¬  þ¤ ¬ä áÞ¹õ ÖÜ ¢ø¤ø ¥ Û±ì: Ýþ¤¢ invariant
j = 0⇒ s = s0 =0∑
i=1
A[i] = 0
ýÜÂõ ýÂ, Àª ¤Âì ô j ýÜÂõ ý loop invarint Ýî üõ Âê ñ: Ýþ¤¢ ô j+1
sj+1 = sj + A[j + 1] = (j∑
i=1
A[i]) + A[j + 1] =j+1∑
i=1
A[i]
: Ýþ¤¢ Ã÷ ÖÜ ¥ ø¡ ôÚû ¤¢
j = n⇒ s = sn =n∑
i=1
A[i]
. ´¨ ݵþ¤Úó ¥ õ ¤Ñµ÷ ¢¤õ ý¹µ÷ öÞû î
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 172
ý Ü Þ À ¤À Ö õ þ¥ Ý µ þ¤ Ú óÀ û¢ ö È ÷ loop invariant ¥ ù¢ Ô µ ¨ (10Àî üõ ±¨½õ Horner ©ø¤ ¥ ù¢Ôµ¨ ¤ anxn + an−1x
n−1 + · · · a1x + a0
:À÷ùÀª ù¡£ A[0..n] þ¤ ¤¢ °þ® ö ¤¢ î
A[i] = ai for all 0 ≤ i ≤ n
function Horner(A , n)
comment return∑n
i=0 A[i].xi
1. v := 0
2. for i := n downto 0 do
3. v := A[i]+v.x
4. return (v)
..................................................................................................
loop invariant : vj =n∑
i=j
A[i ]x i−j
Áó, ÀþÞ÷ üõ ù¢Ôµ¨ üÈûî for ýÖÜ ¥ ݵ þ¤Úó ßþ î ¢Þ÷ Àþ Ýþ¤¢ ÖÜ ¢ø¤ø ¥ Û±ì ø µêÂð ÂÑ÷ ¤¢ ¤¬ ¤ loop invariant õ
: Ýþ¤¢ loop invariant Õ±Ï Å j=n+1
j = n + 1⇒ v =n∑
i=n+1
A[i]xi−(n+1) = 0
: Ýþ¤¢ ýÀã ýÜÂõ ¤¢, Àª ¤Âì ô j ýÜÂõ ýÂloop invariantÂð ñ
vj = A[j] + vj+1.x⇒ vj+1 = vj−A[j]x =
n∑i=j
A[i]xi−j−A[j]
x =
n∑i=j+1
A[i]xi−j
x =
n∑i=j+1
A[i]xi−j−1 =n∑
i=j+1
A[i]xi−(j+1)
öÞû î j = 0⇒ v =n∑
i=0
A[i]xi : Ýþ¤¢ ø ùÀª j = 0 ÖÜ ¥ ø¡ ôÚû ¤¢. ´¨õ¤Ñµ÷ ¢¤õ ý¹µ÷
www.Bshams.ir
www.Bshams.ir
173 (AMORTIZED ANALYSIS) üîúµ¨ Ãó÷ .2.6
(Amortized Analysis) üîúµ¨ Ãó÷ 2.6Ãó÷ ¤¢ . ´¨ üîúµ¨ Ãó÷ , ÜÞä ¥ äÞ¹õ ×þ Ãó÷ ýúªø¤ ¥ üØþÜÞä ôÞ ýø¤ ý ù¢¢ öÞµ¡¨ ÜÞä ¥ äÞ¹õ×þ ý öõ¥ üîúµ¨Ýî üõ ù¢Ôµ¨ µØ÷ ßþ ö¢¢ öÈ÷ ý ©ø¤ ßþ ¥ . ¢ª üõ ßت¨ ùÀª ÂþÃû äÞ¹õ ×þ öø¤¢ ÛÞä ×þ Âð üµ ´¨ ×î ÛÞä Âû ͨµõ þÃû îÃó÷ õ Ýî üõ ´±½¬ ͨµõ ø ßÚ÷õ ¢¤õ ¤¢ õ Âð . Àª µª¢ ý¢þ¥üÞ÷ Ûõª ¤ ý¤õ ýû ©ø¤ ø ¢¤¢ øÔ ßÚ÷õ ´ó ¤¢ Ãó÷ üîúµ¨´÷Þ® ¤ ´ó ßþÂÀ ¤¢ ÛÞä Âû ͨµõ ý öõ¥ üîúµ¨ Ãó÷ ×þ . ¢ª
. Àî üõ
üîúµ¨ Ãó÷ á÷
À ¤ ± ä ü î ú µ ¨ à ó ÷ ý û ©ø¤ ß þ ¢Â ¤ î  ¥ ©ø¤ ¨:¥
(Aggregate Analysis) üãÞ¹ Ãó÷ •
(Acconting Method) üÆ ©ø¤ •
(Potential Method) ÛÆ÷µ ©ø¤ •
(Aggregate Analysis) üãÞ¹ Ãó÷ 1.2.6
¤¢ ÜÞä n ¥ äÞ¹õ ×þ,û n ôÞ ý¥ Ýû¢ üõ öÈ÷ üãÞ¹ Ãó÷ ¤¢Í¨µõ þÃû , ´ó ßþÂÀ ¤¢ ßþ  . ¢Âð üõ ¤ T (n) fäÞ¹õ, ´ó ßþÂÀý ͨµõ þÃû ßþ î Àî . ´¨ T (n)
n ÜÞä Âû üîúµ¨ þÃû þ¢õ äÞ¹õ ¤¢ ÜÞä ¥ á÷ ßþÀ î üµìø üµ , ´¨ 뢬 ÜÞä ÂûÜÞä ¤ üøÔµõ ͨµõ ýû þÃû ´¨ ßØÞõ ýÀã ©ø¤ ø¢ ¤¢ õ . ÀµÆû¤ ýÀã ©ø¤ ø¢ ´ì¢ õ ´¨ ù¢¨ Âð ©ø¤ ßþ . Ýû¢ ´±Æ÷ Óܵ¿õ ýûÂû «Ê¿õ üîúµ¨ þÃû ×þ ÛÆ÷µ ø üÆ ýû ©ø¤ ÛÞä ¤¢ . ¢¤À÷
. Àû¢ üõ «Êµ¡ ÛÞä
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 174
. Ýî üõ Ãó÷ ¤ 1 µÈ ù¢¢ öÞµ¡¨ , üãÞ¹ Ãó÷ ¥ ñ·õ ßóø ¤¢ : 1 ñ·õ¢¤ø ¤ x ÂÊä : push(S, x) :¥ ´Æ¤±ä ÀµÆû O(1) ¥ î µÈ üܬ ÛÞä ø¢
.ÀØõ S µÈ.À÷¢Âð üõ ¤ ö , µª¢Â ¤ S µÈ ÂÊä ßþ : pop(S)
üõÂê À÷ª üõ  O(1) öõ¥ ¤¢ û ÜÞä ßþ ¥ ôÀî Âû î üþ¹÷ ¥push ÜÞä n ¥ äÞ¹õ×þ üþú÷ þÃû ßþ . Àª 1 ôÀî Âû þÃû Ýî
. ´¨ n , pop øý ¥ ¤ ÂÊä k î Ýî üõ ê® µÈ ¤ multipop(S, k) ÛÞä ×þ õ ñüõ üó¡ ¤ ö , Àª µª¢ ÂÊä k ¥ µÞî , S µÈ Âðþ ø . ¢¤Àõ S µÈ
. ÀîµÈ ¤¢ ýÂÊä ºû Âð ¢Âð üõ TRUE ¤ÀÖõ Stack-Empty â Âþ¥ Àî ±ª ¤¢
. À÷¢Âð üõ ¤ FALSE ¤ÀÖõ ¤¬ ßþ Âè ¤¢ , Àª±÷ ¢õ
Multipop(S, k)
1. while not Stack-Empty(S) and k 6= 0
2. do pop(S)
3. k ← k − 1
µÈ ×þ ýø¤ ¤ multipop ø pop ø push ÜÞä n ¥ äÞ¹õ ×þ ¹þ ¤¢µÈ Ãþ¨ Âð ´ó ßþÂÀ ¤¢ äÞ¹õ ßþ¤¢ , Ýî üõÃó÷ ´Æó¡ Àµ ¤¢ îý öõ¥ ´ó ßþÂÀ ¤¢ . ´¨ O(n) ¥ multipop ÛÞä þÃû Àª n ·îÀ
. ¢ª üõ O(n2) Ûî þÃû ßþ ´¨ O(n) ¥ µÈ ¤¢ ÜÞä ÂûßþÂÀ ¤¢ þÃû ùÀõ ´¨¢ ¹µ÷ õ ´¨ ´¨¤¢ Ûܽ ßþ ÂðäÞ¹õ Ý÷µõ üãÞ¹ Ãó÷ ©ø¤ ¥ ù¢Ôµ¨ . ´Æ÷ Ýؽõ ´óÛÞä Âð , ´ÖÖ ¤¢ . Ýþ¤ø ´¨À µú üþ öÂî ×þ ÜÞä n Ûõªø push ÜÞä n ¥ äÞ¹õ Âû õ ¢Â üõ ý¢ þ¥ þÃû üþú multipop
. ¢¤¢ ¤ O(n) þÃû ,  ·îÀ üó¡ ýÀµ ¤¢ µÈ ×þ ýø¤ multipop ø pop
µª¢Â µÈ ¥ ¤±Øþ À÷ üõ ÍÖê µÈ ¢ø¤ø ¤ Âû ý¥ ÂÊä Âû ö×þ ýø¤ , (multipop ßµêÂð ÂÑ÷ ¤¢ ) pop â ü÷¡Âê ¢Àã , ßþ . ¢ª . ´¨ n    ·îÀ î ´¨ push â ü÷¡Âê ¢Àã üú Âè µÈ
stack 1
www.Bshams.ir
www.Bshams.ir
175 (AMORTIZED ANALYSIS) üîúµ¨ Ãó÷ .2.6
. ¢Âð üõ ¤ O(n) Ûî öõ¥ multipop ø pop , push n ¥ äÞ¹õ Âû , n Âû ý¥þÃû , üãÞ¹ Ãó÷ ¤¢ . ´¨ O(n)
n = O(1) ÛÞä Âû ßت¨ þ ßÚ÷õ þÃûßþ ¤¢ ßþ . ´¨ ÛÞä ö ͨµõ þÃû öÞû âìø ¤¢ ÛÞä Âû ý üîúµ¨
. ´¨ O(1) µÈ ÛÞä 3 Âû üîúµ¨ þÃû ñ·õýû ©ø¤ ¥ õ Ýþ ù¢Âî ±¨½õ ¤ ͨµõ þÃû õ Âð î ¢ª üõ Àîb ù¤ø¢
. Ýþ ù¢ÂØ÷ ù¢Ôµ¨ ý¤õ. ´¨ 2üÈþÃê k-bit üþø¢ø¢ ùÀ÷¤Þª óbÆõ ©ø¤ ßþ ¥ ÂÚþ¢ ñ·õ : 2 ñ·õüþø¢ø¢ ¢Àä . ´¨ ùÀ÷¤Þª öä length[A]=k ñÏ A[0..k − 1] þ¤ ×þ¤¢ ©¥¤ ßþÂµÈ ø A[0] ¤¢ ©¥¤ ßþµÞî ý¤¢ ¢ª üõ ù¡£ ùÀ÷¤Þª ¤¢ î x
: ¢Âð üõ ¤¬ Âþ¥ â ͨ ÇþÃê ÛÞä .´¨ A[k − 1]
INCREMENT(A)
1: i← 0
2: while i < length[A] and A[i] = 1
3: do A[i]← 0
4: i← i + 1
5: if i < length[A]
6: then A[i]← 1
1 û ´ Þû î ü÷õ¥ ) ´ó ßþÂÀ ¤¢ üþú INCREMENT ýÂßþÂÀ ¤¢ INCREMENT ÛÞä n ¥ µª¤ ×þ ßþ ¢Âð üõ ¤ Θ(k) öõ¥(Àª
. ¢Âð üõ ¤ O(nk) öõ¥ , ´¨ ÂÔ¬ Àµ ¤¢ î ùÀ÷¤Þª ×þ ýø¤ ´óöÂî Ý ÷ üõ Àî üÞ÷  ç û ´ Þû ü÷¡Âê Âû ¤¢ î ßþ ÜÞä n ¥ µª¤ ×þ ý ´ó ßþÂÀ ¤¢ î ý¤Ï Ýû¢ ¤ ýµÖì¢A[1] , Àî üõ Âç â ü÷¡Âê ¤ Âû ¤¢ A[0] . ¢ª O(n) ¥ INCREMENT
. Àî üõ Âç ¤ bn4c Âû A[2] ø Àî üõ Âç ¤ bn
2c Âû â ý ¤ n ¤¢
. Àî üõ Âç ¤ b n2i c Âû , A[i] ´ , i = 0,1,2, · · · , blogn
2c ý , üÜî ¤Ï . Àî üÞ÷ Âç ÃðÂû A[i] ´ , i > blogn
2c ýÂ
Incrementing a Binary Counter 2
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 176
: ´¨  äÞ¹õ ¤¢ û Âç Ûî ¢Àãblg nc∑
i=0
b n
2ic < n
∞∑
i=0
1
2i= 2n
. ¢ª üõ O(2n)n = O(1) ÜÞä Âû ͨµõ þÃû ßþÂ
(Accounting Method) üÆ ©ø¤ 2.2.6
üøÔµõ ýû þÃû Óܵ¿õ ýû ÜÞä , üîúµ¨ Ãó÷ ¥ üÆ ©ø¤ ¤¢þ µÞî ÛÞä üãìø þÃû ¥ ´¨ ßØÞõ üû𠦤ª ßþ î ¢ª üõ ù¢¢ «Êµ¡þÃû ¤ ¢ª üõ ù¡£ ÛÞä ×þ ýø¤ ¦¤ª öä î ý þÃû .Àª µÈ, Àª ÛÞä üãìø þÃû ¥ ÂµÈ üîúµ¨ þÃû î üõÚû . Ýþð íúµ¨üõ µêÂð ÂÑ÷ ¤¢ ù¢¢ öÞµ¡¨ ¤¢ «Ê¡ ÛÞä ö ¤±µä öä 鵡þÃû î üþû ÜÞä ý ýÀã ýû ´¡¢Â ¤¢ fÀã À÷ üõ ¤±µä . ¢ª¤Æ üãÞ¹ ©ø¤ ©ø¤ ßþ . ¢ª ù¢Ôµ¨ ´¨ üãìø þÃû ¥ µÞî öÈîúµ¨
. ´¨ øÔµõ¥ Ýû¡ üõ õ Âð . ¢ª É¿Èõ ´ìÀ ÜÞä Âû üîúµ¨ þÃû Àþ Àµ×î ÜÞä Âû ´ó ßþÂÀ ¤¢ ͨµõ þÃû Øþ ± ý üîúµ¨ ©ø¤Ûî üãìø þÃû ý üþ öÂî ×þ üÜî üîúµ¨ þÃû Àþ Ýî ù¢Ôµ¨ , ´¨
. ÀªÉ¿Èõ Ci ¤ ô i ÛÞä üîúµ¨ þÃû ø Ci ¤ ô i ÛÞä üãìø þÃû Âð
: Ýþ¤¢ , Ýîn∑
i=1
Ci ≥n∑
i=1
Ci
üîúµ¨ ø üãìø þÃû ß éµ¡ ù¢¢ öÞµ¡¨ ¤¢ ùÀª ù¡£ üþú÷ ¤±µä. ´¨
n∑
i=1
Ci −n∑
i=1
Ci
þÃû ùÚ÷ Àª üÔõ üþú÷ ¤±µä Âð . Àª üÔõ Âè ÈÞû Àþ ¤ÀÖõ ßþÛî üîúµ¨ þÃû ¹µ÷ ¤¢ ø ¢Âð üõ ¤Âì Ûî üãìø þÃû Âþ¥ üþú÷ üîúµ¨üþú÷ ¤±µä ݪ °ìÂõ Àþ ßþ . ¢ Àû¿÷ üãìø þÃû ý öÂî ×þ
www.Bshams.ir
www.Bshams.ir
177 (AMORTIZED ANALYSIS) üîúµ¨ Ãó÷ .2.6
. ¢È÷ üÔõ ù¢¢ öÞµ¡¨ ¤¢ÜÞä üãìø þÃû î Ýî üõ ý¤ø¢¢þ ÀþÂÚ ÂÑ÷ ¤¢ ¤ µÈ ñ·õ :1 ñ·õ
: ´¨ Âþ¥ ¤¬
Push : 1
Pop : 2
Multipop : 3
. Àª Âþ¥ ¤Ê ÛÞä Âû ý üîúµ¨ Âþ¢Öõ Àî Âê
Push : 2
Pop : 0
Multipop : 0
â üîúµ¨ þÃû õ ´¨ Âçµõ multipop üãìø þÃû Âð Àî ¥ ( üãìø þÃû ù¥À÷ ) Àø 1 Ýî üõ µÈ ¢¤ø ¤ ÂÊä ×þ üµìø ´¨ ÂÔ¬ù¡£ üb ª ¤¢ ùÀ÷õ üì Àø ×þ ø Ýþ¥¢Â üõ ¤î ßþ ô¹÷ ý üîúµ¨ þÃû
. ¢ª üõâ üµìø . ´¨ µÈ ¥ üb ª ßµª¢Â þÃû âìø ¤¢ üb ª ýø¤ ùÀª ù¡£ ¤±µä ßþ¢ª üõ ßõ ùÀª ù¡£ ¤±µä ßþ ¥ ÂÊä ßµª¢Â þÃû ¢ª üõ ü÷¡Âê pop
¤ üb ª ýø¤ multipop þ pop ÛÞä ô¹÷ ý üêî ¤±µä ÈÞû õ ßþ  .. ¢ª üÞ÷ üÔõ ùð ºû ¤±µä ´¨ µÈ ¤¢ ýÂÊä î ü÷õ¥ . Ýþ¤¢
î ´¨ O(n) íúµ¨ þÃû multipop ø pop ø push ÛÞä n ¥ äÞ¹õ Âû ýÂ. ´Æû Ã÷ üãìø þÃû ý öÂî
öõ¥ î ÝþÀþ¢ f ±ì . Ýî üõ ü¨¤Â ¤ üÈþÃê üþø¢ø¢ ùÀ÷¤Þª ñ·õ :2 ñ·õüîúµ¨ þÃû . Àî üõ Âç î ´¨ üþû ´ ¢Àã °¨µõ â ßþ ý¢ª üõ 1 ´ ×þ î üõÚû . ÝþÂð üõ ÂÑ÷ ¤¢ 2 ¤ ×þ ÂÔ¬ ¥ ×þ ÂçÂç ÂÔ¬ ¤ ´ î ü÷õ¥ ý ¤±µä ÂÚþ¢ Àø ø ¢ª üõ ´¡¢Â Àø ×þù¡£ ¤±µä Àø ×þ ùÀ÷¤Þª ¤¢ 1 Âû ,  ¥ ü÷õ¥ Âû ¤¢ . ¢ª üõ ù¡£ Ýû¢ÀþÀ ¤±µä ý¥÷ ø ´¨ ¢õ ô¥ ¤±µä , ö ö¢Âî ÂÔ¬ ý ßþ ¢¤¢Ã÷ üþú÷ ¤±µä Å ´Æ÷ üÔõ ùð ºû ùÀ÷¤Þª ¤¢ û ×þ ¢Àã ö ø ´Æ÷þÃû ý öÂî î ´¨ O(n) ßت¨ þÃû ßþ . ¢ª üÞ÷ üÔõ ùð ºû
. ´¨ üãìø
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 178
(Potential Method) ÛÆ÷µ ©ø¤ 3.2.6
î ÂÚþ¢ ýû ©ø¤ é¡ Â î ´¨ ÛÆ÷µ ©ø¤ , üت¨ Ãó÷ ©ø¤ ßõ¨ýø¤ ÛÆ÷µ ©ø¤ , À÷¢Âî üõ ¤î ù¢¢ öÞµ¡¨×þ ¤¢ É¿Èõ üb ª ×þ ýø¤üê® ¤ÀÖõ î ´Æþ üÆ ©ø¤ ö ëÂê . Àî üõ ¤î Ûõî û ù¢¢ öÞµ¡¨
. ¢ª üõ ÓþÂã ÛÆ÷µ ý¦Â÷ öä ¹þ ¤¢ ¢¨ öÞû þ ùÀª ù¡£ý Àª óø ù¢¢ öÞµ¡¨ D0 ø Àª n 1 ¥ ù¢¢ öÞµ¡¨ ýû ¢Àã Âð
: Ýî üõ ÓþÂã i = 1,2, · · · , n ÂûCi =ô iÜÞä ô¹÷ üãìø öõ¥Di = ô i ÜÞä ô¹÷ ¥ Àã ù¢¢ öÞµ¡¨Φ =(Potential Function)¢Â üõ üÖÖ ¢Àä ¤ Di ù¢¢ öÞµ¡¨ Âû î ÛÆ÷µ âΦ : Di → RealNumber
C ′i = Ci + Φ(Di)−Φ(Di−1) ô i ÜÂõ ¤¢ üت¨ þÃû
:ÜÞä n ý Ûî üîúµ¨ þÃû
n∑i=1
Ci =n∑
i=1
[Ci + Φ(Di)−Φ(Di−1)] =n∑
i=1
Ci +n∑
i=1
Φ(Di)−Φ(Di−1)
=n∑
i=1
Ci + Φ(Dn)−Φ(D0)
ý üþ öÂî Ûî üîúµ¨ þÃû ßþ Φ(Dn) > Φ(D0) Ýî ÂêÂð. ¢ª ô¹÷ ´¨ ßØÞõ ÜÞä À Ý÷¢ üÞ÷ õ ö . ´¨ Ûî üãìø þÃû
: i Âû ýÂ Ýî Âê Âð ßþÂΦ(Di) ≥ Φ(D0)Φ(D0) = 0
⇒ Φ(Di) ≥ 0
´¨  ÛÆ÷µ Âç ßþ . ´¨ üÔõ Âè â ×þ ÛÆ÷µ â üãþ:
Φ(Di)−Φ(0) > 0 for all i
. ´¨ µÆø ÛÆ÷µ â ¿µ÷ ¹þ ¤¢ ùÀõ ´¨À üîúµ¨ þÃûßþ . ´ª¢ Ýû¡ Óܵ¿õ üîúµ¨ ýû þÃû Óܵ¿õ ýûÛÆ÷µ â ý¥
. ´¨ ÛÆ÷µ â ßþµú ¿µ÷ ÛÆ÷µ ©ø¤ ¤¢ õ ¤î ßþµÞúõ
www.Bshams.ir
www.Bshams.ir
179 (AMORTIZED ANALYSIS) üîúµ¨ Ãó÷ .2.6
: Ýî üõ ÓþÂã . Ýî üõ ü¨¤Â ¤ µÈ ñ·õ : 1 ñ·õΦ(Di) = µÈ Û¡¢ Â¬ä ¢ÀãD0 = üó¡ µÈΦ(D0) = 0
Å ¢ ª ü Þ ÷ ü Ô õ ù ð º û þ¤ × þ Û ¡¢ Â ¬ ä ö Φ(Di) ≥ 0 = Φ(D0)
Àª µª¢ ÂÊä s µÈ , i− 1 ÜÂõ ¤¢ Ýî üõ ÂêΦ(Di−1) = s
:¢ª  ô i ÜÂõ¤¢ push ÂðΦ(Di)−Φ(Di−1) = (s + 1)− s = 1
Ci = Ci + Φ(Di)− φ(Di−1) = 1+ 1 = 2→ O(1)
:¢ª ô¹÷ ô i ÜÂõ ¤¢ pop â ÂðΦ(Di)−Φ(Di−1) = (s− 1)− s = −1Ci = Ci + Φ(Di)− φ(Di−1) = 1− 1 = 0→ O(1)
:¢ª  multipop â Âðk′ = min(s, k) Φ(Di)−Φ(Di−1) = (s− k′)− s = −k′
Ci = Ci + Φ(Di)− φ(Di−1) = k′ − k′ = 0→ O(1)
. ´¨ O(n) ¥ Ûî üîúµ¨ þÃû ßþÂ
: Ýþ¤¢ üþø¢ø¢ ùÀ÷¤Þª ¤¢ :2 ñ·õΦ(Di) = bi ô i ÜÂõ ¤¢ û ×þ ¢Àã
î ´¨ ¼®øΦ(Di) ≥ 0ti = ô i ÜÂõ ¤¢ À÷ª üõ ÛþÀ± ÂÔ¬ î üþû ×þ ¢Àã
Ci = ti + 1
www.Bshams.ir
www.Bshams.ir
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ .6 ÛÊê 180
if bi = 0⇒ bi−1 = k = ti
if bi > 0⇒ bi = bi−1 − ti + 1
⇒ bi ≤ bi−1 − ti + 1
Φ(Di)−Φ(Di−1) ≤ bi−1 − ti + 1− bi−1 = −ti + 1
C ′i = Ci + Φ(Di)−Φ(Di−1) ≤ ti + 1− ti + 1 = 2⇒ C ′
i ≤ 2
n∑i=1
C ′i ≤ 2n→ O(n)
www.Bshams.ir
www.Bshams.ir