í¤ ùÚÈ÷¢ ü¨Àúõ ø üê ùÀØÈ÷¢
öä
ݵþ¤Úó üÂÏ §¤¢ ùøà Þû¤ ¢µ¨
ý¢ Àa¨ ÀÞ Àa¨ Âµî¢ 1384 ùõ ¤£
ÝÂó ßÞÂó Üaó ÝÆ a a
°óÎõ ´¨Âúê õÀÖõ ü±÷¹õ ýû¢Þ÷ üêÂãõ 1 ÛÊê 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ü±÷¹õ ýû¢Þ÷ .1 1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . big-O ¢Þ÷ 1.1
2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . big
−Ω
¢Þ÷ 2.1
2
.......................................................... θ
¢Þ÷ 3.1
3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . small − o¢Þ÷
3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . small − ω
4.1
¢Þ÷ 5.1
3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ý Âð ÝÞþ Ãîõ Ìì 6.1 5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ìì À ± 7.1 üµÈð¥ ýû ݵþ ¤Úó 2 ÛÊê
9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . üµÈð¥
9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . üµÈð¥
ýû ݵþ ¤ Úóø ¢ãõ .2 ¢ãõ 1.2
10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û Èþ ¤ ¢¤ õ ¤¢ ¶½ 1.1.2 14
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . üµÈð¥
26
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Master Theorem) ü¨¨ Ìì 3.2
ýû ݵþ ¤ Úó 2.2
35 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û ݵþ ¤ Úó Ãó÷ 4.2 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ý¥¨ °Âõ ýû ݵþ ¤ Úó 5.2 37
. . . . . . . . . . . . . . . . . Selection Sort
37 . . . . . . . . . . . . . . . . . . . . . . Bubble
ü¿µ÷ ý¥¨ °Âõ ݵþ ¤ Úó 1.5.2
Sort ü± ý¥¨
°Âõ ݵþ ¤ Úó 2.5.2
38
. . . . . . . . . . . . . . . . . . . Insertion Sort ü¤¢
39
. . . . . . . . . . . . . . . . . . . . Pigeon hole Sort
41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Binary 42 . . . . . . . . . . . . .Binary
ý¥¨ °Âõ ݵþ ¤ Úó 3.5.2
ý ±î ÷ ý¥¨ °Âõ 4.5.2
Searchüþø¢ø¢
Insertion Sort ü¤¢
ý¹µÆ 5.5.2
üþø¢ø¢ ý¥¨ °Âõ 6.5.2
43 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Shell
Sort ݵþ ¤ Úó
7.5.2
45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bucket
Sort1
ݵþ ¤ Úó 8.5.2
45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bucket
Sort2
ݵþ ¤ Úó 9.5.2
46
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bin Sort
47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Counting 47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sort
ݵþ ¤ Úó 10.5.2 ݵþ ¤ Úó 11.5.2
Radix sort ݵþ ¤ Úó
48
. . . . . . . . . . . . . . . . . . üµÈð¥
50
. . . . . . . . . . . . . . . . . . . . . . . . . Catalan Number
¢ãõ ( ö¢Âî Û) ö¢Âî
Trace
12.5.2 ÛÞä 6.2
öî ¢Àä  ý ¤Áð 7.2
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý¤ø¢þ 3 ÛÊê 55 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û ù¢¢ öÞµ¡¨ ¥ ü¡Â .3 56
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Sparse array)§¤³¨ þ¤ 1.3
57 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . üþø¢ø¢ ´¡¤¢ 2.3 59
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . max heap ´¡¤¢
62 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ( ýÜÞø¢ ²û)
Binomial Heap 4.3
63 . . . . . . . . . . . . . . . . . . . . . . . . . ( ý ÜÞø¢ ´¡¤¢ )Binomial 63 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.3
Tree 1.4.3
Max Binomial Tree 2.4.3
. . . . . . . . . . . . . . . . . . . . . . . The Merge Of Max Binomial Trees 3.4.3
64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 . . . . . . . . . . . . . . . . . . . . . . . . .Min
Binomial Heap
Binomial Heap
66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.3
ýø ¤ Â ÜÞä 5.4.3
Max Binomial Heap
67 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FIBONACCI 67 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fibonacci
6.4.3
HEAP 5.3
Tree 1.5.3
68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Max Fibonacci Tree 2.5.3
68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fibonacci 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Max
Heap
3.5.3
Fibonacci Heap
4.5.3
69 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 öµ¡¤¢ 6.3 72 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 ´¡¤¢ ×þ ý¹µÆ 1.6.3 73 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 ´¡¤¢ ×þ Û¡¢ ¤¢ 2.6.3 77
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3
83
. . . . . . . . . . . . . . 2-3
84
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Red-Black ù¨ -
´¡¤¢ ×þ ¥ éÁ 3.6.3
´¡¤¢ ×þ ¥ éÁ ¢ÂØÜÞä Ûܽ ø þ ù 4.6.3 ÃõÂì ´¡¤¢ 7.3
84 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ù¨ - ÃõÂì ´¡¤¢ «¡ 1.7.3 85
...................................
üþÀµ ýþÌì ø Óþ ¤ã 2.7.3
86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ö¤ ø¢ 3.7.3 87 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¤¢ 4.7.3 89 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . éÁ 5.7.3 94 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Disjoin
sets)ùõ ýû äÞ¹õ 8.3
üÆþ÷ ݵþ ¤Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ 4 ÛÊê 97 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . üÆþ÷ õ÷ ýû ©ø ¤ á÷ .4 98
. . . . . . . . . . . . . . . . . . . . (Greedy Algorithms) ÷Êþ Â
ýû ݵþ ¤ Úó 1.4
98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ßÞêû ý¥¨ ù¢ÂÈê ݵþ ¤ Úó 1.1.4 101
. . . . . . . . . . . . . . . . . . . MST
ñÞõ ýª ´¡¤¢ ýû ݵþ ¤ Úó 2.1.4
109 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Knapsack
110 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 . . . . . . . . . .(timetable
or scheduling)
üµÈ óî ݵþ ¤ Úó 3.1.4
DIJKSTRA
ݵþ ¤ Úó 4.1.4
ýÀ öõ¥ ýû ݵþ ¤ Úó 5.1.4
117 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (devide
and conquer) Ûø
ÝÆÖ 2.4
117
........................................
119
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . merge sort ݵþ ¤ Úó
ï¤ Ã ¢Àä ® 1.2.4 2.2.4
121
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quick Sort ݵþ ¤ Úó
126
. . . . . . . . . . . . . . . . (û Åþ Âõ
® ݵþ ¤ Úó) ߨµ¨ ݵþ ¤ Úó 4.2.4
128 . . . . . . . . . . . . . . . . . . . . . . Dynamic
Programming þ
128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
3.2.4
....................................
131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
üÆþ÷ õ÷ 3.4
n k
±¨½õ 1.3.4
û ñ ö¢Âî ¢Â¡ óbÆõ 2.3.4
{0, 1}
üµÈ óî óbÆõ 3.3.4
131
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Floyd ݵþ ¤ Úó
133
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û Åþ Âõ
4.3.4
ýù¹÷¥ ® 5.3.4
135 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ú üþø¢ø¢ ý¹µÆ ´¡¤¢ 6.3.4 138
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . íµÈõ µª¤ Âþ ¥
ßþ µð¤ à 7.3.4
140 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ü÷ú ÖÆõ ý óbÆõ 8.3.4 142 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¢Âð ù¤ ø¢ ùÀªø Âê óbÆõ 9.3.4 143
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . û ý¥
144 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B
´Þ÷¤ 4.4
&T ( Back Tracking )
5.4
144
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Âþ ¥ ø nóbÆõ 1.5.4
146
..................................
ü÷µÜÞû ¤ ø¢ ßµêþ óbÆõ 2.5.4
147 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m-coloring óbÆõ 3.5.4 148 . . . . . . . . . . . . . . . . . . . . . . . . . . .
Branch and Bound (B&B) ×Ø 6.4 û éÂð Çþ 5 ÛÊê
149 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Exploring 149 . . . . . . . . . . . . . . . . . . . . . . . . . . . (Depth
graphs û éÂð
First Search) DFS
Çþ .5
ݵþ ¤ Úó 1.5
152 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . µÈ ý¥¨ ù¢ 1.1.5 152
. . . . . . . . . . . . . . . . . . . . . . . . . . (Breath First Search) BFS ݵþ ¤ Úó
153
. . . . . . . . . . . . . . . . . . . . . . . . Topological Sort ý¦ ó
154
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bellman Ford ݵþ ¤ Úó
4.5
155
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DAG ݵþ ¤ Úó
5.5
2.5
ý¥¨ °Âõ 3.5
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷ 6 ÛÊê 157 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LOOP
INVARIANT1.6
173 . . . . . . . . . . . . . . . . . . . . . . . . . (Amortized
Analysis) üî
úµ¨ Ãó÷ 2.6
173 . . . . . . . . . . . . . . . . . . . . . . . . . (Aggregate
Analysis) üãÞ¹
176
. . . . . . . . . . . . . . . . . . . . . . . . (Accounting Method)
178 . . . . . . . . . . . . . . . . . . . . . . . . . . (Potential
Method)
Ãó÷ 1.2.6
üÆ ©ø ¤ 2.2.6 ÛÆ÷µ ©ø ¤ 3.2.6
õÀÖõ
ü Â Ï §¤¢ ýùø à , ´ ¨ µ ê ð ¤Â ì Þ ª ¤ µ ¡ ¤¢ ö î Ý û î ýùø à ùÀØÈ÷¢ ³õî ü¨Àúõ µª¤ öþ¹È÷¢ ¥ üãÞ Í¨ î Àª üõ ݵþ ¤ Úó ú × ü ¨¤ ê ¤Ã ê ô ÷ Í ¨ 1384 ñ ¨ ù õ ¤£ ¤¢ í¤ ù Ú È ÷¢ ü ¨À ú õ ø ü ê . ´¨ ùÀª µªÁð öÀõ ì
ä ¤µ¡ ¤¢ ø ´¨ ùÀþ¢Âð ßþøÀø ý ¤ Ø Þ û ùø Ã ß þ ý ú ¤¢ î ü ÷à þ à ä ü õ Þ ¥ ¢¤¢ ´ Þ Æ ì ß þ¤¢ ø ü ê ùÀ Ø È ÷¢ 1382 ñ ¨ ý¢ø ¤ ø  ³ õ î ü ¨À ú õ µ ª¤ ö þ ¹ È ÷¢ , À ÷ù¢ Þ ÷ ø ü÷Ìõ¤ ÞÏê û Ý÷¡ æþ ¤¢ ü Þ¥ ¥ «Ê¡ , í¤ ùÚÈ÷¢ ü¨Àúõ . ݪ µª¢ ¤ ÂØÈ ñÞî ö ÇþÂþø ÂÏ¡ ýÀÞ Âû¥
ý¢ À¨ ÀÞ a ü¨Àúõ ø üê ùÀØÈ÷¢ í¤ ùÚÈ÷¢ 1384 ùõ ¤£
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) =
3 n
n<1000
2n 2
n≥100
O(n2 ) = {n2 , n lg n, f (n), ....} 6
f1 f2 ∈ O(f1 ) ... ... ... ... . M
. ´¨
O(f1 )
f2 -
¥ Ýû ¥ ¢ª  À¬
f2
Âð üµ Û±ì Ûت ¤¢
.1 ÛÊê
ü±÷¹õ ýû¢Þ÷ üêÂãõ
2
6 f2
f1 ∈ O(f2 )
f1
f2 ∈ O(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) < d0 g(n) : Ýþ ¤¢ ß»Þû
f2 (n) ∈ Ω(f1 (n)) ⇐⇒ f1 (n) ∈ O(f2 (n))
θ ¢Þ÷ : Ýþ ¤¢ùÚ÷
θ(f (n)) = O(f (n)) ∩ Ω(f (n))
3.1
f : N −→ R+ Âð : ñ·õ
O(n2 ) = {n2 , n2 + 4, nlogn, ...} Ω(n2 ) = {2n2 , 2n2 +
√
n, n3 + n2 , n4 , n2 logn, ...}
θ(n2 ) = {n2 , n2 + n, 2n2 , ...} : µØ÷ üþ ßþ öÂî Àþ âìø ¤¢,¢Þ÷ ù¢Ôµ¨
Ω
¥ Àþ ݵþ ¤ Úó ýÀ É¿È ý . Ýþ ¤ ø ´¨¢ ö ýÂ
SM ALL − O¢Þ÷ .4.1
3
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 ≤ cn
c=1 ⇐⇒
F =⇒ 2n ∈ / o(n)
n ∈ o(2n) ⇐⇒ ∀c > 0 ∀ n ∈ N n ≤ c2n
c= 13 ⇐⇒
F =⇒ n ∈ / o(2n)
2n ∈ o(n) ⇐⇒ ∀c > 0
∞
∀n∈N ∞
small − ω ¢Þ÷ :ùÚ÷
5.1
f : N −→ R+ Âð
ω(f (n)) = {g : N → R+ |∀ c > 0 ∀ n ∈ N g(n) ≥ cf (n)} ∞
ω(f (n))
T
: Àû¢ öÈ÷ :ñ·õ
o(f (n)) = ∅
´¨ ¢õ öM1 ×þ
d0 > 0 ýÂ ùÚ÷ g(n) ∈ ω(f (n))
T
o(f (n))
Âð :Û : î
∀n ≥ M1 g(n) ≥ d0 f (n) (g(n) ∈ ω(f (n))) c0 = d20 ýÂ ∀n ≥ M2 g(n) ≤ c0 f (n) (g(n) ∈ o(f (n))) =⇒ g(n) ≤ d20 f (n) =⇒ :î ´¨ ¢õ ö
M2
×þ
ñ
2 f (n) ≥ d0 f (n) =⇒ d0 ≥ 2d0 =⇒ d0 ≤ 0
d0
∀n ≥ M ax{M1 , M2 }
.¢ª üõ ´ ÝØ ßþ Â, ÝþÀ¨¤ Ëì Å
ýÂð ÝÞþÃîõ Ìì
6.1
1)f (n) + g(n) ∈ O(M AX{f (n), g(n)}) 2)f (n) + g(n) ∈ Θ(M AX{f (n), g(n)}) : 1 ±
f (n) ≤ M AX{f (n), g(n)}
,
g(n) ≤ M AX{f (n), g(n)} =⇒
f (n)+g(n) ≤ 2M AX{f (n), g(n)} =⇒ f (n)+g(n) ∈ O(M AX{f (n), g(n)})
ü±÷¹õ ýû¢Þ÷ üêÂãõ
.1 ÛÊê
4
: 2 ±
M AX{f (n), g(n)} ≤ f (n) + g(n) =⇒ f (n) + g(n) ∈ Ω(M AX{f (n), g(n)}) f (n) + g(n) ∈ O(M AX{f (n), g(n)}), f (n) + g(n) ∈ Ω(M AX{f (n), g(n)}) =⇒ f (n) + g(n) ∈ Θ(M AX{f (n), g(n)}) :ßþ ÂÞ .
log n! ∈ θ(n log n)Àû¢ öÈ÷ :Û : ñø ù¤
√
2πn) Ùóµ¨ ñõÂê ¥ ù¢Ôµ¨ ± √ n! = ( ne )n 2πn =⇒ log n! = log( ne )n + log 2πn √ =⇒ log n! = n log ne + log 2πn √ =⇒ log n! = n log n − log en + log 2πn √ (n!
=
√
( ne )n
=⇒ log n! = n log n + log e2nπn
=⇒ log n! ∈ Θ(n log n)
: ôø¢ ù¤ .log
n!∈ Ω(n log n)
ø
log n! ∈ O(nlog n)
ÝþÞ÷ ± Àþ ¹þ ¤¢
logn! = logn + log(n − 1) + . . . + log 1 ≤ logn + logn + . . . + logn ≤ nlogn {z } | n
=⇒ logn! ∈ O(nlogn) log n! = log n + log(n − 1) + . . . + log 1 ≥ n2 log n2 =⇒ log n! ≥ n2 log n − n2 log 2 ≥ 14 n log n =⇒ logn! ∈ Ω(nlogn) =⇒ log n! ∈ Θ(n log n) : ô¨ ù¤ : ÀþõÂê ´ì¢ Âþ ¥ ýøÆ
(n!)2 = (1 × 2 × . . . × (n − 1)n)2 ⇒
n Q (n!)2 = (1 × 2 × . . . × (n − 1)n)(n(n − 1) × . . . × 1) = x(n − x + 1) x=1 2 y = −x + (n + 1)x (n+1)2 1 =⇒ y x = n+ max = 2 x = 1 ⇒ y = n, x = n ⇒4 y = n =⇒ y min = n
Ìì À ± .7.1
5
n Y
n ≤ (n!)2 ≤
x=1
n Y (n + 1)2 x=1
nlogn ≤ 2logn! ≤ 2nlog
=⇒ nn ≤ (n!)2 ≤ (
4
n+1
2
≤ 2nlogn =⇒
n
2
n + 1 2n ) =⇒
2
logn ≤ logn! ≤ nlogn
=⇒ log n! ∈ θ(n log n)
Ìì À ± : Ýþ ¤¢
o(f (n))
7.1
: Ìì ýÂ
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) ∈ O(f (n))
Å
g(n) ∈ Ω(f (n))
g(n) ≤ 5f (n)
Ø þ Â ê ,
d0 ≤ 0Ýþ ¤¢
M1 d0
g(n) ∈ / Ω(f (n))
5 î Ý î ü õ Â ê
n ≥ M1 , M1
× þ ýÂ ¤ ¬
Ý û¢ ü õ ö È ÷ ñ
d = d0 × þ ý ù Ú ÷ Å g(n) ∈ o(f (n)) ü ê Ï
× þÝ þ ¤¢
c = 2 ý n ≥ M AX{M1 , M2 } Âû ý Šg(n) ≤ d20 f (n)Ýþ ¤¢
î ¢¤¢ ¢ ø ö
Ëì î
Ý þ ¤¢
c=
g(n) ∈ / Ω(f (n))
 û ý î
M2
Ý þ Þ ÷ ü õ Â ê
Ýû¢ üõ öÈ÷ Àµ.
ö ù Ú ÷ ´ ¨
d0 f (n) ≤ g(n), n ≥ M1
n ≥ M2
g(n) ∈ o(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))
.¢ª ÛþÀ± ýøÆ À÷ üÞ÷ üÜî ´ó ¤¢ ë ê Ìì Àû¢ öÈ÷ : ñ·õ :Û µª¢ ¤ Âþ ¥ â Àî Âê, Ýû¢ üõ öÈ÷ ¤ á®õ ßþ ËÖ÷ ñ·õ ¥ ù¢Ôµ¨ : ݪ
.1 ÛÊê
ü±÷¹õ ýû¢Þ÷ üêÂãõ
12 g(n)= n
¢Âê ýû ø ¥ ýû
6
n n : Ýþ ¤¢
M = 12 , n ≥ 13 ⇒ g(n) ≤ n =⇒ g(n) ∈ O(n) : Ýþ ¤¢ Å , Àª
g(n) ∈ Ω(n) ⇔ ∃c >
0
g(n) ∈ Ω(n)
∞
∀ n g(n) ≥ cn ⇔ ∃c >
(ÀµÆ÷ ¤¢ öÂî ¥ ¢Âê ¢Àä)
0
Ýî üõ Âê ñ
∞
g(n) c
∀n
≥n⇔F
=⇒ g(n) 6∈ Ω(n)
Àª ¤Âì Τ ßþ Àî Âê, ÷ þ ´¨ ¤ÂìÂ
g(n) ∈ o(n)
Τ ݱ ñ : Ýþ ¤¢ Å
g(n) ∈ o(n) ⇐⇒ ∀c > 0
∞
∀ n
g(n) ≤ cn, c = 12 =⇒ g(n) ≤ n2 ⇐⇒ 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) ≤ c1 f (n): Ýþ ¤¢ n ≥ M1 Âû ø
M2 >
Âû ø
M1 > 0
×þ ø
c1 ≥ 0
×þ ýÂ
0 × þ ø c2 ≥ 0 × þ ý f (n) ∈ O(h(n)) ý ° Â ß Þ û ø f (n) ≤ c2 h(n): : Ýþ ¤¢
g(n) ≤ c1 f (n)
À î Â ê
f (n) ≤ c2 h(n)
n≥M
Âû ø
Ýþ ¤¢
n ≥ M2
M = M AX{M1 , M2 } ýÂ
ñ
=⇒ g(n) ≤ c1 f (n) ≤ c1 c2 h(n) =⇒ g(n) ≤ ch(n)
=⇒ g(n) ∈ O(h(n)) .À÷ª üõ ± °Â ßÞû Ã÷
Ω ýÂ
´¬¡ ø¢ ßþ
: ü÷¤Ö ´¬¡ ßµª¢ ôÀä ý ËÖ÷ ñ·õ
Ìì À ± .7.1
7
Àþ ¹µ÷ ¤¢
n2 ∈ O(n)
ÝþÞ÷ üõ Âê ,
n2 ∈ / O(n)î
:Ýþ ¤¢
üó ¤¢
n ≥ M1 , M1
n ∈ O(n2 )
×þ ø
c > 0 ×þ
n2 ≤ cn ⇒ n ≤ c ⇒ (.À÷¤À÷Âî ¥ üã±Ï ¢Àä) . ´¨ ý¥ ¤ Ýû Τ ×þ
f
â ôÞ äÞ¹õ ýø ¤
θÀû¢ öÈ÷
: ßþ ÂÞ : Û
: Ýþ ¤¢
f (n) ∈ O(f (n))
O, Ω
ü¨Øã÷ ´¬¡ ßµª¢ ÂÏ¡
, 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)) .Àª üõÃ÷ ü÷¤Ö ´¬¡ ý¤¢
: Ýþ ¤¢
f (n) ∈ θ(g(n))
O, Ω
θ
Àû¢ üõ öÈ÷ î
ýÀã ´¬¡ ßµª¢ ÂÏ¡ ß»Þû
, 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=
(n) limn→∞ fg(n) ,
f, g : N −→ R
+ : ÀþÞ÷ ±
.f (n) .g(n) .g(n)
∈ o(g(n))
∈ o(f (n))
∈ θ(f (n))
ùÚ÷
ùÚ÷
ùÚ÷
L = 0 »÷ (1
L = ∞ »÷ (2
0 < L < ∞ »÷ (3 : µØ÷
ü±÷¹õ ýû¢Þ÷ üêÂãõ
.1 ÛÊê
8
¢¤ õ ¤¢ ü óø ´ ¨ ý¥ ¤ Ý û §
î × þ  þ¥ ¢ø ¤ ü õ ¤ Ø ´ ¨¤¢ θ ¢¤ õ ¤¢ ýø Æ ¢ Þ ÷ .Àª üÞ÷ ´¨¤¢ O, o, Ω, ω : ñ·õ :Àî ¢¤ þ ø ± ¤ Âþ ¥ ýûä¢
• f (n) ∈ O(g(n)) =⇒ 2f (n) ∈ O(2g(n) ) ÝþÞ÷ üõ ¢¤ ¤ ä¢ ßþ ËÖ÷ ñ·õ : Û
n log2 n logn2 ∈ O(logn! ∈ O(2log2 ) =⇒ nn ∈ O(n!) 2 ) =⇒ 2 n
n!
:ÂÚþ¢ ËÖ÷ ñ·õ þ ø ´¨ Ëì î
2 log n 2
2 logn2 ∈ O(logn2 ) =⇒ 2
∈ O(2log2 ) =⇒ n2 ∈ O(n) 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(f 2 (n)) :Û
f (n) = n1 =⇒ f 2 (n) = n12 =⇒ f (n) 6∈ O(f 2 (n))
2 ÛÊê üµÈð¥ ýû ݵþ ¤ Úó
üµÈð¥ ýû ݵþ ¤Úóø ¢ãõ .2 üµÈ𥠢ãõ
1.2
À þ ×þ µÆø ö ÜÞ Âû î ´¨ ýó¢ãõ üµÈð¥ ýó¢ãõ ×þ ¥ ¤ Ñõ ùÀª Óþ Âã Û±ì ¥ óø ¤ÀÖõ À þ ×þ ý ùø
ä ø ´¨ ö Û±ì õ ýÜÞ . ´¨ î Ýþ ¥¢Âüõ üÖÖ °þ® ùÂçµõ ×þ üµÈ𥠢ãõ Û ´ÞÆì ßþ ¤¢ :Àî üõ ëÀ¬ Âþ ¥ üõÞä Ûت ¤¢
a0 tn + a1 tn−1 + · · · + ak tn−k = f (n) ai ∈ R, f : N −→ R≥0 , k ∈ N n
Â ç µ õ × þ Í Ö ê ø ´ ¨ ´
k ,À µ Æ û É ¿ È õ
Û ± ì ¥
t0 , · · · , tk−1
° þÂ ®
. Àþð ´ °þ® üµÈð¥ ó¢ãõ ó¢ãõ .Ýþ ¤¢ Âê Àµ ¤¢ .Ýî üõ ù¢Ôµ¨ Ê¿Èõ ó¢ãõ ¥ Þãõ ¢ãõ ßþ Û ý ó¢ãõ Û ßþ ,f (n)
=
0 üãþ Àª ßÚÞû á÷ ¥ üµÈð¥ ó¢ãõ Ýî üõ :Ýþ ¤¢ ¤ Âþ ¥ ´ °þ® üµÈð¥
a0 tn + a1 tn−1 + · · · + ak tn−k = 0 xi
¤
ti ÜÞ Âû.ÝÆþ÷ üõ
Âþ ¥ ¤ ¬ ¤ Ê¿Èõ ó¢ãõ ó¢ãõ ßþ Û ý :ßþ .Ýî üõ ÛþÀ±
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
10
a0 xn +a1 xn−1 +· · ·+ak xn−k = 0 ⇒ xn−k (a0 xk + a1 xk−1 + · · · + ak ) = 0 | {z } ⇓
(ÂÆÔõ) Ê¿Èõ ó¢ãõ . Ýî üõ É¿Èõ ¤ Ê¿Èõ ýó¢ãõ ýû Èþ ¤ ų¨
û Èþ ¤ ¢¤õ ¤¢ ¶½
¤ ¬ ßþ ¤¢Àª
r1 , . . . , rk
ÃþÞµõ ø¢ ø¢ üÖÖ Èþ ¤
1.1.2
k ý¤¢ ó¢ãõ(1
:´¨ Âþ ¥ ôÂê ó¢ãõ
tn = c1 (r1 )n + c2 (r2 )n + . . . + ck (rk )n Èþ ¤ ñ·õ ý ,Àª ý ¤ÂØ ü¡Â ñ ßä ¤¢ø üÖÖ ýûÈþ ¤ ý¤¢ ó¢ãõ(2 Àìê üóø ´¨
(x − rp )m ¤ µîê ý¤¢ ¤±ä üãþ)
˻
m üþµÆ
: ´¨ Âþ ¥ ôÂê ó¢ãõ ¤ ¬ ßþ ¤¢ (´¨(x
¥ ý ¤ÂØ
− rp )
m+1
rp
¤ µîê
tn = c1 (r1 )n + c2 (r2 )n + . . . + cp0 (rp )n + cp1 n(rp )n + . . . + cpm−1 nm−1 (rp )n + . . . + ct (rt )n ¤ øõ¢ Ìì ¥ù¢Ôµ¨ ,ÀªüÖÖ Âè ø üõûõ ýû Èþ ¤ ý¤¢ ó¢ãõ Âð(3 ö üõ ùÀª µÔð Ê¿Èõ ó¢ãõ üÖÖ ýû Èþ ¤ ¢¤ õ ¤¢ î ö±ª fÖì¢ .¢Âî ±¨½õ ¤
: ñ·õ :Àî Û¤ Âþ ¥ üµÈ𥠢ãõ
g(n) =
n
5g(n − 1) − 6g(n − 2)
n≤1 else : Û
g(n) − 5g(n − 1) + 6g(n − 2) = 0 =⇒ x2 − 5x + 6 = 0
⇒ x1 = 3, x2 = 2 ⇒ g(n) = c1 3n + c2 2n
g(0) = 0, g(1) = 1 ⇒ c1 = 1 , c2 = −1 =⇒ g(n) = 3n − 2n
üµÈ𥠢ãõ .1.2
11
2tn−1 − tn−2 tn = t0 = 1 t1 = 3 : Û
tn − 2tn−1 + tn−2 = 0 =⇒ x2 − 2x + 1 = 0 ⇒ x1 = x2 = 1 t0 = 1
⇒ tn = c1 + c2 n
, t1 = 3 ⇒ c1 = 1, c2 = 2 =⇒ tn = 1 + 2n
2tn−1 + 1 tn = 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 :´ °þ® ßÚÞûÂè üµÈ𥠢ãõ Û
¤Àî üõ ëÀ¬ Âþ ¥ üõÞä Ûت ¤¢ î ´ °þ® ßÚÞûÂè üµÈ𥠢ãõ : Àþ ÂÚ ÂÑ÷ ¤¢
a0 tn + a1 tn−1 + a2 tn−2 + . . . + ak tn−k = bn1 p1 (n) + bn2 p2 (n) + . . . + bnm pm (n) ( .ÀµÆû ´ ø üÖÖ ¢Àäû
ai , bj
ø ÀµÆû
di ¤¢ ¥ ýÜÞ À pi (n)
)
: ÝÆþ÷ üõ Âþ ¥ ¤ ¬ ¤ Ê¿Èõ ó¢ãõ ¢ãõ ¥ µ¨¢ ßþ ýÂ
(a0 xk + a1 xk−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
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
12
⇒ r1 = 1, r2 = 1, r3 = 2, r4 = 3, r5 = 3, r6 = 3, r7 = 4
⇒ tn = c1 (1)n + c2 n(1)n + c3 (2)n + c4 (3)n + c5 n(3)n + c6 n2 (3)n + c7 (4)n : ñ·õ :Àî Û ¤ Âþ ¥ üµÈð¥ ó¢ãõ
t(n) =
1 2t( n2 ) + n
n=1 o.w :Û . Ýî üõ Û Âþ ¥ Âçµõ Âç ¥ ù¢Ôµ¨ ¤ ñ·õ ßþ
n = 2k ⇒ t(n) = t(2k )
t(2k ) = 2t( 22 ) + 2k = 2t(2k−1 ) + 2k k
g(k) = t(n) ⇒ g(k) = 2g(k − 1) + 2k ⇒ (x − 2)(x − 2) = 0 ⇒ r1 = 2, r2 = 2
=⇒ g(k) = c1 2k + c2 k 2k
2k = n =⇒ log2 n = k
t(n) = c1 n + c2 n logn2
t(1) = c1 = 1
t(2) = 2t(1) + 2 = 4 = 2c1 + 2c2 ⇒ c2 = 1 =⇒ t(n) = n + n logn2 : ñ·õ :Àî Û ¤ Âþ ¥ üµÈð¥ ó¢ãõ
T (n) =
1 3 2
3
n 1 n 1 2T(2) − 2T(4) − n
n=1 n=2 o.w :Û : Ýþ ¤¢ Âçµõ Âç ¥ ù¢Ôµ¨ ¥
n = 2k =⇒ T (2k ) = 32 T (2k−1 ) − 12 T (2k−2 ) − 21k =⇒
g(k) = 32 g(k − 1) − 12 g(k − 2) − ( 12 )k =⇒ (x2 − 32 x − 12 )(x − 12 ) = r1 = r2 = 12 , r3 = 1 =⇒ g(k) = c1 + c2 ( 12 )k + c3 k( 12 )k =⇒
0⇒
üµÈ𥠢ãõ .1.2
13
T (n) = c1 + c2 n1 + c3 lgnn =⇒ T (n) = 1 +
c1 + c2 = 1 , c1 + c22 + c23 = 32 c1 + c42 + c23 = 32
lg n n
.Àî Û ¤ Âþ ¥ ó¢ãõ : ñ·õ
t(n) + nt(n − 1) = 2n! t(0) = 1 :Û
t(n) + nt(n − 1) = 2n! =⇒ t(n) n!
t(n) n!
+
t(n−1) (n−1)!
=2
= 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) = −21 n!(−1)n + 32 n!
: ñ·õ
T (n) =
a b
n=0 n=1
1+T (n−1) T (n−2)
.Àî Û ¤ Âþ ¥ ó¢ãõ
o.w : Û
T (0) = a
T (1) = b T (2) = 1+b a
T (3) = 1+a+b ab
T (4) =
T (5) = a T (6) = b T (7) = 1+b a =⇒ T (n) = T (n mod
a+1 b
5)
n>4 : ñ·õ
.Àî Û ¤ Âþ ¥ ó¢ãõ
üµÈð¥ ýû ݵþ ¤ Úó
t(n) =
.2 ÛÊê
1 4−t(n− 1)
1
14
n>1 n=1 :Û
3 , t(4) = 11 =⇒ t = t(2) = 13 , t(3) = 11 n 41 pn+1 qn+1
pn qn
n = t(n + 1) = 4qnq−p =⇒ qn+1 = 4qn − pn n
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 Æ õ Û ù¤  ð .Ýþ ´¨¢ ÜÂõ ßþ ¤¢ Û ù¤ ×þ ø Ýû¢
üµÈð¥ ýû ݵþ ¤Úó .2.2
15
:ý÷û ýû  óbÆõ ¥ üØþ ýø ¤ ,À÷ ùÀª ý ¤Áð ù¤Þª 3ø2ø1 ýû ù¤Þª Üõ ¨ Àî Âê î À ÷ µ ê ð ¤Â ì ý ¤ Ï ô
i Ü õ ýø ¤
× Æ þ¢
n
ß þ ,¢¤¢ ¤Â ì × Æ þ¢
n
û Üõ
ßþ î ´¨ ö éÀû .´¨ µêÂÚ÷ ¤Âì µØî ×Æþ¢ ýø ¤ ý µð¤ à ×Æþ¢ ÃðÂû ùÀ ÷ Þ ì ü Ø Þ î Ü õ ¥ ù¢ Ô µ ¨ ¤ î ß þ î ¢Â î Û Ö µ õ ô
jÜõ
¤ × Æ þ¢
n
¤ Âû ø ¢Âð üÞ÷¤Âì µØî ×Æþ¢ ýø ¤ µð¤ à ×Æþ¢ ÃðÂû ø ¢Âð üõ ¤ ¬ .¢Èõ ¹ ×Æþ¢ ×þ ú
i + j + x = 1 + 2 + 3 −→ x = 6 − (i + j)
i −→ j
j
i
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
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
16
:ßþ ÂÞ öµ÷ ¤ üØÆþ¢ ºû ý÷û  ób Æõ ¤¢ ö ܨø î ÀÆþ üÞµþ ¤ Úó ¢À ã î ü µ È ð¥ Î ¤) ¢Â î Û Ö µ õ Å Ø ã ó þ ô (.Àî ±¨½õ Àû¢ üõ ¤ ô
j
j
Üõ ×Æþ¢
Ü õ ô
n
i
Ü õ ¥ f Þ Ö µ Æ õ
ñÖµ÷ ý ô¥ ýû ´î : Û
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) = 3 T (n − 1) + 2
⇒ T (n) = 3n − 1
: ñ·õ ¤ ¤÷ ßþ ýû ÷¡ ¥ ü¡Â Ýû¡ üõ î Ýþ ¤¢
n
ñÏ ý ¤÷ Àî Âê
¤ ¬ ßþ¤¢ .Àª±÷ Ýû ¤ ø¹õ ýÀÔ¨ ÷¡ ¨ ºû î Ýî ýÃõ Ù÷¤ ý ¤ Ï ¤ Àî üõ ¢¹þ ¤ ¢ÊÖõ ßþ ý ßØÞõ ýû ´ó ôÞ î üµÈð¥ ݵþ ¤ Úó ¢ÊÖõ ßþ ý ¤ ßØÞõ ¢Àã î üµÈð¥ Τ ß»Þû .Àþ ¤ ø ´¨¢ Ù÷¤ ø À÷ Ù÷¤ ÀÔ¨ ÷¡
n
î ´¨ ö Âê).Àþ ¤ ø ´¨À Ã÷ ¤Àû¢ üõ õ (.Ýî ýÃõ Ù÷¤ Ýû¡ üõ ù¨
:Û
üµÈð¥ ýû ݵþ ¤Úó .2.2
17
a a[1] a[2] .............
ù¨
a[n]
ù¨
a[3]
ÀÔ¨ ù¨
a[3] a[3]
ÀÔ¨
a[3]
a[2]
a[1] ÀÔ¨
a[2] ù¨
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(’• ◦ ◦’);
else { •.Coloring(n-1); ◦•.Coloring(n-2); ◦ ◦ •.Coloring(n-3); } }
printf(’••◦’);
printf(’◦◦•’);
printf(’• • •’); }
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
18
2
4 a(n) = 7 1 × a(n − 1) + 1 × a(n − 2) + 1 × a(n − 3)
n=1 n=2 n=3 else : ñ·õ
ÝÞþ ÃîõûÆþÖõ ¢Àã ÛìÀ Ýû¡ üõ.Ýþ ¤¢ ¤µ¡ ¤¢
n
ñÏ ý þ¤
¢À ã Û ìÀ î À û¢ ¤ ¤ ü µ È ð¥ Î ¤ . Ý þ ¤ ø ´ ¨À ¤ þ¤ Ý Þ ÷ ü õ ø .Àî ±¨½õ ¤ ûÆþÖõ : Û ö üõ Å ù¢Þ÷ À ¤ þ¤ ÷¡ ø¢ Ý÷ üõ Âþ ¥ Ûت ÕÎõÀª ø ¥
n
Âð
ø Ýþ ¤¢¥÷ ñø ÷¡ø¢ ÝÞ÷ üõ ø ÝÞþ Ãîõ ö¢¤ ø ´¨À ý ÆþÖõ ×þ î ´Ôð ø¢ ÝÞ÷ üõ ¤ ¢Àä
n-2 ÝÞ÷ üõ ø ñø ¢Àä ø¢ .
1 ´¨
ÝÞþ Ãîõ ¤ ¢Àä
n-2 ÝÞþ Ãîõ Àþ
¥÷ ÆþÖõ ¨ fãÞ Å. Ýî ÆþÖõ ñø ¢Àä
| {z } |
{z
2
n−2
} : Ýþ ¤¢ Å
T (n) =
1
T (n − 2) + 3
ùÀ ÷ õü ì ý ÷ ¡ ÷ ¡
n-1
n=2
n-1
n = 2k
=⇒ T (n) = 32 n − 2
Å ù¢ Þ ÷ À ¤ þ¤ ý ÷ ¡ × þ À ª ¢Â ê
n
 ð ø
ß þ ý ¤ û Æ þ Ö õ ¢À ã Û ± ì ý Î ¤ Õ Î õ ø ´ ¨ ø ¥ ý¢À ä
ß üþú÷ ÝÞ÷ üõø ÝÞþ Ãîõ ö¢Þ÷ À ý Ã÷ ÆþÖõ ø¢ ų¨, Ýþ ¤ ø üõ ´¨¢
( 32 (n − 1) − 2) + 2fãÞ Å, Ýþ ¤¢
¥÷÷¡
n-1 ÝÞ÷ üõø ÝÞþ Ãîõ ø ñø ý÷¡
: Ýþ ¤¢ Ûî ¤¢ Å. ´¨ ¥÷¢Âê
n ýÂ
ÆþÖõ
2T ( n2 ) ùÚ÷ , Ýî ÓÊ÷ ¤ þ¤ Ý÷ üõÀª ø ¥ n Âð) 1 öÞû î. Ýþ ¤¢ ´ó T (n) = 2T ( n 2 ) + 2 Ûî ¤¢ Å . ùø Âð Âû ÝÞ÷ üõ ø ÝÞþÃîõ ý (.Àû¢ üõ õ ¤ T (n) = 32 n − 2 ÆþÖõ ø¢ ø Ýþ ¤¢ ÆþÖõ
üµÈð¥ ýû ݵþ ¤Úó .2.2
19
T (n) =
0
n=1
3 (n − 1)
n = 2k + 1
2n − 2
n = 2k
2 3
: AVL ´¡¤¢
1 ùÂð Âû ´¨¤ ø ² ´¡¤¢ Âþ ¥ áÔ¤ é
µ¡ î üø¢ø¢ ý¹µÆ ´¡¤¢ ùÂð ö üõ
O(log n) ÆþÖõ ýÂ Å
. ´¨
log n
¥´¡¤¢ ßþ áÔ¤ . Àª . ¢Âî ´þ Ãþø ¤ û
´ ¨ ° Æ Â ý¤¢ ö ù ð  û î ü ø¢ø¢ ´ ¡¤¢ : ü ø¢ø¢ ý ¹ µ Æ ´ ¡¤¢ . Àª ´¨¤ À÷¥ Âê ýøÆõ µØî ² À÷¥ Âê Øþ ¤ Î
: ñ·õ õ ¤ 4 áÔ¤
AVL
´¡¤¢ ×þ ýû ùÂð ¢Àã ÛìÀ î üµÈð¥ Τ ? ´¨ ôÀî ÀûÀ
: Û
 þ ¥ á Ô ¤ ø
n-1
,
n
á Ô ¤
AVL
´ ¡¤¢ ´ ¨¤ ´ Þ ¨ ´ ¡¤¢  þ ¥ á Ô ¤ . ´¨
T(1)
T(0)
T(2)
1
2 T (n) = 4
T (n − 1) + T (n − 2) + 1
T(3)
n=0 n=1 n=2 o.w
n-2 ² ´Þ¨
´¡¤¢
T(n-1) T(n-2) T(n)
.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+2 5 √ √ f (n) = c1 ( 1+2 5 )n + c2 ( 1−2 5 )n √ √ ⇒ f (n) = √15 ( 1+2 5 )n − √15 ( 1−2 5 )n
:
AVL
√
, r2 = 1−2 5
´¡¤¢ ¤¢ «¡ ýùÂð ´þ Ãþø ý ÆþÖõ ·îÀ
√
1 1 + 5 h+2 n ≥ T (h) = f (h + 2) − 1 =⇒ n ≥ √ ( ) − 1 =⇒ 5 2 √ 1 1 1 + 5 h+2 1) ≥ log 5 +(h + 2) =⇒ n+1 ≥ √ ( ) =⇒ log(n+ ϕ ϕ 5 2 √
1 √
√
1) − log 5 =⇒ h ∈ O(log 5(n+1) ) =⇒ h ∈ O(logn ) h + 2 ≤ log(n+ ϕ ϕ ϕ 2 þ
1 √
× log2ϕ + logϕ 5 = 1.44 log2
(n+1)
−0.33 =⇒ h ∈ O(logn 2)
=⇒ h ≤ 1.44 log2
logn2
√
(n+1)
1) h + 2 ≤ log(n+ − logϕ 5 = log2 ϕ
(n+1)
+1.67
üãþ ´¡¤¢ áÔ¤ ù¥À÷ ùÂð ×þ ´þ Ãþø ý ÆþÖõ ·îÀ ßþ . ´¨
üµÈð¥ ýû ݵþ ¤Úó .2.2
21
: ñ·õ ±¨½õ ÀûÀ õ ¤ ÃþÞµõ ÀÜî
n üø¢ø¢ ý¹µÆ ýúµ¡¤¢ ¢Àã î ýΤ . Àî (c1
< c2 < · · · < cn
ÃþÞµõ ø¢ ø¢ ÀÜî
n)
ck ck+1 < ... < cn
c1 < c2 < ... < ck−1 T (k − 1)
T (1) = 1 T (n) =
Pn
k=1
T (n − k)
T (2) = 2
1 2n T (k − 1) × T (n − k) = n+ 1 n
(öî ¢Àä) : ñ·õ
À . Ýî ±¨½õ ¤
A1 , A2 , · · · , An
Åþ Âõ
n
ÂÌܬ Ýû¡ üõ
? ¢Âî ý ¤Áðõ÷ ® ´ú ¤ û Åþ Âõ ßþ ö üõ Õþ ÂÏ : Û
T ( 0) = 0 T ( 1) = 1
(A)
T ( 2) = 1
(AB)
T ( 3) = 2
T ( 4) = 5 .. .
A(BC), (AB)C A(BCD), (AB)(CD), (ABC)D ⇒ T (4) = T (1).T (3) + T (2)T (2) + T (3).T (1)
(A1 · · · Am ) (Am+1 · · · An ) ⇒ {z }| | {z } m
T (n) =
n− X1 m=1
n−m
T (m)T (n − m) =
1 2n − 2 n n−1
:ßþ ÂÞ
.ÀþÞ÷ ± Àóõ â ¥ ù¢Ôµ¨ ¤ Û±ì ñ·õ ø¢ ý Τ ø¢ :ñ·õ
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
22
¤¢ ùÀª ÂûÒ ýû ÂÔ¬ ¢Àã î ´¨ ±µãõ ü÷õ¥ ¤
n
n
ñÏ 10 ý±õ ¤¢ ýÀî
ñÏ Â±µãõ ýû Àî Ûî ¢Àã î ÀÆþ üµÈð¥ Τ ×þ Àª ø ¥ ö .ÀþÞ÷ ±¨½õ
:Û
n n-1 ñÏ
ñÏ Â±µãõ ýûÀî ôÞ ¢Àã ±µãõ ýûÀî ôÞ ¢Àã
= a(n)
= a(n − 1)
(.Àª±÷ ÂÔ¬ ñø ÷¡ î üµó ¤¢)
a(n − 1)
´ó 9
z
}|
{z
}|
{
1,2,...,9 .´¨ ¢Âê Çþû ÂÔ¬ ¢Àã î
n-1 ñÏ
üþû µª¤ ôÞ ¢Àã =
b(n − 1)
(.Àª ÂÔ¬ ñø ÷¡ î üµó ¤¢)
b(n − 1)
z
}|
{
0
=⇒ a(n) = 9a(n − 1) + b(n − 1) 1
2
10
10
n−1
.........
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
ö üõ î ¤ ü÷ ÝÞþ Ãîõ î ÀÆþ üµÈð¥ Τ .Àû¢ öÈ÷
üµÈð¥ ýû ݵþ ¤Úó .2.2
23
: Û
1 T(1)=2 2
1 3
2
T(2)=4
4
3 5
1 2
4
T(3)=7
6
7
T (1) = 2, T (2) = 4, T (3) = 7, T (4) = 11, . . . ôn Í¡ ö¢Âî ê ® ý Å. ¢Âî ¢¹þ ö üõ ÷ ¹ µ ÷ ¤¢ Å ¢ ª ü õ ê ® À þÀ ÷
n
T (n − 1)
Í¡
î ¢Â î â Î ì ¤ Û ± ì Í ¡
.´ª¢ Ýû¡ ÷
T (n) = T (n − 1) + n =⇒ T (n) =
n − 1À þ
T (n) = T (n − 1) + n
n(n + 1)
2
n − 1
+1
: ñ·õ ¢Àä ßþ ö üõ Õþ ÂÏ À Ýþù¢Âî ´êþ ¤¢ ¤
n ≥ 2 üã±Ï ¢Àä
Àî Âê
?¢Âî ¥Âê 2 ýøÆõ µð¤ à üã±Ï ¢Àä áÞ¹õ ¤ üã±Ï
.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 ýû¥Âê ñø ýûÀ÷ø âÞ ø Ýî T (5) :
{2 + (3)}, {(2 + 1) + 2}, {(4 + 1)} | {z } | {z } 3+2
T ( 6) :
5
{2+(2+2)}, {2+(4)}, {(2 + 1) + 3}, {(3 + 1) + 2}, {(5 + 1)} | {z } | {z } | {z } 3+3
T(n)=
4+2
6
:Ýþ ¤¢ ¹µ÷ ¤¢
1
n=2 n=3 T (n − 1) + T (n − 2) o.w
1
: ñ·õ ×þ ø¢ þ üóµõ ÂÔ¬ ø¢ î ´¨ ±µãõ ü÷õ¥ 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 =
üµÈð¥ ýû ݵþ ¤Úó .2.2
25
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À±õ ¥ ©õ
ÀÊÖõ
´î ý ßØÞõ : Û
T(n,m-1)
n
A
©õ Àª
m
T (n, m − 1) ÂÆõ
c
{z
|
n
´ ó ß þ ¤¢ î ¢¤Á Ú
T (n − 1, m)
B d - T(n-1,m)
}
m
ñøÀ ýú÷ µ¨ ¢Àã ø
6
c
ñøÀ ýûÂΨ ¢Àã Âð Ûت ¤¢ Î Ö ÷¥ À þ þ
´ó ßþ ¤¢ î Àî ¤ ±ä
d
B
Î Ö ÷ öÀ ¨¤ ý Â
ÎÖ÷ ¥ Àþ þ ø ¢¤¢ ¢ø ÂÆõ : Ýþ ¤¢ ¹µ÷ ¤¢ .¢¤¢ ¢ø
T (m, n) = 1 × T (n, m − 1) + T (n − 1, m) × 1 , T (n, 0) = T (0, m) = 0 m+n T (m, n) = n, m :ßþ ÂÞ ÝþÞ÷ üõ ÝÆÖ ýøÆõ ´ÞÆì
n
¤ á
® , á
® ýøƵõ ¶Ü·õ ×þ ¤¢
Àþ ¤ ø ´¨¢ üµÈð¥ ýΤ, ÝþÞ÷ üõ Û¬ø Ýû ¤ ú÷ û âÜ® ¥õ ø .Àû¢ ´¨¢ ¤ ùÀª µ¡¨ ýû á
® ý¥µõ ôÞ î : ßþ ÂÞ éÂ Ï ú î ¢¤¢ ¢ ø ½ Ô ¬ ß þ ¤¢ ý ¤ õ .Ý þ ¤¢ ¤ µ ¡ ¤¢
n*n
ý ½ Ô ¬
üµìø ø ù¢Þ÷ ´î áø ª ½Ô¬ ý ¥ ¤õ ßþ.Àî üõ ´î ´¨¤ þ ßþ
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
26
À÷ üõ î üþúµó ¢Àã .Àî üõ ´î ßþ éÂÏ À¨¤ üõ ÂÎì î ?Àþ ¤ ø ´¨À ¤À¨Â ÛÖõ ýÎÖ÷ : ßþ ÂÞ ý û ¶ Ü · õ ¤ ö ö ü õ ´ ó À .Ý þ ¤¢ ¤ µ ¡ ¤¢ À ½ õ ü ã Ü ®
n
×þ
?¢Âî ¥Âê Óܵ¿õ :ßþ ÂÞ .À üµÈð¥ ø ý Âþ ©ø ¤ ø¢ ¤ ýÌä
n äÞ¹õ ×þ
ýû äÞ¹õ Âþ ¥
 ð Ý þ  ð ü õ Â Ñ ÷ ¤¢ ´ × þ Ì ä  û ý¥ ,ý  þ ©ø ¤ ¤¢ : ü þ Þ û¤ üõ ÂÑ÷ ¤¢ 0 ¤ ö Àª±÷ äÞ¹õ Âþ ¥ Ìä Âð ø 1 ¤ ö Àª äÞ¹õ Âþ ¥ Ìä .Ýþ Âð
1
2
3
4
0
0
0
0
{}
0
0
0
1
{4}
0
0
1
0
{3}
¤¢ ø Ý Æ þ ÷ ü õ ¤ ø¢ ¤ ý Ì ä
n-1
ý û ä Þ ¹ õ  þ ¥ à ÷ ü µ È ð¥ ©ø ¤ ¤¢ .Ýî üõ ê® ¤ Ìä ßõ
n
ôø¢ Óþ¢¤ :ßþ ÂÞ
n2
n
1 ¢À ä ö ¤¢ î ö ü þø¢ â  õ ø µ ê ð ¤
¢À ä î À Æ þ ý õ ÷ .ÀûÀ õ ¤ À÷ ùÀª ùÀ :ßþ ÂÞ
.ÀþÞ÷ ý¥¨ ù¢ ¤
tic tac toe ý¥
(Master Theorem) ü¨¨ Ìì ùÚ÷
f : N → R+ , b > 1 , a ≥ 1
ö ¤¢ î
3.2
T (n) = a T ( nb ) + f (n)
Âð
: ´¨ ¤Âì Âþ ¥ ¸þµ÷
ù Ú ÷ À ª ¤Â ìÂ
>
0
× þ ýÂ
f (n)
∈
O(nlog
a b −
)
 ð
(1
(MASTER THEOREM) ü¨¨ Ìì .3.2
27
.T (n)
.
T (n) ∈ Θ(nlog b (log n)k+1 ) a
× þ ¥
0 .
< δ <
1
, >
ùÚ÷ Àª
0
T (n) ∈ Θ(f (n))
a
f ( nb )
¤Â ì ý ¹ µ ÷ ¥ ¢Â ð ¤Â ì à ÷
î ¢ª üõ ¹µ÷
a
f (n) ∈ Θ(nlog b (log n)k )
× þ ýÂ ø
ùÚ÷
a
∈ Θ(nlog b )
f (n) ∈ Ω(nlog
< δ f (n)
b nb c
þ
d nb e
,
a b +
)
Âð
(2
 ð
(3
ݪ µª¢ Àã üþ
n b ý Â ð µ ± ó) ( . ´¨
:± .´¨ ´ÞÆì ø¢ Ûõª ± ö Â Â ý û
n
ýø ¤
T(n)
â î ù¢ ¨ Â ê × þ ´ ½ ¤ Ì ì ´ Þ Æ ì ß óø
ÀûÀõ öÈ÷ ´ÞÆì ßõø¢øÀî üõ Ãó÷
n = 1, b, b2 , ..
üãþ
b > 1¥ ¼½¬ ýû
ê ¬ ø À î À ã ¨ ü ã ± Ï ´ ± · õ ¢À ä Þ û À ÷ ü õ à ó ÷ ß þ ¤ Î î .¢ø ¤ üõ ¤î ÜÿÆõ ÓÖ¨ø Óî ü¨¤  ý ü®þ ¤ ýúØØ ÝþÞ÷ üõ ù¢¨ ¤ Âê ý Ìì ± ý üµìø ݪ °ìÂõ Àþ õ ñ ßþ ¤¢ ¤
T(n) À÷õ üã
ñ·õ öä . À÷¨Â ÍÜè ¸þµ÷ ¤ õ Àþ±÷ ý¥¨ ù¢¨ ßþ
üµ÷Þ® ºû ¤ ¬ ßþ ¤¢, ´¨
n ÂÂ
:¢Þ÷ Óþ Âã ¤ ¬ ßþ ¤
T(n)=
n n2
T(n)
´¨ 2 ¥ üþû ö
n üµìø î Àþ ÂÚ ÂÑ÷
â ö üõ Âþ ¥ ,
T(n)∈O(n)
î ´Æ÷
n=1,2,3,.. otherwise
.
T(n)∈O(n2 )
î üó ¤¢
: ¼½¬ ýû ö ý ± .´¨Âþ ¥ üµÈð¥ Τ Ãó÷ ü¨¨ Ìì ±´ÞÆì ßóø
T (n) = aT ( nb ) + f (n)
.2 ÛÊê
üµÈð¥ ýû ݵþ ¤ Úó
b
ö¢ ¼ ½ ¬ ü õÃ ó î ´ ¨
28
b>
1¥ ü ½ ½ ¬ ö n î Â ê ß þ ´ ½
üµÈð¥ ý Τ Û ýób Æõ Ýó ßóø .¢¢Âð üõ ö Ýó ¨ ¤¢ Ãó÷ ßþ.´Æ÷ . À î ü õ × î Þ Ú ¨ × þ Û õ ª ¤ ± ä × þ ýø Æ ý ób Æ õ ¤ ¤ îÁ õ ý ü Ü ± ì Ý óø¢¥ Ý ó ß õ ¨ øÀ þ Þ ÷ ü õ ß ã ¤ Þ Ú ¨ ýù¢øÀ ½ õ Ý ó ß õø¢
b¥ ü½½¬ ýû ö n Øþ Âê ü¨¨ ýÌì ±
.ÀþÞ÷ üõ ù¢Ôµ¨ , ´¨
: 1Ýó
ý ûö ¥ ü Ô õ ÷ ü ã üõ Óþ Âã Âþ ¥ ¤ ¬
f (n)
b
b>
ø À ª ´ ¢À ä ø¢
¼½¬ ýû ö ýø ¤ ¤
1ø a ≥ 1 À î Â ê
T(n)â
.˻
b¥
ü½½¬ . Ýî
T(n)=
θ(1)
n=1
aT ( nb ) + f (n)
n = bi
. ´¨ üµ±·õ ¼½¬ ¢Àä
i î
: Ýî üõ ´ ñ
1 logn− b
T (n) = θ(n
loga b
)+
X
(1)
aj f (n/bj )
j=0
: ± ø ´ ¨f (n) ©¥ ¤ ý¤¢ ö ý È þ ¤ î Ý î ü õ ù¢ Ô µ ¨ ü µ È ð¥ ´ ¡¤¢ ¥ õ ß þ ¥ ôÀ î û .À µ Æ û
f (n/b)
È þ ¤ ¥ 2 Ü ¬ ê ùÂ ð
a2 õ
©¥ ¤ ý¤¢ ôÀ î  û î ,À ª ü õ À ÷¥  ê
Å , ´ ¨
ý¤¢ ôÀ î  û î ¢¤¢ ¢ ø È þ ¤ ¥  û ø ´ ¨
T (1) = Θ(1)
Ýû¡ ïÂ
n
loga b
j
f (n/b2 )
©¥ ¤ À ÷¥ Â ê
Ü ¬ ê ùÂ ð
j
a
aý¤¢
a
ý¤¢
û À ÷¥ Â ê
¢À ã ü Ü î ¤ Ï . Ý þ ¤¢ j
  ´ ¡¤¢ ß þ ï  û ©¥ ¤.À ª ü õ
n ¢Àã ø logb áÔ¤ üµ¡¤¢ Å.¢¤¢ ¤Âì
f ( nb )
©¥ ¤
lognb ÕÞä ¤¢ ï . ´ª¢
(MASTER THEOREM) ü¨¨ Ìì .3.2
29
- f(n)
f(n) a
6 f(n/b) a
j f(n/b) a
? f(n/b) a
lognb f (n/b2 ) ................................................................... a a a a a a a .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ? Θ(1)Θ(1)Θ(1) | .. .. ..
.. .. ..
f (n/b2 ) a2 f (n/b2 ) a a
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. a Θ(nlogb ) Θ(1)Θ(1)Θ(1)Θ(1)Θ(1)Θ(1)Θ(1) {z }
.. .. ..
a
nlogb
ýû ï ©¥ ¤ ø ´¡¤¢ ¥ ¼Î¨ Âû ©¥ ¤ ö¢Âî âÞ ¤
j
af(n/b)
(1)
Τ Ý÷ üõ õ
Û·õ ¼Î¨ Âû ©¥ ¤ , ´¨ ùÀª ù¢¢ öÈ÷ Ûت ¤¢ î ÷Ú÷Þû. Ýî ±¨½õ ö
Þû áÞ¹õ ßþÂøÀª üõ
aj f (n/bj )
¤ ¬ ´¨üÜ¡¢ ýû ùÂð ý¤¢ î
: ´¨ Âþ ¥ ¤ ¬ û ¼Î¨ üÜ¡¢ ýû ùÂð
logb n−1
X
aj f (n/bj )
j=0 ´¨¢
(1)
Τ °Â ßþ . Àª üõ
a
Θ(nlogb )
 Ã÷ û ï ôÞ ©¥ ¤ø .Àþ üõ
¨ üµÈ𥠴¡¤¢ °Æ  Øþ öø¢Þ÷ ù¤ª üÔþ ÂÒ µØ÷ Àþ ´ÞÆì ßþ ¤¢ :Àª Âþ ¥ ¢¤ õ ¨ ÕÎõ °Â À÷ üõ ü¨¨ ýÌì ¤¢ ùÀª ù¢Â ô÷ ¢¤ õ üÜ¡¢ ýû ùÂð ø Èþ ¤ üãþ , Àª µÆøû ï ©¥ ¤ ´¡¤¢ Ûî ©¥ ¤ (1 .Àª µªÀ÷ ü÷À  . Àª ùÀª Ç¿ ´¡¤¢ Ψ ¤¢ ýøÆõ f±þ ÂÖ ¤ ¬ ´¡¤¢ Ûî ©¥ ¤ (2 üÜ¡¢ ýû ùÂð ø û ï øÀª µª¢ üÚµÆ Èþ ¤ ©¥ ¤ ´¡¤¢ Ûî ©¥ ¤ (3 . Àª µªÀ÷ ü÷À Â
: 2Ýó
ý ûö ¥ ü Ô õ ÷ ü ã
f (n)
ø À ª ´ ¢À ä ø¢
: ݪ µª¢Âþ ¥ ¤ ¬ ¤
b>
g(n)
1ø a ≥ 1 À î Â ê
â ø .Àª
b¥ ü½½¬
.2 ÛÊê
üµÈð¥ ýû ݵþ ¤ Úó
30
1 logn− b
g(n) =
X
(2)
aj f (n/bj )
j=0 Ý þ ¤¢ ,
>
0
: ´ª¢ Ýû¡ ùÚ÷
´ ± · õ ´ Â þ¢ Ö õ ýÂ ,
a
f (n) = O(nlogb − )Â .
.
Ý ª µ ª¢
n≥b
g(n) = O(n
a
ð(1
loga b
)
a
g(n) = Θ(nlogb . log n) ùÚ÷ f (n) = Θ(nlogb )Âð(2 c<
´ Â þ¢ Ö õ ô Þ ø
.g(n)
1´ Â þ¢ Ö õ ¥ ü Ì ã ýÂ Â ð(3
= Θ(f (n))
ùÚ÷
af (n/b) ≤ cf (n)
:± Ý þ ¤¢ ¹ µ ÷ ¤¢ Å
a
f (n) = O(nlogb − )
Ý þ ¤¢ ñø¢¤ õ ± ýÂ
j loga b −
n Àþ üõ ´¨À Âþ ¥ Τ (2)Τ ¤¢ ý ¤ÁÚþ î f ( j ) b
= O((n/b )
) :
g(n) = O
1 logn− b
X
aj
j=0
n logab − bj
(3)
: Ýþ ¤¢ ü¨Àû ýû ý ¨ ¥ ù¢Ôµ¨ ß»Þû
1 logn− b
X
j=0
j
a
n logab − bj
1 logn− b
=n
X ab j a blogb
loga b −
j=0
1 logn− b
=n
loga b −
X
(b )
j
j=0
=n
loga b −
a
= nlogb −
b logb − 1 b − 1
n − 1 b − 1
n
¤ ¬ ¤  ¡ ¤ ± ä ö ü õ. À µ Æ û ´ .´ª÷
n
.
ø b
loga b −
î ý¤ Ï a
O(n ) = O(nlogb )
•
(MASTER THEOREM) ü¨¨ Ìì .3.2
31
:Àþ üõ ´¨À Âþ ¥ Τ (3) Τ ¤¢ ¤±ä ßþ ö¢¢ ¤Âì a
g(n) = O(nlogb ) .¢ª üõ ± ñø ¢¤ õ °Â ßþÀ
Ýþ ¤¢
a
f (n) = Θ(nlogb )
ýΤ ôø¢ ¢¤ õ ýÂ
•
a
f (n/bj ) = Θ((n/bj )logb ) :Àþ üõ ´¨À (4)Τ (2)Τ ¤¢ ý ¤ÁÚþ ø
1 logn− b
g(n) = Θ
X
aj
n logab
j=0
bj
(4)
: Ýþ ¤¢ Íø ¤ ý¥¨ ù¢¨ ¥
1 logn− b
X
j
a
j=0
n logab bj
=n
1 logn− b
X
loga b
a
blogb
j=0 1 logn− b
=n
loga b
X
j=0
j
a
1
a
= nlogb lognb : Ýþ ¤¢ (4) Τ ¤¢ ¤±ä ßþ ö¢Âî ßÈ÷ î
a
g(n) = Θ(nlogb lognb ) =⇒ a
g(n) = Θ(nlogb log n) .Àª ´ Ã÷ ôø¢ ´ó î
ýû ö ý î Ýþ ÂÚ ¹µ÷ Ý÷ üõ (2) Τ ¥ ù¢Ôµ¨ ô¨ ¢¤ õ ¤¢ ýÂ
af (n/b) ≤ cf (n) .
î Â ê ß þ .
f (n/b) ≤ (c/a)f (n) Ýþ ¤¢ n ≥ b
g(n) = Ω(f (n))
Âþ¢Öõ ôÞ ø
c<1
Ý þ ¤¢,
b
¼½¬
´ Âþ¢Öõ üÌã
f (n/b) ≤ (c/a)f (n) ⇒ f (n/bj ) ≤ (c/a)j f (n) ⇒ aj f (n/bj ) ≤ (cj f (n))
•
.2 ÛÊê
üµÈð¥ ýû ݵþ ¤ Úó
32
: Ýþ ¤¢ (2) Τ ¤¢ ý ¤Øµ¨¢ üÞî ñ
1 logn− b
g(n) =
X
aj f (n/bj )
j=0 1 logn− b
≤
X
cj f (n)
j=0
≤ f (n)
∞ X
cj
j=0
= f (n)
1
1−C
= O(f (n)). Ý þ ¤¢ , ß þÀ
b
¼ ½ ¬ ý û ö ýÂ Å .´ ¨ ´
.g(n)
= Θ(f (n))
ß þÂ
c
ö ¤¢ î
g(n) = Ω(f (n)), g(n) = O(f (n)) .Àª ± Ã÷ 2 Ýó ô¨ ¢¤ õ °Â
3 Ýó ýûö ¥ üÔõ÷ üã üõ Óþ Âã Âþ ¥ ¤ ¬
f (n) b
ø Àª ´ ¢Àä ø¢
b > 1ø a ≥ 1
¼½¬ ýû ö ýø ¤ ¤
T(n)â
Àî Âê
.˻
b¥
ü½½¬ . Ýî
T(n)=
θ(1)
n=1
aT ( nb ) + f (n)
n = bi
: ´ª¢ Ýû¡ ¤ ¬ ßþ ¤¢. ´¨ üµ±·õ ¼½¬ ¢Àä
ù Ú ÷,
>
0´
 þ¢ Ö õ ü Ì ã ýÂ
a
f (n) = O(nlogb − ) .T (n)
.T (n)
a
= Θ(nlogb log n))
ùÚ÷
= Θ(n
loga b
i î
 ð (1
)Ýþ ¤¢ a
f (n) = Θ(nlogb )Âð (2
(MASTER THEOREM) ü¨¨ Ìì .3.2
33
0 ´  þ¢ Ö õ ü Ì ã ý , f (n) = Ω(nlog + )  ð (3 Ýþ ¤¢ ùÚ÷ af (n/b) ≤ cf (n) ݪ µª¢ n ï¤ Ã Âþ¢Öõ ø c < 1 ´ Âþ¢Öõ ü Ì ã ý  ðø
a b
>
.T (n)
= Θ(f (n))
:± :Ýî üõ ù¢Ôµ¨ 1 Ýó ¥ (1)Τ üþ ¥ ¤ ý 2 Ýó ¢¤õ ¥ õ : Ýþ ¤¢ ñø ¢¤ õ ýÂ
a
a
a
T (n) = Θ(nlogb ) + O(nlogb ) = Θ(nlogb ), : 2 ¢¤ õ ý ø a
a
a
T (n) = Θ(nlogb ) + Θ(nlogb log n) = Θ(nlogb log n), : 3 ¢¤ õ ý ø a
T (n) = Θ(nlogb ) + Θ(f (n)) = Θ(f (n)), :Âþ ¥
f (n) = Ω(n
loga+ b
)
.2 ÛÊê
üµÈð¥ ýû ݵþ ¤ Úó
T(n)=
34
.Àî Û ¤ Âþ ¥ ó¢ãõ : ñ·õ
1 √ 3 T ( n2 ) + n
n=1 else (Ìì ñø ´ÞÆì §¨ Â): Û
f (n) =
√
n=
⇒ T (n) ∈
T(n)=
1 n2
3 O(nlog 2 − )
∈
3 Θ(nlog 2 )
0 2T ( n2 ) + n − 1
a=3, b=2
.Àî Û ¤ Âþ ¥ ó¢ãõ : ñ·õ
n=1 else (Ìì ôø¢ ´ÞÆì §¨ Â): Û
T (n) = 2 T ( 2 ) + n − 1 f (n) = n − 1 ∈ Θ(n) n
Θ(n) =
2 Θ(nlog 2 (log
a=2, b=2
n)0 ) ⇒ T (n) ∈ Θ(n(log n)0+1 )
⇒ T (n) ∈ Θ(n log n)
T (n) =
.Àî Û ¤ Âþ ¥ ó¢ãõ : ñ·õ
1 3 T ( n2 ) + n2
n=1 else (Ìì ô¨ ´ÞÆì §¨ Â): Û
3 Ω(nlog 2 + )
f (n) = n2 ∈
a = 3 ( 2 )2 ≤ δ n2 ⇒ δ = 45 ⇒ T (n) ∈ Θ(n2 ) f ( nb )
T (n) =
a=3, b=2
n
.Àî Û ¤ Âþ ¥ ó¢ãõ : ñ·õ
c
2 T ( n2 ) + log n!
n=1 else : Û
f (n) = log n! ∈ Θ(n logn) Θ(n logn) =
2 Θ(nlog 2 (logn))
a=b=2
⇒ T (n) ∈ Θ(n (logn)1+1 ) ⇒ T (n) ∈ Θ(n (logn)2 )
û ݵþ ¤Úó Ãó÷ .4.2
35
û ݵþ ¤Úó Ãó÷
4.2
üþþ Û¬ ø¢ ¤ õ÷ ãÎì ×þ þ ݵþ ¤ Úó ×þ Âð.Àª üõ üþþ Û¬ , Û¬ ßóø  ý ¤
t2
öõ¥ ý ÂÚþ¢ ø
t1
öõ¥ üØþ î ù¢Þ÷ ý¥¨ ù¢ Óܵ¿õ Ûت
¤¢ ý Âb ݵþ ¤ Úó ý¥¨ ù¢ î üãõ ßþÀ.t1
∈ θ(t2 )
ùÚ÷ Àª µª¢ ¥÷
.¢¤À÷ ݵþ ¤ Úó üð¤ à ý±Âõ
ý ¤Áð °Â Û¬ ¥÷  ý ¤
t2 öõ¥
ý ÂÚþ¢ ø
t1
öõ¥ üØþ î Àª õ÷Â Ø ø¢
p2 , p1 Âð
¤¢ ,Àª µªÀ÷ Ýû  ü±÷  ºû õ÷Â Ø ø¢ ßþ ö  ùø
ä ,Àª µª¢ . ´¨
t1 + t2
ÂÂ
p1 , p2
üóµõ ýÂ ýÂ ô¥ öõ¥ ´ó ßþ
t1 + t2 ∈ θ(max{t1 , t2 }) ×Þ ¤ µ¨¢ Û¬ ÝÆÖ ÂµØî ýà ¤Ãê ´¿¨ ¼Î¨ ¤¢ î ´¨ ý ¤ µ¨¢ ×Þ ¤ µ¨¢ Âû
θ(1)
üõÀÖõ ¤ µ¨¢ ß»Þû ø .´¨
θ(1)
¥ ¤ µ¨¢ ßþ ý öõ¥ ,¢ª üÞ÷
ù¥À÷ ü÷õ¥î Àþ üõ ¢ ×Þ ¤ µ¨¢ üûµõ ¢Àã °î ¥ .À÷¤¢ ¥÷
: ü÷õ¥ Ãó÷
:while ÖÜ Ãó÷
i←1 while (i <= m) p(i) i←i+1 öÂ î × þ Ý û ¡ ü õ ,À ª Ý µ þ ¤ Ú ó ýÂ ýÂ ô¥ ö õ¥
1:
i←1
O((m + 1) × 1) + O(m) +
À î Â ê
Ýî üõ ÛÞä °Â ßþ .Ý Ýµþ ¤ Úó ýÂ
L ≤ O(1) +
O(mt) +
L
ýÂ
ÆþÖõ ýÂ û
p(i)
ô¹÷ ýÂ
i ← i + 1 ýÂ ýÂ
1 ×þ ¥ µ±ó).p(i) ∈ O(t) üãþ.Àª t, p(i) ÃþÞµõ ýû ý üþ öÂî ×þ Àî Âê (Àã üþ
üµÈð¥ ýû ݵþ ¤ Úó
O(m)
.2 ÛÊê
36
while goto ÛÞä
ýÂ
⇒ L < O(2 + 3m + mt) ⇒ L ∈ O(max{1, m, mt}) ôÀî ºû ö üÞ÷ øÀµÆû Ýúõ ý Âð ÝÞþ Ãîõ ßþ à ¨ Âûî ¢Þ÷ Àþ .¢Âî éÁ ¤ ö î × þ
i
 û ý ¤ ¬ ö ¤¢ À ª ¢ þ ¥ û
 öõ¥ ¤ ¬ ö ¤¢ Ýõ
ti
p(i)
ý ü ÷ õ¥ ü ðÀ î  ð
¤ üþ öÂî ßþ Âð ,ù¢Âî ±¨½õ¤
p(i)
üþ
:´¨ Âþ ¥ ¤ ¬
L ∈ O max{1, m,
m X
!
ti }
i=1 :for ÖÜ Ãó÷
öõ¥ ßþ ,¢ª üõ ý¥¨ù¢
while
.´¨
À÷õ ¤Ãê ´¿¨ ¼Î¨ ¤¢
for ¤ µ¨¢ Âû
while ÖÜ ýÂ öõ¥ Û·õ for ÖÜ ýÂ
for i ← 1 to n − 1 do
for j ← i + 1 to n do write(’*’);
ti =
n X j=i+1
L∈
n− X1 i=1
ti =
(1) = n − (i + 1) + 1 = n − i
n− X1 i=1
(n − i) = n(n − 1) −
(n − 1)n
2
=
(n − 1)n
2
∈ O(n2 )
Âû î , Ûت ¤¢ üܬ ÂÎì ý ýû ù¤µ¨ ¢Àã î ´¨ ßþ Û·õ á®õ ßþ .ÀµÆû
n2 −n
2
 î. Ýþ ¤ÞÈ ¤ ÀµÆû
1 2 ................. n 1 .*....*. * *...... 2. ... *.... .... ... .... ... .... ... .... ... .*... . .... n *. n2 −n
2
∈ O(n2 )
O(1) ¥
ôÀî
ý¥¨ °Âõ ýû ݵþ ¤Úó .5.2
37
ý¥¨ °Âõ ýû ݵþ ¤Úó
Selection Sort ü¿µ÷ ý¥¨ °Âõ ݵþ ¤Úó
5.2 1.5.2
procedure Selection Sort( T [ 1· · ·n ]) fori ← 1 to n-1 do minx ← T[i] Ω(1) O(1) minj ← i for j← i+1 to n do if (T[j] < minx)then minx ← T[j] O(1) Ω(1) minj ← j T[minj] ← T[i] O(1) Ω(1) T[i] ← minx : ݵþ ¤ Úó öÂî ±¨½õ
n− n P1 P (O( 1 ) + O(1)) ∈ O(n2 ) L ≤ i=1
j=i+1
i=1
j=i+1
n− n P1 P (Ω(1) + Ω(1)) ∈ Ω(n2 ) L>
⇒ 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
´ ó ß þ  À ¤¢ ø
. ´¨
Ω(1)
0
û üþ¹¢Àã
´ ó ß þ  µ ú ¤¢ ü ± ý¥ ¨
ö ßþ öÂî ø
O(n2 )
ݵþ ¤ Úó ßþ ý
.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)
¥ ݵþ ¤ Úó ßþ öÂî Àª
ü¤ ¬ Å. Àª üõ
n P
i=2
false
while
ÈÞû
¯Âª Âð ݵþ ¤ Úó ßþ ¤¢
(O(1) + O(i)) ∈ O(n2 )
¤ ¬ ö ý öÂî ø
´ó ßþ µú ¤¢ ¤ ݵþ ¤ Úó ßþ ¤ Ñõ ßþÀ. ¢¤¢ üÚµÆ ý¢ø ¤ ø á÷ î ´¨ . ÝþÞ÷ üõ ü¨¤  ͨµõ ´ó ø ´ó ßþ ÂÀ
(Best Case Analysis) ´ó ßþ µú Ãó÷ Ìä Âû ¢ø ¤ ø ´ó ßþ ¤¢ ,Àª °Âõ þ¤ î Àû¢ üõ ¤ ü÷õ¥ ´ó ßþ µú ¤¢ ¢ª  Àþ±÷
while
ÖÜ üãþ .¢ª ¤¢ ´ãìõ öÞû ¤¢ Ìä ö Àþ ÀþÀ
Ý µ þ ¤ Ú ó ý ö õ¥ ¹ µ ÷ ¤¢ ,´ ¨
O(1)
¥
while
¯Â ª Æ þ Ö õ ö õ¥ ´ ó ß þ
ß þ ýÂ ß þ ö î × þ ü êÂ Ï ¥ .¢ ª ü õ  ¤ .Àª üõ
θ(n)
n-1
 þ ¥ ¢ À û ¡
¥  öõ¥ ¹µ÷ ¤¢ ,´¨ ù¢
Ω(n)
O(n)
¥
ݵþ ¤ Úó
(Worst Case Analysis) ´ó ßþ ÂÀ Ãó÷ ÀþÀ ÌäÂû ¢ø ¤ ø ¤ ¬ ßþ ¤¢ Àª ùÀª °Âõ üóø Ã÷ ¤ ¬ û ù¢¢ Âð
while
¤ µ¨¢ ý öõ¥
ü êÂ Ï ¥ ø ¢ À û ¡
Ω(i)
Ω(n2 )
ù¥À÷ ¹µ÷ ¤¢ .´¨ ¥÷ ÆþÖõ
i
(ôi Ìä Û·õ)
Ý µ þ ¤ Ú ó ß þ ý ý ô¥ ö õ¥ Å .Ý þ ¤¢ ¥ ÷
¥ Ý µ þ ¤ Ú ó ý ö õ¥ ¹ µ ÷ ¤¢ ´ ¨
O(n2 )
Ý µ þ ¤ Ú ó ýÂ ýÂ ü þ Ó Ö ¨ .¢ Àû¡
θ(n2 )
ý¥¨ °Âõ ýû ݵþ ¤Úó .5.2
39
(Average Case Analysis)ͨµõ ´ó Ãó÷
P
E(x) =
üþú÷ ´ãìõ
i
i-1
i-2
.....
1
û ÆþÖõ ¢Àã
1
2
3
.....
i
x × f (x)
ü®þ ¤ Àõ
x∈X
.Àµê üõ ÷¡ ×þ ¤¢
T[1..i]
þ¤Âþ ¥ ¤¢ °¨õ ´ãìõ ¤¢ ô
ci =
i X
k×
k=1
i
x
î üóÞµ:
f (x) = 1i
ÂÊä ¤¢ ý ô¥ öõ¥ ͨµõ :
ci
i 1=1X 1 i(i + 1) = i + 1 k= × i i i 2 2 k=1
: ´¨  ý¥¨ °Âõ ݵþ ¤ Úó ý ý ô¥ öõ¥ ͨµõ ¹µ÷ ¤¢
n X i=2
ci =
n X i+1 i=2
´ ¨ Â µ ú û
2
sort
=
n n X 1X 1 n(n + 1) ( i+ 1) = ( − 1 + n − 1) = θ(n2 ) 2 i=2 i=2 2 2
Ö ¥
insertion sort ¤ µ ê¤ ´ ¨
Ý î û ù¢¢ ¢À ã î ü õ Ú û
üÞ÷ øÀµê üõ ëÔ Âþ¢ üÜ¡ ´ó ßþ µú ö Àª ¢þ ¥ û ù¢¢ ¢Àã üµìø üóø .Àª °¨õ À÷ .
1 ´¨
n! ´ó ßþ µú î ´¨û ´ó Ûî
Pigeon hole Sort ý±î ÷ ý¥¨ °Âõ u
n!
4.5.2
üãþ °Âõ÷ ýþ¤ ÂÊä ßþ µð¤ à ýù¥À÷ ý þ¤ Àµ ý¥¨ °Âõ ßþ ¤¢
¤¢ ¤ °Âõ÷ ýþ¤ ¤¢ ÂÊä Âû ü÷øÂê âìø ¤¢ þ¤ ßþ î ,¢ª üõ µêÂð ÂÑ÷ ¤¢ üÆþ÷ ¥ °Âõ ¤ ¬ ¤ óø ýþ¤ þ¤ ßþ ýø ¤ ¥ ų¨.¢¤¢ üõ ùÚ÷ ¢¡ öÞû üãþ û ü÷øÂê âÞø ´¨û ü÷øÂê  üµ±õ ý¥¨ °Âõ ßþ Å. Àî üõ . ´¨û ù¢¢ Ûî ¢Àã ÂÂ
u
¬ä áÞ¹õ
.2 ÛÊê
üµÈð¥ ýû ݵþ ¤ Úó
40
Procedure pigeon hole sort(T[1..n]) let m = max{T [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 P
i=1
(u[i] + 1)
ù¥À÷
for ÖÜ ¤¢ while
: Ýþ ¤¢ ݵþ ¤ Úó ¥ ´ÞÆì ßþ ý ßþ ,¢¢Âð üõ
m P
(u[i] + 1) =
i=1
m P
i=1
u[i] +
m P
i=1
1=n+m
θ(n + m)¥
.Àª üõ
ݵþ ¤ Úó ßþ ý öõ¥ ßþ :ÀþÞ÷ ´ì¢ Âþ ¥ ñ·õ
T u
2 1 0
1 2 0
3 3 0
2 1 4 5 0 0
u
1 2
2 4
3 2
4 1
5 2
1 1 2 | {z } |
2
2
T
1 ø¢
{z
2 ¤ú
2
5
3
4
2
5
°Âõ÷ þ¤
m=5
2
3
3
4
}| {z } 3 ø¢
?
5 5 | {z }
4 üØþ
5 ø¢
ùÀª °Âõ þ¤
ý¥¨ °Âõ ýû ݵþ ¤Úó .5.2
41
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 ← lef t, j ← right,
i = 0, j = n − 1 temp
.¢ª ´êþ ö ¤¢
d=j −i+1=n−1−0+1 =n ¤Áð ¥ Å ,Àª
if
¤ µ¨¢ ¥ Û±ì
 þ¢ Ö õ ý °  ¤
´¨ ¤Âì î ´¨ ýþ¤ ñÏ
d
k = middle = i+j 2
middle, right, lef t Âþ¢Öõ k, j, i Àî Âê
ˆ ˆj, ˆi þ¢ Ö õ ø d,
À û¢ ¤ ´ ¨ ß Ø Þ õ ´ ó ø¢
.Ýþ Âð üõ ÂÑ÷ ¤¢ ÀþÀ ýþ¤ Âþ ¥ ñÏ ø
if
¤ µ ¨¢ ¥
right, left
• temp ≥ A[middle] ⇒ ˆi = k+ 1, ˆj = j, dˆ = ˆj −ˆi+ 1 = j −k = j −( i+j 2 )= j−i j−i+1 < = d ⇒ dˆ < d 2
2
2
2
j−i • else ⇒ ˆj = k − 1, ˆi = i, dˆ = ˆj − ˆi + 1 = k − 1 − i + 1 = i+j 2 −i = 2 < j−i+1 = d ⇒ dˆ < d
2
2
2
.¢¢Âð üõ ÓÊ÷ þ¤ ñÏ ¤ Âû ¤¢ Å
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
42
: Ýþ ¤¢ ø ¡ ¯Âª ý ñ
i≥j ⇒j −i≤0⇒j −i+1≤1⇒d≤1 d0 = n d1 < d20 = n2 d2 < d21 = n4 · · · dk ≤ 1 ⇒ 2nk ≤ 1 ⇒ n ≤ 2k ⇒ logn2 ≤ k ⇒ k = dlogn2 e ⇒ O (logn2 )
üþ öÂî
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 > lef t; j − −) swap(A[j-1],A[j]); } } worst case
•
n− P1 i=1
insertion sort
O(n2 )
Binary insertion sort
O(n2 )
i+1
blog2 c =
n P
•
n P
i=2
i
blog2 c ∈ O
average case O(n2 )
O(n2 ) O(nlog n)
blog2 c ' (n + 1)blog2
c+2
blog(n+1)c+1
or
O(n2 )
: ´ó ßþ µú Ãó÷
n+1
i
i=2
∈ O(nlogn)
best case
n P
i=2
i
log2
∈O
Rn
x 2 log2 dx ∈ O(nlogn)
+2
ý¥¨ °Âõ ýû ݵþ ¤Úó .5.2
43
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 ° Â ß Þ û ø ¢Â þÁ ü Þ ÷ ¤ ¬ ü þ ¹ ø ùÀ ª Æ þ Ö õ ´ ó ß þ ¤¢ î Ý þ¢Â ð ü õ ¤ ¡ Ý µ þ ¤ Ú ó ¥ ø ¢ ª ü õ  µ Þ î × þ ¥ Ü ¬ ê Ø þ . ´¨ ùÀõ ¤¢ ùÀª °Âõ ¤ ¬ þ¤
.2 ÛÊê
üµÈð¥ ýû ݵþ ¤ Úó
44
Len=8=gap 2 |
7 |
4 {z |
8 {z
|
5 }
{z
6 }
1
{z
gap=4
10
}
}
10 2 7 4 6 1 8 5 | {z } | {z } | {z } | {z } | {z } | {z } | {z } | {z } | {z } | {z } | {z } | {z }
gap=2
8 1 6 2 7 4 5 10 |{z} |{z} 6|{z} |{z} 2 4 7|{z} |{z} |{z} 8 |{z} 5 4 6 |{z} 7 |{z} 5 6 5
gap=1
1
2
4
5
6
7
8
. ¢È÷  ôø¢
shell-sort
10
gap= 21
while
î ´¨ üõÚû öõ¥ ßþ µú
best case
worst case
n log n
n1.5
üÞ÷ ýÀ÷ ´Æó ¤ Ýµþ ¤ Úó ßþ.À÷¤¢ üÚµÆ
average case n1.25
gap
ùÀõ ´¨À ¢Àä . ¢Þ÷ ý¥¨ ù¢ ö
ý¥¨ °Âõ ýû ݵþ ¤Úó .5.2
45
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++)
m− P1
for(int k=buckets[j];k>0;- - k)
//
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 ݵþ ¤Úó ý û ù¢¢ ý¥ ¨ °  õ ýÂ î ´ ¨
Bucket-Sort
9.5.2
¥ Â Ú þ¢ ü ä ÷ Ý µ þ ¤ Ú ó ß þ
. ´¨ °¨õ,À÷ùÀª âìø
[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
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
B
A 1 .78 2 .17 3 .39 4 .26 5 .72 6 .94 7 .21 8 .12 9 .23 10 .68
46
0
- .17 - .23
- .12 - .21 - .39 - .68 - .72
- .26
- .78
- .94
9
Bin Sort ݵþ ¤Úó for(int i=0;i<m;i++)
10.5.2
//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)
¥ ݵþ ¤ Úó ßþ ý öõ¥
Àþ ݪ µª¢ Ýû ý ¤ÂØ Â¬ä Ýû¿ Âð, Àª À÷ üÞ÷ ý ¤ÂØ Â¬ä . Ýþ ÂÚ ÂÑ÷ ¤¢ ýÀ÷ ´Æó ×þ þ¤ ý÷¡ Âû ýÂ
a:
3 7 2 8 1
bin:
-1 1 2 3 -1 -1 -1 7 8
a:
1 2 3 7 8
ý¥¨ °Âõ ýû ݵþ ¤Úó .5.2
47
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 ;
.Àª üõ ¥÷ ÆþÖõ ¢Àã
log n!
θ(n + k)
¥ ݵþ ¤ Úó ßþ ý öõ¥
Ûì À ÆþÖõ üµ±õ ý¥¨ °Âõ ݵþ ¤ Úó Âû : µØ÷
dlog n!e
. ¢¤¢ ¥÷ ÆþÖõ
ÛìÀ ´ó ßþ ÂÀ ¤¢. ¢¤¢
dlog n!e ∈ Ω(n log n) ß þ õ ,À ª ü õ
θ(n log n)¥
´ ó ß þ  À ¤¢ ý¢ø ¤ ø á ÷ ¥ Û Ö µ Æ õ Å
.¢ÂþÁ³ ¤ ¬ Ã÷
θ(n log n)¥ µÞî ü÷õ¥
¤¢ À÷ üõ ݵþ ¤ Úó
Radix sort ݵþ ¤Úó stable á÷
12.5.2
¥ ݵþ ¤ Úó ßþ.¢ÂþÁ üÞ÷ ¤ ¬ ý ÆþÖõ ¬ä ß Ýµþ ¤ Úó ßþ ¤¢
¬ä ų¨. ÝþÞ÷ üõ °Âõ öØþ °Â ¤ ¬ä Àµ ©ø ¤ ßþ¤¢ .´¨
sort
üõ °Âõ öÚû¢ °Â ¤ ¬ä ñ . ÝþÞ÷ üõ üܬ þ¤ ¢¤ø °Â ¤ Ýû¢ üõ õ¢ °Â ßÞû ø ÝþÞ÷ üõ þ¤ ¢¤ø ø ÝþÞ÷ üõ ´Æó ¢¤ø ø ÝþÞ÷ ·îÀ
α(n)
î Àª üõ
O(nα(n))
¥ ݵþ ¤ Úó ßþ ý öõ¥.¢¢Âð °Âõ þ¤ . ´¨ ¢Àä
n
ß ùÀª ÂûÒ ôì¤ ¢Àã : Àî ´ì¢ Âþ ¥ ñ·õ
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
48
25 13 43 124 313 513 5 1 999 96 205 0 1 - 531 - 1 2 3 - 13 - 43 - 313 4 - 124 5 - 25 - 5 - 205 6 - 96 7 8 9 - 999
. ÝþÞ÷ üõ üܬ þ¤ ¢¤ø Âþ ¥ °Â ¤ ¬ä ñ
531,1,13,43,313,24,25,5,205,96,999 . Ýþ ¥¢Â üõ ý¥¨ °Âõ ýõ¢ ø
üµÈ𥠢ãõ ( ö¢Âî Û) ö¢Âî Trace ÛÞä •
6.2
T, (n) = T ( n5 ) + T ( 710n ) + θ(n) T, (1) = C .Àª üõ
θ(n)
ö Èþ ¤ î Ýþ ¥¨ üõ ´È𥠴¡¤¢ ×þ ¤ Ñõ ßþ ýÂ
θ(n) O( 710n )
O( n5 ) n ) O( 25
O( 750n )
O( 750n )
n O( 49 100 )
¤ ¬ û ´¡¤¢ Âþ ¥ Þû üãþ ´Æ÷ ùÀ÷ø ¤ ßþ ö ¤Öµõ ´¡¤¢ ´¡¤¢ Æ ¤
O
Àþ Àª±÷ ö ¤Öµõ ´¡¤¢ Âð âìõ ßþ ¤¢ .Àþ üÞ÷ ßþ öÆØþ . Ýî
üµÈ𥠢ãõ ( ö¢Âî Û) ö¢Âî TRACE ÛÞä .6.2
49
7 10
i
n ≤ 1 =⇒ n ≤
T (n) ≤
10 7
dlogn10 e X7 i=0
1
53
>
10 =⇒ logn 1 7 53
T (n) ≤
i
=⇒ logn10 ≤ i =⇒ i = dlogn10 e =⇒ 7
9 10
i
n=
7
1−
9 10
logn10 +1 7
9 1 − 10
> logn10 =⇒ 3 logn5 > logn10 =⇒ 7
dlogn10 e X7 i=0
9 10
i
7
n≤
3X logn 5 i=0
9 10
i
n
.Àî Û ¤ Âþ ¥ üµÈð¥ ó¢ãõ
• T (n) = T ( n3 ) + T ( 23n ) + θ(n)
θ(n) θ( 23n )
θ( n3 ) θ( n9 )
i
2 3
θ( 29n )
n ≤ 1 =⇒ n ≤
θ( 29n )
i
3 2
m l =⇒ logn3 ≤ 1 =⇒ i = logn3 2
l =⇒ T (n) ≤
θ( 49n )
logn3 X2 i=0
2
m n ≤ O(n logn3 ) 2
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
50
Catalan Number öî ¢Àä  ý¤Áð
7.2
:1 ùÂð n üþø¢ø¢ öµ¡¤¢ ¢Àã ±¨½õ
¹ þ ¤¢.¢¤À ÷ ý ¤ ø¢ þ ì Ïø ´ ¨ À ± Þ û î , ¨ü ´ ¨ ü êÂ ð ´ ¡¤¢ × þ . Ýî üõ ü¨¤  ¤ ¤¢ Èþ ¤ üþø¢ø¢ öµ¡¤¢
Ýþ ùÀÈî ùÂþ¢ ö¤ ø¢ î ü¨¤ ú÷¤¢ î Ý üõ üþø¢ø¢ ´¡¤¢ø¢ 1 Ûت ¤¢ ( ¡ª ô÷ ) ñþø¢Â·îÀ §¤ Âû ¥ Øþ Ûó¢ ¤ úµ¡¤¢ ßþ.´¨ Èþ ¤ éÂãõ .Àõ÷ üõ üþø¢ø¢,À÷ùÀª ݨ¤ ßþ ´Þ¨
¥ î ü³ ¡ª îãõ ßþÀÀ÷ °Âõ,¤¢ Èþ ¤ üþø¢ø¢ öµ¡¤¢ ßþ «Ê¿ ÂÑ÷ ¤¢ Àþüõ ßþ §¤ öÞû¥ îüµ¨¤ ¡ª ¥ øÔµõÀþüõ ßþ §¤ ß Ø Þ õ ¤¢ È þ ¤ °  õ ü þø¢ø¢ ´ ¡¤¢ ¸ ,§¤ ¨ ¢ ø ´ ó ¤¢.¢ ª ü õ µ ê ð ×þ ý¤¢Â¡ üþø¢ø¢ ´¡¤¢ ¤ú,Àª±÷ Ýúõ °ÂÂð) ùÀª ù¢¢ öÈ÷ ø¢ Ûت¤¢ (.À÷¤µ¡¨
0,§¤ n ¯ Âõ ¤¢ Èþ ¤ °Âõ üþø¢ø¢ öµ¡¤¢ ¢Àã,bn ©¤Þªõ éÀû ´ ¨¢ ý À ª ´ ¨¢ ¤¢ 0 ≤ i ≤ n ý¥ bi  þ¢ Ö õ Ø þ  ê . ´ ¨ n≥
Âþ ¥ ¨ Ûت Û·õ î Ýî üõ ø ¿µ÷ Èþ ¤ öä ¤ ü¨¤,bn+1 ö¢¤ ø Èþ ¤ °Âõ üþø¢ø¢)ýúµ¡¤¢ Àþ üõ ßþ Èþ ¤ ´¨¤ ø ² ¥ î üþû¤µ¡¨  þ ¥ ¤  µ Ø î ý ú µ ¡¤¢ ß þ.´ ¨
n ú ÷
ý ú ¨¤ ¢À ã î À µ Æ û ý  µ Ø î (¤¢
üú ´¡¤¢ Âþ ¥,ßØÞõ ýúµ¡¤¢Âþ ¥ ßþ ÜÞ ¥.Àõ÷ üõ ø ÂÔõ ´¡¤¢ ýúµ¡¤¢
b0 = 1 Ýþ ¤¢
ö ýÂ î ´¨
ýÀóÞþ Âð µÆÆð ®þ ¤ µî ¥ µêÂð ±
1
CATALAN NUMBER öî ¢Àä  ý¤Áð .7.2
51
1 Ûت
1
2
4
3
5
2 Ûت
3 Ûت
ýÀ Ö±Ï ´¡¤¢ Âþ ¥ ø¢ ßþ ¤¢ ö üõ ¤ §¤
n
÷Ú î Ýî üõ ü¨¤  ×þ .¢Âî
îÀû¢ üõ ¹µ÷ Âõ ßþ.´¨¤ ´Þ¨ ¤¢ §¤
n,¢¤¢¤Âì ²
´Þ¨ ¤¢ §¤
0 (1)
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
52
.À÷b0 bn ÂÂÀ÷ª üõ ù¢ÂÞª ´ ¡¤¢
b1 bn−1
î,´ ¨¤ ´ Þ ¨¤¢ §¤
bn+1 ¤¢
n − 1,¢¤¢
.Àû¢ üõ ´¨¢ §¤
î üþû¤µ¡¨Âþ ¥ Þû
¤Â ì ² ´ Þ ¨ ¤¢ §¤
n + 1,¤¢
1 (2)
Èþ ¤ °Âõ üþø¢ . . .
´ ó ß þ ¤¢ î À ÷¤¢ ¤Â ì ´ ¨¤ ´ Þ ¨ ¤¢ §¤
n − i,² ´ Þ ¨ ¤¢
§¤
bi bn−i
ÂÂ
.´¨
i (i+1) bn+1
. . .
¤ ¬ ßþ ¤¢,´Æ÷ ´¨¤ ´Þ¨¤¢ ü¨¤ ºû ø ´¨ ² ´Þ¨ ¤¢ §¤ . ´¨úµ¡¤¢ ¥
bn b0
n (n+1)
ÂÂ
bn+1
n ≥ 0Âþ¢Öõ Þû ý¥ ,ßþÂ
bn+1 = b0 bn + b1 bn−1 + b2 bn−2 + · · · + bn−1 b1 + bn b0 ø
∞ X n=0
bn+1 xn+1 =
ùÚ÷ , Àª
∞ X
(b0 bn + b1 bn−1 + · · · + bn−1 b1 + bn b0 )xn+1
(1)
n=0
a0 , a1 , a2 , · · ·
ó±÷¢ ý Àóaõ â üãþ , ©¢¡
f (x) =
∞ P
i=0
a0 , a1 , · · ·
ai xi
Âð î Ý÷¢ üõ
ó±÷¢ Ç» ,
[f (x)]2
a0 a0 , a0 a1 + a1 a0 , a0 a2 + a1 a1 + a2 a0 , · · ·
, a0 an + a1 an−1 + a2 an−2 + · · · + an−1 a1 + an a0
b0 , b1 , b2 , · · ·
À aó õ â
f (x) =
∞ P
n=0
bn xn À î Â ê
× þ .À î ü õ À ó ¤
¤ ¬ ¤
(f (x) − b0 ) = x
∞ X n=0
(1)
ó¢ãõ .´¨
(b0 bn + b1 bn−1 + · · · + bn b0 )xn = x[f (x)]2
CATALAN NUMBER öî ¢Àä  ý¤Áð .7.2
53
. ÝÆþ÷ üõ
: À÷¨¤ üõ Âþ ¥ ôø¢ ¤¢ ó¢ãõ ¤ õ ó¢ãõ ßþ
x[f (x)]2 − f (x) + 1 = 0 Å
[1 ±
f (x) =
1 − 4x = (1 − 4x)1/2 = 1/2 0
p
+
√
1 − 4x] (2x)
1/2 1
: ´¨ ÂÂ
(−4)n
1/2 n
= = = = =
õ a
1/2 (−4x)2 + · · · (−4x) +
2
n ≥ 1, xn
°þ ® ö ¤¢ î
(1/2)((1/2) − 1)((1/2) − 2) · · · ((1/2) − n + 1) (−4)n n! (1/2)(1/2)(3/2) · · · ((2n − 3)/2) (−4)n (−1)n−1 n! (−1)2n (1)(3) · · · (2n − 3) n! (−1)2n (n!)(1)(3) · · · (2n − 3)(2n − 1) (n!)(n!)(2n − 1) (−1) (−1)(2)(4) · · · (2n)(1)(3) · · · (2n − 1) 2n = (2n − 1)(n!)(n!) (2n − 1) n
ý üÔõ ý Âþ¢Öõ , ¤ ¬ ßþ Âè ¤¢ ; Ýî üõ ¿µ÷ ¤ üÔõ ñØþ¢¤
f (x)¤¢
Å ; Ýî üõ À û
"
"
∞ X 1 2n 1 f (x) = 1− 1− 2x (2n − 1) n n=1
¤¢
xn+1
∞ X n=1
°þ ® ÓÊ÷ ,
1
(2n − 1)
2n n
xn
f (x)
## xn
¤¢
xn
°þ ®,
bn
ø
bn
üµÈð¥ ýû ݵþ ¤ Úó
.2 ÛÊê
54
î üÞÆì ,´¨
bn =
1 1 2 2(n + 1) − 1
(1894 − 1814)
2(n + 1) (n + 1)
=
1 (2n)! = (n + 1)!(n!) (n + 1)
ö î ö¦ ¤ ø ü Ø þÄ Ü öÀ ® þ ¤ Æ õ î ¤
bn
2n
n
¢À ä
Û ¡¢ ý ú û¤ ¢À ã ß ã ¤¢ ¤ ú ÷ ö î .À õ ÷ ü õ ö î ¢À ä , À ÷ ö î ñø ¢À ä ´ Ô û . ´ ¨ ù¢Â ¤ î .ÀµÆû
b6 = 132
ø
x1 x2 x3 · · · xn
¤ ± ä ß µ ªÁ ðà µ ÷Â
b5 = 42, b4 = 14, b3 = 5, b2 = 2, b1 = 1, b0 = 1
3 ÛÊê ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ û
û ù¢¢ öÞµ¡¨ ¥ ü¡Â .3 ù ¡£ Ñ ê ¥ ü µ Þ Æ ì ¤¢ ü µ Æ þ ü ä
Ï ÷ ð  û î ü þ ¹ ÷ ¥ üÔܵ¿õ ñت Ñê ¤¢ À÷ üõ, ÀµÆ÷ á÷ ×þ ¥ û ù¢¢ fõø Ãó Øþ ø ¢¢Âð ýù¢¢ Âû ùø
ä ø .À÷ª üÈîø üÔܵ¿õ ñت ß»Þû ø À÷ª ù¡£ . Àû¢ «Êµ¡ ¢¡ ¤ Ñê ¥ üøÔµõ ñÏ ´¨ ßØÞõ ö üð¤ à öÃõ ü ê ã õ ¤ Ó Ü µ ¿ õ á ÷ Ý þ ¤¢ î ýù¢¢ ¤ µ ¡ ¨ Ý µ Æ û ¤ ± ¹ õ ß þ °îÂõ ø ù¢¨ ýù¢¢ á÷ Ûت ø¢ Ý÷ üõ ¤ ýù¢¢ á÷ üÜî¤ Ï . ÝþÞ÷ . ÝþÞ÷ ýÀ µ¨¢ üÆþ÷ õ÷  ýû ö ¥ î ÀµÆû üþû ù¢¢ á÷ üÞ þ ù¢¨ ý ù¢¢ á÷ .ùÂè ø
char, bool ,int:À÷õ ,Àû¢ üõ
¤Âì  ¤î ¤µ¡ ¤¢ ø ù¢Þ÷ Óþ Âã ¤ ö÷
õ÷ ¤ ö÷ ¤î ¢¡ ø ¢ª üõ µ¡¨ Åþ÷ õ÷ ͨ °îÂõ ýù¢¢ á÷ . ùÂè ø ,
struct , union
: À÷õ.Àî üõ üêÂãõ
f Ö Î õ ý û Ñ ê ¥ ý¢À ã ¥ î ´ ¨ ù¢¢ ö Þ µ ¡ ¨ á ÷ ß þ  ù¢ ¨ : þ¤ :ÀµÆû öÆØþ ñÏ ø á÷ ÂÑ÷ ¥ î Àî üõ ù¢Ôµ¨ Ýû ¤ ø¹õ
x : array [’a’..’z’] of integer int x[26];
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
.3 ÛÊê
56
(Sparse array)§¤³¨ þ¤
1.3
ý ¤Áð ¤ÀÖõ ýù½÷ üóø ¢ª ý ¤Áð ¤ÀÖõ ´¨ ¤Âì î Ýþ ¤¢ ý þ¤ Ýî Âê ø À÷ª üÞ÷ ý ¤Áð ¤ÀÖõ þ¤ ýû ÷¡ ôÞ f õø Ãó üãþ , ´¨ §¤³¨ Ûت ý ¤Áð ¤ÀÖõ ¤ Ñõ ßþ ý .À÷ª üõ ý ¤Áð¤ÀÖõ «¡ ýû÷¡ ¥ ü¡Â ÍÖê ´Æ÷ ¤Âì ø ´¨ ï¤ Ã þ¤ ñÏ ö , ´Æ÷ üÖÎõ ÂÔ¬ ¤ÀÖõ þ¤ ö¢Âî þ¤ ø¢ ¥ Ý þ ¤ ÷ ¤ Ñ õ ß þ ý . À ÷ ª ü È îø ùÀ þ ¤¢ þ¤ ý û ÷ ¡ ô Þ û þ¤ ßþ ¯±¤ µú í¤¢ ýÂ. ÝþÞ÷ ù¢Ôµ¨ üܬ ýþ¤ ñÏ Ýû üØÞî :Àî ´ì¢ Âþ ¥ ñ·õ
1
2 3
T
2
1
T üãþ
4
6
7
8 13
5
6
8
7
j
3
b
5
11
1 29 U 3 8 2 4 ?
a
,
4
3
z 1
3
2
4
5
6
7
üܬ ýþ¤ ý ¤Áð ¤ÀÖõ ¤ Âû ¤¢. Ýî üõ ÂÔ¬ ¤
Ýû¢ üõ ¤Âì
T
¥ ý ÷¡ ÅþÀ÷  ¤
ßþ . Ýû¢ üõ ¤Âì
ctr
ÂÂ ¤
b[
a[ctr] ø
8
ctr Âçµõ ¤ÀÖõ Àµ
Ýî üõ ê®
ctr
Àø ×þ
ÅþÀ÷] ß»Þû ø ´¨ ùÀª ý ¤Áð¤ÀÖõ î .¢ÂþÁ üõ ô¹÷ ý ¤Áð¤ÀÖõ °Â
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
üþø¢ø¢ ´¡¤¢
57
. ´¨ ÂÔ¬ ý ¤Áð¤ÀÖõ õ ¤
T
ô
8
ctr
.2.3
î ´¨ ¼®ø ݪ ù¢ÂØ÷ üû¢ §¤¢ ýà Âð
ý÷¡ Û±ì ýû þ¤ ¤¢ Ý÷À Ýû¡ üõ ñ·õ öä . ÷ þ Ýþ ù¢Âî
b[8]=2
,
1≤ b[8]≤ 3 ⇒
a[b[8]]=a[2]=8 ⇒
ݪ ù¢Âî üû¢ ¤ÀÖõ õ ¤ ÷¡ ßþ ´¨ ßØÞõ
Ýþ ù¢Âî üû¢ ¤ÀÖõ õ ¤ ÷¡ ßþ
üþø¢ø¢ ´¡¤¢
2.3
.¢¤¢ À÷¥ Âê ø¢ ·îÀ öùÂð Âû î ´¨ ý ¤¢ Èþ ¤ ´¡¤¢ üþø¢ø¢ ´¡¤¢ .Àµê üõ ëÔ ÂÔ¬ ¼Î¨ ¤¢ ö ýúð ôÞ î ´¨ ý Âþ ´¡¤¢ ×þ : ´¡¤¢ ×þ áÔ¤ . ´¨ ï ùÂð ö ¥ ÂÆõ ßþ µð¤ à ñÏ : ´¡¤¢ ¥ ùÂð ×þ áÔ¤ .´¨ Èþ ¤ áÔ¤ , ´¡ ¤¢ ý ³¨ ýúóþ ¢Àã ) Èþ ¤ ùÂð ö Ü¬ê ¥ ´Æ¤±ä :
(Depth)ùÂð
×þ ÕÞä
. (ùÂð ö ùÀª ö á Ô ¤ Û ® Ô ´ ¨   ù ð ö ¼ Î ¨ ù ð  û ý :(Level)ù ð × þ ¼ Î ¨ .ùÂð ö ÕÞä ¥ ´¡¤¢ : ñ·õ
ø¢ ͨ
a
ÂÔ¬ áÔ¤
N ×þ áÔ¤
b
c
d
ùÂð
áÔ¤
ÕÞä
ͨ
a b c d e f
2 1 0 0 0 0
0 1 2 2 2 1
2 1 0 0 0 1
f
e
ø¢ ý¤¢f Ö ì¢ ö ü Ü ¡¢ ý û ù ð ô Þ ù ð ýû ùÂð ÕÞä áÞ¹õ
I(T)
×þ ͨ
ÂÔ¬ ͨ
n
ü þø¢ø¢ ´ ¡¤¢ × þ ¤¢ :ñ · õ
ø ´¡¤¢ ýû ï ÕÞä áÞ¹õ
E(T).Àª üõÀ÷¥ Âê
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
ö üµÈð¥ Τ ùÚ÷ Àª
.3 ÛÊê
T(n)= E(T)-I(T)Âð
58
.Àª üõ ´¡¤¢ ßþ üÜ¡¢ ? ´¨ ôÀî
6
6
h h+1 ? ? T(n+2)
T(n)
E(T ) = E(T 0 ) − h + h + 1 + h + 1 I(T ) = I(T 0 ) + h ⇒ E(T ) − I(T ) = E(T 0 ) − I(T 0 ) + 2 ⇒ T (n + 2) = T (n) + 2 ø¢ f Ö ì¢ þ À ÷¥ Â ê º û ö ù ð  û î ´ ¨ ü þø¢ø¢ ´ ¡¤¢ : Û õ î ü þø¢ø¢ ´ ¡¤¢ .¢¤¢ À÷¥ Âê î Ýõ÷ üõ ü¨¨ Ûõî ´¡¤¢ ¤ üþø¢ø¢ ´¡¤¢ : ü¨¨ Ûõî üþø¢ø¢ ´¡¤¢ ) × þ ¼ Î ¨ ¥ ü þ ûù ð Â Ú õÀ ª À ÷¥  ê ø¢ ý¤¢ f Ö ì¢ ö ü Ü ¡¢ ý û ù ð ô Þ üµÆþ À÷¥ Âê ö Àª µª¢À÷¥ Âê ×þ ¼Î¨ ßþ¤¢ ýùÂð Âð .(¡ üØþ ¼Î¨ À÷ùÀõ ö ² ´Þ¨ ¤¢ î ö ¼Î¨ Ýû ýû ùÂð ôÞ ùø
ä ø Àª ²À÷¥ Âê ¤Âì ´¨¤ ´Þ¨ ¤¢ î ö ¼Î¨ Ýû ýû ùÂð ôÞ ø Àª µª¢ À÷¥ Âê ø¢ Àþ fÖì¢ Ýû ôÞ Àª µªÀ÷ À÷¥ Âê ý ùÂð Âð ß»Þû ,Àª µªÀ÷ À÷¥ Âê üµÆþ À÷µêÂð ¼Î¨ ¤¢ û ï ôÞ ´¡¤¢ ßþ¤¢ .Àª À÷¥ Âê öøÀ Àþ ö ´¨¤ ýû ü½Î¨ . ´¨ ö¥µõ ÈÞû ´¡¤¢ Å Àû¢ üõ ¤ ×þ þ ÂÔ¬ : ü¨¨ Ûõî üþø¢ø¢ ´¡¤¢ ¥ ý ÂÚþ¢ Óþ Âã ø Ýþ ÂÚ ÂÑ÷ ¤¢ û ï éÂÏ Èþ ¤ ¥ ü®Âê ¤ Ï ¤  üþø¢ø¢ ´¡¤¢ ×þ Âð ¥ Â ð , Ý û¢ ´ ± Æ ÷ ù ð  û ¤ ý¢ ã ¬ ý û ù¤ Þ ª ´ ¨¤ ² ¥ ¼ Î ¨Â û ¤¢
MAX HEAP ´¡¤¢
59
.3.3
ü¨¨ Ûõî ¤ Àþ üõ ´¨¢ î üµ¡¤¢ , Ýî éÁ ¤ û ùÂð Àã ý ù¤Þª .Àþð
Àã 6 ¥ éÁ
-
1
2
3
2 4 8
1
5 ü¨¨ Ûõî üþø¢ø¢ ´¡¤¢
15
13 14
11 12
9 10
4
7
6
5
3
. ´¨ ü¨¨ Ûõî üþø¢ø¢ ´¡¤¢ ,Ûõî üþø¢ø¢ ´¡¤¢ ¥ ¤ Ñõ °µî ü¡Â ¤¢
max heap ´¡¤¢
3.3
°Æ î ù¢¤ ¡ °Æ ý¢Àä ö ùÂð Âû î ´¨ ü¨¨ Ûõî üþø¢ø¢ ´¡¤¢ ÀÜî üóø ´Æ÷ ¢Âê Âʽõ °ÆÂ). ´Æ÷ µØî Ç÷À÷¥ Âê °Æ ¥ ¤À . ´¨ þ¤
heap
ý¥¨ ù¢ ý ù¢¢ öÞµ¡¨ ßþ µú (. ´¨ ¢Âê Âʽõ
ÝÞþ Ãîõ ÂÊäÈÞû .ÀµÆû
2i , 2i+1
,Ã÷ ÝÞõ ÂÊä ö¢Âî À . ´¨
ýû ÷¡ ¤¢ ô
θ(1)¥
i
ÂÊä öÀ÷¥ Âê î ý ¤ Ï
ÝÞþ Ãîõ ö¢Âî À Å , ´¨ þ¤ ¨ .¢Âî × ¤ û ï Àþ ú ö
1 · · · b n2 c
n
b c + 1···n | 2 {z } dn 2e
. (´¨
sift-up
Ü Þ ä.À µ Æû
d n2 e û ÆþÖõ ¢Àã)
sift-downø (perculate)sift-up, heap
¤¢ Ý ú õ Ü Þ ä ø¢
ý¢À ä  µ Þ î ý¢À ä ¥ ù ð × þ ° Æ Â î ¢Â ð ü õ ¤ ¬ ø ´ ¨ ô¥ ü ÷ õ¥ µÞî ý¢Àä ßþ ÃÚþ ÂµÈ ý¢Àä î ü÷õ¥
sift-down
ÜÞäøÀþ Âç ÂµÈ .¢¢Âð
.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 sif t − 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
ýû ùÂð ¢Àã Àî Âê
h h+1 20 + 21 +....+2h−1 < n ≤ 20 + 21 +....+2h ⇒ 22−−11 < n ≤ 2 2−1−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 )
¥Ýµþ ¤ Úó öõ¥ Å
MAX HEAP ´¡¤¢
61
.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 here} k←i repeat j←k if ((j>1) && ( T[ 2j ] < T[k]) ) k← 2j exchange T[j] and T[k] until j=k;
//O(log n)
........................................................ f unction f ind − 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 root} T[1]←T[n] sift-Down(T[1..n-1],1)
//O(log n)
ÛÞä ø ¢Âð üõ ¤Âì ÂÊä ßóø ý ÂÊä ßþ ¡ .´¨ üÖÎõ éÁ, éÁ .¢ª üõ ô¹÷
sift-Down
procedure insert − N ode(T[1..n],v) T[n+1] ← v percolate(T[1..n+1],n+1)
{O(lg n)}
:
heap ´¡¤¢
P rocedure slow − M akeHeap(T[1..n]) {this procedure makes the array T[1..n] into a heap} for i ← 2 to n do percolate(T[1..n],i)
// O(n log n)
´¡¨
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
.3 ÛÊê
62
P rocedure M akeHeap(T[1..n]) For i ← b n2 c DownTo 1 Do SiftDown(T, i)
Heap
À ÷ ü õ
O(n)
± Â õ
//O(n)
n
ñ Ï ù ¿ ó¢ þ¤ × þ ¥ Ý µ þ ¤ Ú ó : Ì ì .¢¥Æ : öûÂ
r+1 ·îÀ ®ø r ¼Î¨ ¤¢
ùÂð ×þ ýÂ
SiftDown
ݵþ ¤ Úó ¤¢
´¡¤¢ ßþ áÔ¤ Âð ñ (.©¢¡ Ýû ¤ ×þ ø Àþüõ ßþ ¤  þ ¥ ñ õÂ ê ¥ ô¥ ý û ´ îÂ Û î ¢À ã Ý þ Â Ú Â Ñ ÷ ¤¢ ¤
Repeat ÖÜ
r) ¢¤¢ n
K = blog2 c
Ç¡Â ¤
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 + . . .) ⇒ ∞ P t < −2k + 2k+1 n( 12 )n < −2k + 2k+1 × 2 ⇒ t < 2k (22 − 1) ⇒ n=1
⇒ t < 3 × 2k ⇒ t < 3n ⇒ t ∈ O(n)
K = blogn2 c ⇒ 2k ' n
1 2 1−x = 1 + x + x + . . . x ⇒ (1−x) 2
⇒
∞ P
n=1
1 2 ⇒ (1−x) 2 = 1 + 2x + 3x + . . . ∞ P x = x + 2x2 + 3x3 + . . . ⇒ (1−x) nxn 2 = n=1
n( 12 )n =
1 2 (1− 12 )2
=2
( ýÜÞø¢ ²û) Binomial Heap .´¨ ýÜÞø¢ ýû ´¡¤¢ ¥ ÛÚ ×þ
4.3
Binomial Heap ×þ
ùÂð n2 ýÂÚþ¢ø ùÂð n1 üØþ î. Ýþ ¤¢ ¥÷ heap ø¢ ôè¢ heap ×þ ßµ¡¨ ý : ) (.Àª üõ O(n1 + n2 ) heap ø¢ ßþ ôè¢ öõ¥.¢¤¢
( ýÜÞø¢ ²û) BINOMIAL HEAP .4.3
63
( ý ÜÞø¢ ´¡¤¢ )Binomial Tree ¢¡
Bn−1
1.4.3
Èþ ¤ á÷ ßþ ¤¢.¢ª üõ Óþ Âã üµÈ𥠤 ¬ ´¡¤¢ á÷ ßþ .Àî üõ ê® ´¨¤ À÷¥ Âê öä ¤
1
1
1
1
1
2
3
1
3
Bn−1
1 B1
B0
Bn =
.´¨
(x + y)n
B2
B3
n=0
. ÝþÞ÷
Bn−1 ¢¡ Bn−1
üõ ê® ¤
ÍÆ °þ® Âþ ¥ ;¢ª üõ ùÀõ÷ ýÜÞø¢ ´¡¤¢,´¡¤¢ ßþ
2n ´¨  Bn ýû ùÂð ¢Àã
•
2n−1 ´¨  Bn ýû ï¢Àã
•
2n−1  Bn üÜ¡¢ ýû ùÂð¢Àã
•
.
.
. ´¨
À÷¤À÷ üìÂê ÕÞä þ ¼Î¨) .
kn
´¨ ÂÂ ô
k
¼Î¨ ¤¢
Bn
ýû ùÂð ¢Àã
•
( ´¨ ö ¤Öµõ ´¡¤¢ Âþ ¥
. ´¨ ÂµÈ ÂÚþ¢ ýûùÂðÞû ¥ ùÂð ßþ ¤¢ , ´¨
nÃ÷ Bn
Èþ ¤ ¤¢
Max Binomial Tree
•
2.4.3
¤À ù b  ð ¢À ä î,À ª ù¢¤ ¡ ° Æ Â ý¢À ä ý Ü Þ ø¢ ´ ¡¤¢ × þ ù ð  û  ð .Àþð
Max Binamial Tree ×þ
¤ öÀª±÷ Ç÷À÷¥ Âê ¥ µØî
.3 ÛÊê
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
64
The Merge Of Max Binomial Trees ù½÷. Àû¢ üõ ¤
Bn+1 ,Max Binomial Tree Bn0
ø
3.4.3
Max Binomial Tree Bn
ö È þ ¤ ° Æ Â ¢À ä î ü µ ¡¤¢ , ´ ¡¤¢ ø¢  û ß î ´ ¨ ü Ü Ø ª
ø¢
merge
.Àª Àû¡ ÂÚþ¢ ´¡¤¢ ´¨¤ À÷¥ Âê ´¨ µØî .´¨ ´¨¤ À÷¥ Âê
min
ÂÊä ø ¢¤¢ ¢ø ÆþÖõ ÍÖê . ´¨
θ(1)¥ merge ÛÞä
:ÀþõÂê ´ì¢ Âþ ¥ ñ·õ
9
8 7
6 3
7
2 1
4
6
+ 3
4
2
2
.5
1
9 7 ⇒
6 4
4 3
8 2 1
7
2
6 3
1
2 .5
Binomial Heap . ´¨û
Binomial Tree ¥
ý äÞ¹õ
4.4.3
H ,Binomial Heap ×þ
( ýÜÞø¢ ²û) BINOMIAL HEAP .4.3
65
Binomial-Heap Head[H] - 10
- 1
- 6
12
25
8 11
18
14 17
29
38
27
¤ Âþ ¥ «¡ î ÀþÞ÷ üõ ùÀûÈõ ¤
Min Binomial Heap
×þ Ûت ¤¢ :¢¤¢
üãþ ,´¨¤¢ ¤ ÝÞõ
Heap
´¡¤¢ ×þ «¡
1 .´¨ ¢¤¢ ¢ ø ,n
H
¤¢
Binomial Tree
Binomial Heap
×þ
k
Binomial Tree Âû
©¤À ÀÜî ýøÆõ µð¤ Ã
Node
k
Binomial Tree ,blg nc + 1
ö ý ¤¢ î
¥ ·îÀ
Min Binomial Heap ýø ¤ Â ÜÞä
.¢¤À÷ ýÌä ºû ø ´¨ üó¡ î ¢¥¨ üõ
.Àî üõ ê®
ÀÜî ßþ µÞî î À÷¢Âð üõÂ
H
Âû ÀÜî
ü Ô õ ÷ ¼ ½ ¬ ¢À ä  û ý .2
× þ î ´ ¨ ã õ ß þÀ ´ ¬ ¡ ß þ .´ ¨ .ùÀª ÛØÈ
.1
H
Heap ´¡¤¢
´¡¤¢ ¤
´¡¤¢ ¥ ý
Node
ý Âð ù¤ª :
5.4.3
Make-Heap() •
×þ :
x , Node
Node
:
Insert(H, x) •
Minimum(H) • .Àª µª¢ ¤
Delete
¤ À ª µ ª¢ ¤ ¤À Ö õ ß þ  µ Þ î î
Heap
¥ ýNode :
.À÷¢Âð üõ ¤
Extract-Min(H) •
Node
¢¡ ø Àî üõ
¤¬ Ýû ø ¢Þ÷ Óþ Âã ÝÞõ Heap ¤ ¬ ö üõ Ýû ¤û Heap Àª µª¢
1
.¢¤À÷ ü÷À øÔ û ö ýø ¤  ÜÞä ¤ ¬ Âû ¤¢ ÝÞþ Ãîõ Heap
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
ý û
Node
.3 ÛÊê
66
Þ û Û õ ª î À ÷¢Â ð ü õ ¤ ýHeap ´ ¡¤¢ : .¢Â±õ ß ¥ ¤
î Àû¢ üõ ¤
k
ÀþÀ ¤ÀÖõ
H
x ,Node
´¡¤¢ ¥
(x > k)
Union(H1 , H2 ) •
H2
ø
H1 ,Heap ýû ´¡¤¢
:
Decrease-Key(H, x, k) •
.´¨ ö üÜ±ì ¤ÀÖõ ¥ µÞî ÀþÀ ¤ÀÖõ ßþ
.Àî üõ éÁ
H
´¡¤¢ ¥ ¤
x ,Node
:
Delete(H, x) •
Max Binomial Heap Èþ ¤ î ;´¨ ÝÞþ Ãîõ ý ÜÞ ø¢ öµ¡¤¢ ¥ üÜÚ
6.4.3
Max Binomial Heap
×þ
ÇÜê ×þ ùø
ä ø ÀÜʵõ Ýû üþû Âð ù¤ª Õþ ÂÏ ¥ û ´¡¤¢ ßþ ôÞ ýû ÛÚ ýû Èþ ¤ Âþ¨ ß ö °Æ ¢Àä î ¢¤¢ ¢ø ´¡¤¢ ¥ ü Èþ ¤ ¢¥ :Âþ ¥ ñ·õ À÷õ.Àª ÝÞþ Ãîõ
4 ........ 9 ..................... 7 3
2
5
6
1
4 5
2
3 2
ü õ ùÀ û È õ ¤
Max Binomial Heap
ø¢
merge
.´¨ Ýî û Èþ ¤ ¢Àã Âþ ¥,´¨
Ü Þ ä ¥ ÷ Þ ÷ × þ  þ ¥ ¤¢
θ(1)¥Ã÷
ݵþ ¤ Úó ßþ öõ¥ .ÀþÞ÷
FIBONACCI HEAP .5.3
67
R 8 ......... 6 4
? 4 .......... 9 ............. 7 3
4 2
3
+
2
2
1
6
5
4 5
1
2
3
1
2
? 8 ......... 9 ............. 7 4 3 ⇒
2
5 1
6 5 2
6
4 4
3
4
3 1
2
2
2 1
.Àî °î ¤ ÀþÀ ø ÝþÀì ý ÂÈØþ¢ ø¢û
Binomial Heap ͨ:
ßþ ÂÞ
FIBONACCI HEAP Fibonacci Tree
5.3 1.5.3
:¢ª üõ Óþ Âã üµÈ𥠤 ¬ ´¡¤¢ á÷ ßþ:Óþ Âã
Fn =
Ýî üõ ê® ´¨¤ ´Þ¨ À÷¥ Âê öä ¤ Fn−2 , Fn−1 Èþ ¤
n=0
n=1
else
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
.3 ÛÊê
.Àî ê® ´¨¤ À÷¥ Âê öä ¤
Fn−2 ,Fn−1
Èþ ¤ ´¡¤¢ á÷ ßþ ¤¢
F2:
F1:
F0:
68
F3 :
F4 :
2.5.3
Max Fibonacci Tree
° Æ Â ¥ ¤À ° Æ Â ø ´ ¨ ° Æ Â ý¤¢ öù ð  û î ´ ¨ ü ÷ ± ê ´ ¡¤¢ .ÀªüÞ÷ µØîû À÷¥ Âê : Ýî ý ¤Áðù¤Þª °Â ßþ ¤ ü÷±ê ý ¨ Âð
f0 = 0 , f1 = 1 , f2 = 1 , f3 = 2, ... ´ ¨   Fn ý û ï ¢À ã ø fn+2 ´ ¨ .
(n ≥ 0) fn
 Â
´¨ ÂÂ
Fn
Fn
ý ûù ð ¢À ã ù Ú ÷
üÜ¡¢ ýûùÂð ¢Àã .
3.5.3
Fibonacci Heap öµ¡¤¢ ßþ ýû Èþ ¤ î ´¨û
fn+1
Fibonacci Tree¥ üÜÚ Fibonacci Heap
×þ
. ÀÜʵõ Ýû ý Âð ù¤ª Õþ ÂÏ ¥
4.5.3
Max Fibonacci Heap Max Binomial Heap ø ´¨
Fi+2
Õ Î õ î ´ ¨
Fi+1
Fi+1
ø
Fi
ß ö¢Âî
´¨¤ À÷¥ Âê öä ¤
Fi
Àþ ú÷ ö¢Âî
Û¬ ø ¢ÂÚõ ¤ ¬
Å .¢Âî ê®
Max Fibonacci Tree
ö µ ¡¤¢ ¥ ü Ü Ú
Merge ÛÞä
üóø ´¨
Merge ¤¢
¹þ ¤¢
2-3 öµ¡¤¢ .6.3
69
ýøÆõ þ µð¤ Ã
Fi+1
Èþ ¤ ¢Àä þ ,Àµê ëÔ ´¨ ßØÞõ ´ó ø¢ ö¢Âî ê® ¥
Û Þ ä × þ À þ ¤ Ê þ Â è ¤¢ þ ø ´ ¨ ùÀ ª ô Þ ¤ î î ´ ¨ üÚµÆ
Fi
öõ¥ Å . ݪ µª¢
Fi
´Þ¨
Fi+1
Fi
È þ ¤ ¢À ä
´¡¤¢ Èþ ¤ ¥
SiftDown
.´¨ ´¡¤¢ áÔ¤ ݵþ ¤Úó  ·îÀ ø ¢¤¢ Àª¤ Âþ ¥ ´¨ âþ ¨ üÜ¡ ÅþÀ÷ ´±Æ÷ ü÷±ê ´¡¤¢ ýû ï ÇþÃê ´¨  ø Àî üõ Àª¤ üõ¤ ø ü¡ áÔ¤ üóø ´¨ ¢þ ¥ ü÷±ê â .´¨
lg∗
À ¤¢ ø ¢¤À÷ þ Ãû ¤Æ
SiftDown
ÛÞä ¹µ÷ ¤¢
Height(Fn ) = d n2 e
.ÀûÀ ¤ ü÷±ê ýû ´¡¤¢ î ÀÆþ ý õ÷ : ßþ ÂÞ
2-3 öµ¡¤¢
6.3 :
2 Óþ Âã
.Àª üõ Âþ ¥ ýû üðÄþø ý¤¢ î Àª üõ ¹µÆ ´¡¤¢ ×þ 2-3 ´¡¤¢ ×þ
× þ ø Â Ê ä × þ ý¤¢
2-node
× þ.´ ¨
3-node
þ
2-node
þ ü Ü ¡¢ ùÂ ð Â û
.Àª üõ ÂÊä ø¢ ý¤¢
.˻
2-node
×þ öÀ÷¥ Âê ùÀû¢ öÈ÷
ô Þ .À ª ö À Ü î
dataL.key
dataL.key ø
¥  µ Þ î À Ü î ý¤¢
MiddleChild
MiddleChil
ùÂ ð ß þ Â Ê ä
LeftChild
× þ ùÀ û¢ ö È ÷
•
À î Â ê ß » Þ û
 þ ¥ ¤¢ ý û À Ü î ô Þ
dataL.key ¥
µð¤ à ø
dataL.key ¥ µð¤ Ã
LeftChild ,MiddleChild,RightChild
 þ ¥ ¤¢ û À Ü î Þ û ß » Þ û ø ù¢
.ÀµÆû
dataL
Àî Âê
È þ ¤ 2-3 ´ ¡¤¢  þ ¥ ¤¢  ¬ ä ü õ Þ î ü ó ¤¢ ,À µ Æ û
.Àª ùÂð ßþ ÂÊä ø¢
ø
LeftChild
3-node
È þ ¤ 2-3 ´ ¡¤¢  þ ¥ ¤¢  ¬ ä
.Àª üõ
3-node
ø
•
dataL.key¥
µÞî
dataR.key¥
µÞî
ÀÜî ý¤¢
À î Â ê
dataL,dataR Àî Âê
.ÀµÆû
dataL.key < dataR.keyù
LeftChild
•
Ú ÷
È þ ¤ 2-3 ´ ¡ ¤¢
MiddleChild
Èþ ¤ 2-3 ´¡¤¢
dataR.key ¥ µð¤ à RightChild Èþ ¤ 2-3 ´¡¤¢ Âþ ¥ ¤¢ û ÀÜî ôÞ
.À÷¤¢ ¤Âì ¼Î¨ ×þ ¤¢ ü¤¡ ýû ùÂð ôÞ
FUNDAMENTALS OF DATA STRUCTURES IN C++, Ellis Horowitz,Sartaj Sahni,Dinesh Mehta
µî ¥ µêÂðÂ
• 2
.3 ÛÊê
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
70
.´¨ ùÀª ¤ 1 Ûت ¤¢ 2-3 ´¡¤¢ ¥ üó·õ
A 40 B
C
10 20
80
2-3 ´¡¤¢ ¥ üó·õ 1 Ûت
¤¢ .À÷ª üÞ÷ ù¢¢ ÇþÞ÷ ³õî ¤¢ üØþ Ãê ø üãìø ¤ Ï ü¤¡ ýû ùÂð .¢Âð üõ ¤Âì ÂÔ¬  ü¤¡ ùÂð Âû ¤àµõ À÷¥ Âê ù¢¢ Ìä ä
3
h
− 1ø 2h − 1 ß ÂÊä n ø h áÔ¤ 2-3 ´¡¤¢ ×þ ¤¢ ¬ä ßþ ¢Àã
üÜ¡¢ ùÂð Âû î ü÷õ¥ ñø ÷Âî î Àî , °ÜÎõ ßþ ùÀûÈõ ý . ´¨ î ü ÷ õ¥ ôø¢ ÷ î î ü ó ¤¢ ¢¢Â ð ü õ ñ Þ ä , ¢Â ð ü õ ¤Â ì , ´ã®ø ø¢ ßþ.Àª Àû¡ ñÞä , ¢¢Âð üõ âìø
3-node ø 2-node ý¢Àã
3-node ×þ
2-node
× þ ¤¢
¤¢ üÜ¡¢ ùÂð Âû
ý¤¢ 2-3 ´¡¤¢ ×þ.Àî üõ ¤ ¤ ë ê ÷Âî ø¢ .¢ Àû¡
h=1 h = 2 .. X ... . . .. h=h
20
X X .. ... ... ...
21 2h−1
2-node m l h n = 20 + 21 + · · · + 2h−1 ⇒ n = 22−−11 = 2h − 1 ⇒ h = log2n+1
2-3 öµ¡¤¢ .6.3
71
h=1 h=2
X X X .X .. .. .. .. .
X .X .. ... . . . ...
X .. X ... ... ... ..
h=h
2 × 30 2 × 31 2 × 3h−1
3-node
h n = 2 × 30 + 2 × 31 + · · · + 2 × 3h−1 ⇒ n = 2×(33−1−1) = 3h − 1 ⇒ h = l m 1 logn+ 3
: ßþÂ
l m l m 1 < h < logn+1 logn+ 3 2
: û §
î ¥ ù¢Ôµ¨ 2-3 ´¡¤¢ ×þ ÇþÞ÷
templeteclass Two3;//forward declaration templete< class KeyT ype > class Two3Node{ friend class Two3 < KeyT ype >; private : Element< KeyT ype > dataL,dataR; Two3Node *LeftChild, *MiddleChild, *RightChild;}; templete< class KeyT ype > class Two3{ public: Two3(KeyT ype max,Two3Node< KeyT ype > *init=0) :MAXKEY(max), root(init){};//constractor Boolean Insert(const Element< KeyT ype > &);
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
.3 ÛÊê
72
Boolean Delete (const Element< KeyT ype > &); Tow3Node< KeyT ype > *Search(const Element < KeyT ype >&); private: Tow3Node< KeyT ype > *root; KeyT ype MAXKEY; };
ø Àª±÷
M AXKEY ÀÜî
ú . ´¨ À÷¥ Âê ø¢
ý¤¢ ý ±µãõ ÂÊä ºû î Ýî üõ Âê ¹þ ¤¢
dataR.key = M AXKEY MiddleChild
ø
LeftChild
.¢¢ ´±Æ÷ ù¿ó¢ ¤ÀÖõ Âû ö üõ
ý¤¢
2−node ×þ
ø ¢ªüõ ù¡£
RightChild ù¢¢
î Ýîüõ ¢¢¤Âì
dataL ¤¢
ùÂð ßþ ÂÊä
Ìä .Àî üõ ù¤ª ö
2-3 ´¡¤¢ ×þ ý¹µÆ
1.6.3
â ö¢¤ ø ´¨¢ ý ¤ üø¢ø¢ ý¹µÆ öµ¡¤¢ ݵþ ¤ Úó ö üõ ü𢨠.¢¢ ÝÞã Àî üõ ¹µÆ ¤ ýûÀÜî ¤
x
xÀÜî ÂÊä ýø ùÂð îTow3::Search ý¹µÆ
ÀÜî ×þ î Àî üõ ù¢Ôµ¨
3,2,1 Â þ¢ Ö õ ° Â â
compare ô÷
ß þ.À îü õ Æ þ Ö õ
p
À ÷ õ É ¿ È õ ù ð × þ ¤¢ â ìø
¥  µ ð¤ à ,ôø¢ ø ñø ý ûÀ Ü î ß , ñø À Ü î ¥  µ Þ î ÖÜ ¤ÂØ ¢Àã.Àû¢ üõ ´Èð , Àª ùÂð
n
p¤¢
üã ¥ ¹µÆ â
x
þ î ß þ µ Æ ¤
ýûÀÜî ¥ üØþ  þ ôø¢ ÀÜî
ý¤¢ ´¡¤¢ Âð ßþ . Àª üõ 2-3´¡¤¢ áÔ¤ ¢øÀ½õ .¢ Àû¡
O(log n)
ÂÂ
4 þ
Tow3::Search â
Tow3Node< KeyT ype > *Tow3< KeyT ype >:: Search(const Element< KeyT ype >& 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< KeyT ype > *p=root;p;)
ýû
üðÀ» ùÚ÷ ,Àª
templete< class KeyT ype >
{
for
2-3 öµ¡¤¢ .6.3
73
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 ÀÜî ´¨ ô¥ Áó ù¢
3-node ×þ B
Àû¡ ¤¢
B
ÂÊä Ýû¡ üõ Àî Âê ñ
î ¹÷ ¥ .ÝþÈõ ø Âø ¤
Â Ê ä ø¢ ß ¥ î ´ ¨ ý Â Ê ä Û õ ª Àû¡ ¤Âì
x
D
. Ý î ¢ ¹ þ ¤
B
ï ùÂð ¹µÆ
D
ô ÷ ýÀ þÀ ùÂ ð
¤¢ ÀÜî ßþ µØî ÂÊä .´¨¤¢ ¤ ÀÜî ßþ µð¤ Ã
B ¥ A
¤À ùÂ𠤢
xø B ¤¢
¢õ
D ý Âð ù¤ª ùÂÞû ͨµõ ÀÜî ÂÊä ø ´ª¢
. ´¨ ùÀª ¤ ()´ÞÆì 2 Ûت ¤¢ Û¬ ´¡¤¢.Àª
.3 ÛÊê
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
74
A 40
A 20 40 B
C 70 80
B 10 20
C 70 80
D 30
10
30 ¤¢()
70 ¤¢(Óó)
1 Ûت2-3 ´¡¤¢ öø ¤¢ ¤¢-2Ûت
Ûت 2-3 ´¡¤¢ Û¡¢ ¤ 60 ÀÜî üõ ì
õ
C
E
À þÀ ùÂ ð × þ ´ ¨
ÀÜî ßþ µØî ý ÂÊä ýø Ã÷
E ÀþÀ ùÂð
´¨
öä
ùÂ𠤢 60 ý¹µÆ üÏ ¤¢ ï ùÂð .Àþ ÂÚ ÂÑ÷ ¤¢ () ´ÞÆì 2
ýø ù ð ß þ .¢¢Â ð ü õ ¢ ¹ þ
,
xÂÊä ý ¤ÁÚþ , ñ·õ ßþ ¡
CùÂð
3-node
×þ
C
ö .¢¢Â ð
.(80) ´¨ ÀÜî ßþ µð¤ à ý ÂÊä
ý Âð ù¤ª ùÂÞû (70) ͨµõ ÀÜî ÂÊä.(60) Àû¡
3-node ×þ A
î ¹÷ ¥ f¢À¹õ .¢¢Âð üõ ý ¤ÁÚþ
C
¥
A
¤À ùÂð Û¡¢
.¢ª üõ ¢¹þ 20, 40, 70 ß ¤¢ ÀÜî ßþ µð¤ à ý ÂÊä ýø öä °Â
D
ø
B
. ´¨ ÀÜî ßþ µØî ý ÂÊä ýø
F
G
À þÀ ù ð × þ , ¢¤À ÷ ý ¤À
öÀ÷¥ Âê öä Ã÷
E
ø
C
°Â ,À÷õ üõ üì
A
A
A
F
ÀþÀ ùÂð
, Û±ì À÷õ
ͨø ø ² öÀ÷¥ Âê
ö . À ÷ ª ü õ ý ¤Á Ú þ ¤À ù ð ß þ Û ¡¢
ù¤ª ùÂÞû 40 ÀÜî ý ÂÊä ýø ùÂð ßþ .¢ª üõ ¢¹þ 2-3´¡¤¢ ý ¤¢ ÀþÀ 2-3 ´¡¤¢ ,¢ Àû¡
F
ü÷õ À÷¥ Âê Âð ù¤ª ø
A
² À÷¥ Âê Âð
.´¨ ùÀª ¤ 3 Ûت
G 40 A 20 B 10
D 30
F 70 C 60
E 80
() ´ÞÆì 2 Ûت2-3 ´¡¤¢ Û¡¢ 60 ¤¢-3Ûت
2-3 öµ¡¤¢ .6.3
75
,Ýî ê®
p
À÷õ
3-node ×þ
Û¡¢ ¤ ý ÂÊä ݪ µ¨¡ î öõ¥ Âû
. Àþð üõ û ùÂð ÝÆÖ ¤î ßþ î . ¢Âî Ýû¡ ¢¹þ ¤ üõ Âþ ¥ ¤ ¬ ¤¢ â . ´¨ ùÀª ÝÆÖ ü÷õÂÊä ø
q
À÷õ ýÀþÀ ùÂð
q,p
p
Ýþð üõ .Àª
templete< class KeyT ype > Boolean Tow3< KeyT ype >::Insert(const Element< KeyT ype >& y) //Insert the element y into the 2-3 tree only if it does not already // contain an element with the same key. { Tow3Node< KeyT ype > *p; Element < KeyT ype > 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< KeyT ype > *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< KeyT ype > *olda=a; a=new (Tow3Node< KeyT ype >); 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
.3 ÛÊê
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
76
 â ß þ ¥ ôÀ î  û î ý Ô Òø .À î ü õ ù¢ Ô µ ¨ â ß þÀ ¥ â ß þ :Àª üõ Âþ ¥ ¤ ¬ , À÷¤¢ ùÀúä (
´¨ ùÀª ÂÑ÷ é¬ ü𢨠ý < KeyT ype > ýÚó µõ¤ ¥
)
: void Tow3::NewRoot(const Element& x,Tow3Node *a) • ü÷õ¥ . Àî Âç Àþ 2-3 ´¡¤¢ Èþ ¤ î ¢ª üõ ü÷¡Âê ü÷õ¥ â ßþ
(new root) ÀþÀ Èþ ¤
öø ¤¢
À þÀ È þ ¤ ( ² À ÷¥ Â ê)
x
¢ÂÔõ ÂÊä ¢¥¨ üõ ¤
LeftChild
Middle Child, a
î
Û þÀ ± à ÷ ü Þ þÀ ì È þ ¤ .¢ ª ü õ ¤¢ .Àª Àû¡
:Tow3Node* Tow3::Find(const Element & x) • ´¡¤¢ ×þ ë ê â .´¨ (1 õ÷Â) .Àû¢ üõ ¤Âì ¹µÆ ¢¤ õ
Tow3::Search ùÀª
¬ ¿Æ÷ â ßþ
x.key ÀÜî
ý ÂÊä ¤ Ì ýÂ ¤ üú Âè 2-3
ßþ Âè ¤¢ .¢ª üõ ù¢¢ ´Èð ÂÔ¬ ¤ÀÖõ ùÚ÷ Àª µª¢ ¢ø ÀÜî ßþ Âð â .À÷¢Âð üõ  ¤ ¹µÆ ßþ ¤¢ ùÀª ì
õ ï ùÂð ý Âð ù¤ª ¤ ¬
FindNode
â Í ¨ î ý Â ð ù¤ ª ùÂ ¡£ ýÂ ýÂ
ý ù¢¢ öÞµ¡¨ ß»Þû
FindNode
ß þ . ¢¥ ¨ ü õ ¤¢ ì ( È þ ¤) . Àª
p root ÂÆõ ¤¢
root
p
p
Â ç µ õ ¥
Tow3::Insert
. Àî üõ ù¢Ôµ¨ , ¢ª üõ ù¢¢ ´Èð ¥ ´ È ð¥ ¤ õ î À î ü õ ¢ ¹ þ ¤
¢õ ýû ùÂð ¥ üµÆó À÷ üõ ý ù¢¢ öÞµ¡¨
ùÂð Àóø §Âµ¨¢ , ùÂð ×þ ÝÆÖ ¥ Å Âþ ¥ ´¨ ¥÷ ý ù¢¢ öÞµ¡¨ ß . ´¨ ý ¤ ø ® ùÀª ÝÆÖ
:void InsertionError() • ¤¢ ö ¤¢ ´¨ ´¡¤¢ ¥ ý ÂÊä ýøÆõ ©ÀÜî ¤ ý ÂÊä Ýû¿ üµìø . ¢Âî Àû¡ ô
ä ¤ Ρ â ßþ . ¢¢ Àû¡ ¤ üþΡ Ýî
: void Tow3Node::PutIn(const Element& x,Tow3Node *a) • , ´¨ ÂÊä ×þ ý¤¢ fãìø î ¤¢ ø Ýû¢ üõ ¤Âì üܱì Âþ¢Öõ ùÀª
x
Âð . À÷ª üõ
x
(this)ùÂð
Û¡¢
´¨¤ ´Þ¨ ¤¢ f Öì¢ ¤
a
x ÂÊä
´¡¤¢ Âþ ¥ ¤¢ . Ýî üõ ù¢Ôµ¨
Middle Child
ýøÆõ
a
RightChild
dataR
ÂÂ °Â
.Àª Àû¡
ø
RightChild
¤¢ ý â ßþ ¥
ùÚ÷ ¢¢Âð
ÛþÀ±
dataL
ÂÂ
x
Âð ¹µ÷
MiddleChild
ø
dataL
a ùÚ÷ ¢¢Âð dataR
ÛþÀ±
:Eelement& Tow3::Split(Tow3Node* p,Element& x,Tow3Node *olda,*a) • Âþ ¥ ª ÂÊä ø¢ Ûõª Àµ î
(p)
À÷õ
Tow3Node ×þ
ýø ¤ Â â ßþ
2-3 öµ¡¤¢ .6.3
77
ýø À î ü õ ù¤ ª ö ÂÊä .Àª üõ
x
ø
p
a
¤¢ ¢õ óø ÂÊä ø¢ öõ ¥ ÀÜî ßþ µð¤ à ý ÂÊä
öÀ÷¥ Âê Âð ù¤ª ¨ .Àª üõ ¤ À÷ª Óþ Âã
aøp
î ùÀ ª ¢ ¹ þ ü ó ¡ ùÂ ð.À î ü õ Û Þ ä À ª ü õ
p ¤¢ ùÀ÷õ üì ÂÊä ú , ÀÜî ßþ µØî ý¤¢
¤¢ Àþ î ýÀ÷¥ Âê ù¢¢ Ìä ¤ú
olda Âð ù¤ª ø p
üܬ
. À÷¢Âð üõ  ¤ ÷õ ÀÜî ÂÊä â ßþ . Àî üõ ñçª
Ã÷
a
ø ¢ ª ¤¢
p
. ´¨ ùÀª ¢¹þ
¤¢ À û ¡ ü õ î ´ ¨ ý Â Ê ä ùÀ û¢ ö È ÷
for
x , Insert
â ¤¢
ÖÜ ¤ÂØ ßþ ¡ ¤¢ üð¥ î ´¨ ý ùÂð ùÀû¢ öÈ÷
üÚµÆ ùÀª é¬ Ûî öõ¥ î Ýî üõ ùÀûÈõ üðÀ» Ûܽ ø þ ù ý ÂÊä
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
(dataR.key=MAXKEY) Ý û¢ ü õ
¤Â ì
´ Æ þ ü õ () ´ Þ Æ ì 4
MAXKEY
¤
dataR.key
. ´¨ ùÀª ¤ ()´ÞÆì 4 Ûت 2-3 ´¡¤¢ ¤¢ ¤î
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
.3 ÛÊê
78
A 50 C
B 10
80 D
60
20
70
90
95
óø2-3 ´¡¤¢(Óó)
A 50 B
C
10 20
60
80 D 90 95
70 ùÂð éÁ ( )
A 50 80 B 10
D
C 60
20
95
90 ùÂð éÁ()
ø ø Óó ýû ´ÞÆì , 4 Ûت
C
ùÂð î ¢ª üõ °õ Âõ ßþ. Àþ ÂÚ ÂÑ÷ ¤¢ ¤ 60 ÀÜî ÂÊä éÁ ñ
üõ ø ¤ ßþ ¥ , ´¨
3-node ×þ B
¤ 50 À Ü î ø ù¢¢ ñ Ö µ ÷ , ´¡¤¢
B
¤¢
A
üãþ
,¤À ù ð
C ùÂð
dataL
² ¢ÃÞû î ¹÷ ¥ . ¢¢Âð üú
ö Ø õ ¤ 20 À Ü î Â Ê ä Ý ÷
dataR.key=MAXKEY ý ¤ÂìÂ
¥ Àã Ýû¢ ñÖµ÷
C
ùÂð ¤À ¥
ßþ . ¢¢Âð üõ ÛþÀ± ,ùÀª ¤ () ´ÞÆì 4 Ûت ¤¢ î »÷ ¤ ¬ 2-3
2-3 öµ¡¤¢ .6.3
79
î üõÚû . ¢ª üõ ùÀõ÷
(rotation) Ç¡Â û ù¢¢
60 éÁ î üõÚû À÷õ . ¢ª üõ üú
2-node ×þ C
D
üþ¹ ø ñÖµ÷ ÀþÂê
ùÂð ,¢¢Âð üõ éÁ 95 ÀÜî ÂÊä
üãþ ² ´Þ¨ ¢ÃÞû î  Àª üÞ÷ ßØÞõ
D
Ýî üõ éÁ ¤
ùÂð ø ù¢Âî ÛÖµõ
C
rotation
Àª ô¹÷
² ¢ÃÞû Û¡¢ ¤ 80 ¤ ßþ . ´¨
ü õ éÁ ù ð × þ ° î ¤¢.¢ ª ü õ µ Ô ð
(combine)
° î À þ ê ß þ .
95 ÂÊä éÁ .¢¢Âð üÞ÷ éÁ ýùÂð ÷Ú»û Ç¡Â ¤¢ î ü¤ ¬ ¤¢ ¢ª 50 À Ü î Â Ê ä éÁ .¢¢Â ð ü õ () ´ Þ Æ ì 4 Û Ø ª 2-3 ´ ¡¤¢ ü ú µ õ ñ .À ª À û ¡ () ´ Þ Æ ì 4 Û Ø ª 2-3 ´ ¡¤¢ ¤ ° õ à ÷ ´ ¡¤¢ ß þ ¥
B
ùÂ𠢪 üõ °õ î Àþ ÂÚ ÂÑ÷ ¤¢ ´¡¤¢ ßþ ¥ ¤ 10 ÀÜî ÂÊä éÁ
2-node ×þ C
üãþ
B
´¨¤ ´Þ¨ ¢ÃÞû þ î Ýî üõ ü¨¤  öî .¢¢Âð üú
î »÷ Èõ üÈ¡Â Ý÷ üõ Àª ÛÞä ×þ ùÚ÷ Àª
2-node
éÁ ´ã®ø Èõ , ´¨ ù ð ø ùÀ ª Û Ö µ õ ÷ Ú » û ý¤¢ Ýþ¢¢ ô¹÷
C
B
A
3-node ×þ C
Âð .3-node ×þ þ ´¨
×þ Âð ø Ýû¢ ô¹÷, ´êÂð ¤ ¬ 60 éÁ ýÂ
2-node
×þ
C
ö ¹þ ¤¢ .¢Âð üõ ¤ ¬ °îÂ
80 ø 20 ý ûÀ Ü î Â ¬ ä ¤ ß þ .Ý î ü õ Û Þ ä 95
ù ð ¤À î À ª ü õ ° õ ób Æ õ ß þ À  û.¢¢Â ð ü õ éÁ
C
ýÂ î »÷ À÷õ ݵÆ÷ üõ ¢±÷ Èþ ¤ ¤À Âð .Àª±÷ ý ÂÊä
¤¢ ø(60 Â Ê ä éÁ ) Ý û¢ ¤Â ì ´ Æ ø ü ¨¤  ¢¤ õ ¤ ö ´ ¨¤ ø ² ¢Ã Þ û , éÁ ü𢨠, ´¨ Èþ ¤
A
ö .Àþ¢Âð üõ üú (95ÂÊä éÁ)
.(() ´ÞÆì 4 Ûت) Àª Àû¡ ÀþÀ Èþ ¤
D
¹µ÷
B ø ùÀª
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
.3 ÛÊê
80
A 20 80 B 10
D
C 95
50
60 éÁ()
A 20 B 10
C 50 80
95 éÁ()
A 20 C
B 10
80
50 éÁ()
B 20 80
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;}
2-3 öµ¡¤¢ .6.3
81
p
² ´ Þ ¨ À ÷¥ Â ê . À ª È þ ¤ À þ
p
ù Ú ÷,¢¤À ÷ ý Â Ê ä .¢ª üõ éÁ
¤À ü÷õ þ ø ´¨¤ , ² À÷¥ Âê ¤
qùÚ÷ ,Àª r ²
p
´Þ¨ À÷¥ Âê
p
p
 ð :3 Ü Â õ
ùÂð ø ùÀª Èþ ¤ ÛþÀ±
î ßþ µÆ Ç¡Â ×þ ý ´ã®ø ¨
p
Âð . Àþ üõ ¢ø ¡þ Àª
ßµêÂð ÂÑ÷ ¤¢ öøÀ î Àª µª¢ . Àî Âê Ç¡Â ¨ . ´¨ ùÀª Óþ Âã üµ¨¤¢
q,
p
üãþ ¢¡
² ´Þ¨ À÷¥ Âê öä
3-nodeþ 2-node
´¨
r
×þ
r
î ßþ
Ìä î Àû¢ üõ öÈ÷ ? ´õ
ä . ´¨ ùÀª ¤ 5 Ûت ¤¢ ý ¤¢Þ÷ ¤ ¬ üãþ)ÀµÆû û ùÂð öÀ÷¥ Âê ùÀû¢ öÈ÷
d
ø
c,b,a.
¢¤À÷ üµÞû ¢þ ¥ Ï Âõ ù¢¢ .( öµ¡¤¢ Âþ ¥ ýû Èþ ¤
r X ? q Y Z
p
a
-
c
b
Àª üõ
p X a
d r ²
r Y ? q Z c
b
À÷¥ Âê
p
d
(Óó)
r Y ?
r Z ? q X Y a
b
-
p
c d Àª üõ
a r ü÷õ À÷¥ Âê p
r W Z a q
c
c
b r
d
p
a q X
d e Àª üõ
b ()
r W Y
p
X Y b
p Z
q X
´¨¤ À÷¥ Âê
Z c p
d
e
()
2-3 ´¡¤¢ ¤¢ Ç¡Â ý Óܵ¿õ ´ã®ø ¨-5 Ûت
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
6 Ûت ¤¢ ´¨
r
.3 ÛÊê
p
² ´Þ¨ À÷¥ Âê
î üµìø
82
combine
ÜÞä ´ã®ø ø¢ . ´¨ ùÀª ù¢¢ öÈ÷
r x
c
b
p x y a
( Óó)
r x z q y
p
a
-
q y
p
a
r
b
b
c r z
d
p x y a
c
b
d c
( )
6 Ûت
¤ ¬ 2-3 ´¡¤¢ ¤¢ ï ùÂð ×þ éÁ ÛÂõ ¥ ñø ýÜÂõ Àî ±ª :Àª üõ Âþ ¥
template < class KeyT ype > Two3< KeyT ype >::DeleteKey(Two3Node< KeyT ype > *p, const Element< KeyT ype >& 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
2-3 öµ¡¤¢ .6.3
83
´¨
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 ´¡¤¢ ×þ ¥ éÁ ¢ÂØÜÞä Ûܽ ø þù O(1)
4.6.3
 ü÷õ¥ ¤¢ üþú Ç¡Â þ °î ¢ÂØÜÞä ×þ î ´¨ É¿Èõ
×þ Âð. ¢¢Âð üõ Ûõî éÁ ÛÞä ,¢ª ô¹÷ Ç¡Â ×þ Âð . ¢Âð üõ ô¹÷ ßþ . ¢ª üõ ÛÖµõ  ¼Î¨ ×þ 2-3 ´¡¤¢ ¤¢
p
,¢Âð ¤ ¬ °îÂ
2-3 ´¡¤¢ áÔ¤¥ À÷Âð ¤ ¬ À÷ üõ éÁ ×þ ñ
¡ ¤¢ î ü±î ¢Àã ü÷õ¥ ÂÊä
n
2-3 ´¡¤¢ ×þ ¥ éÁ ÛÞä ¹µ÷ ¤¢ ø ¢Âî Àû¿÷ ¥ ø¹ .¢¤¢ ¥÷
O(log n)
ÂÂ
.3 ÛÊê
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
84
Red-Black ù¨ - ÃõÂì ´¡¤¢ 3 :Àª
7.3
üõ Âþ ¥ ¤ ¬ ù¨-ÃõÂì ´¡¤¢ ×þ
ù¨ - ÃõÂì ´¡¤¢ «¡
1.7.3
. ´¨ ù¨ þ ø ÃõÂì þ ùÂð Âû
nil
•
ï Âû
•
À ÷ ü Þ ÷ à õ ì À ÷¥  ê,à õ ì ù ð × þ ¤¢ ) .À µ Æ û ù ¨ , à õ ì ù ð × þ À ÷¥  ê ø¢
•
. ´¨ ù¨
(˻
¢À ã Û õ ª ( Ý Ö µ Æ õ À ÷¥  ê f õø à ó ÷) À ÷¥  ê ï ù ð × þ ¥ ù¢ ¨ Â Æ õ  û
•
. ´¨ ù¨ ùÂð ü÷ÆØþ
(Àª üÞ÷ ü¨¨ ¯ø ª ¥ ¯Âª ßþ). ´¨ ù¨ ´¡¤¢ Èþ ¤
•
:Âþ ¥ ñ·õ À÷õ
26 17
41
14 10 7 3
NIL
16 15
12
19
NIL NIL
23 15
47
30
NIL
28 NIL
NIL
38
NIL
35
NIL
NIL
39
NIL NIL NIL
NIL
21
NIL
NIL
NIL
NIL
NIL NIL
NIL
NIL
.Àª üõ ü¨Àì ÀÞ½õ Âµî¢ ùø à ¥ µêÂð ´ÞÆì ßþ °óÎõ
3
RED-BLACK ù¨ - ÃõÂì ´¡¤¢ .7.3
85
üþÀµ ýþÌì ø Óþ ¤ã ùÂð ¢Àã ´¨ ÂÂ
bh(X)þ Black-Height(x) Óþ Âã
Â
4 . À÷¥ Âê
2.7.3
:Black-Height(x)
ï ×þ
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 Ìì 1) 2 log(n+ 2
ù¿ó¢ Èþ ¤ ´¡¤¢ Âþ ¥ ×þ î Ýû¢ üõ öÈ÷ Àµ ë ê Ìì ± ýÂ: ± áÔ¤ ýø ¤  ÂÖµ¨ ¥ ± ý . ´¨ üÜ¡¢ ùÂð
2bh(x) − 1 ý¤¢ ÛìÀ x
.¢ª üõ ù¢Ôµ¨ ´¡¤¢ ¤¢
x üÜ¡¢
ùÂð
: DZÂÖµ¨ þ ´¡¤¢ Âþ ¥ ßþÂ. ´¨
nil
¹µ÷ ¤¢ ø ï fÞµ
.¢¤¢ üÜ¡¢ ùÂð
x
, Àª ÂÔ¬
x
áÔ¤ Âð
20 − 1 = 0 üãþ 2bh(x) − 1 ÛìÀ x Èþ ¤ : ü ÂÖµ¨ ôð
À÷¥ Âê ø¢ ý¤¢ ú÷
x
x ø Àª üõ ´±·õ ý¢Àä bh(x)
Black - Height, ù¨ þ
¢¡ ¥ µÞî üäÔ¤
x
. Àþ ÂÚ ÂÑ÷ ¤¢ ¤
x üÜ¡¢ ùÂð
Àª ÃõÂì Ø÷ °Æ  öÀ÷¥ Âê ¥ ôÀî Âû. Àª üõ
À÷¥ Âê Âû Ø÷ ´Üä . ¢ Àû¡
bh(x)-1
þ
bh(x)
ÂÂ
×þ Èþ ¤ ´¡¤¢ Âþ ¥ Âû î Ýþ ÂÚ ¹µ÷ ÂÖµ¨ Âê ¥ ù¢Ôµ¨ Ý÷ üõ ¢¤¢
2bh(x)−1 − 1 ÛìÀ x À÷¥ Âê bh(x)−1 . ´ª¢ Àû¡ üÜ¡¢ ùÂð 2 − 1 + 2bh(x)−1 − 1 + 1 = 2bh(x) − 1
ÛìÀ
x
b Èþ ¤ ´¡¤¢ Âþ ¥ ßþÂ. ¢¤¢ üÜ¡¢ ùÂð
¤¢ öøÀ) û ùÂð ¥ üÞ÷ ÛìÀ
h
áÔ¤ ´¡¤¢ ¤¢ î Ý÷¢ üõ ÂÚþ¢ éÂÏ ¥
Âè ¤¢ Âþ ¥ . ÀµÆû ù¨ , ï Èþ ¤ ¥ ù¢¨ ÂÆõ Âû ýø ¤  ( Èþ ¤ ßµª¢ ÂÑ÷
Black-Height ¹µ÷ ¤¢.
Àª Àû¡ ËÖ÷ ´¡¤¢ «¡ ¥ 3 ´¬¡ ¤ ¬ ßþ .¢ Àû¡
(n+1)
n ≥ 2 − 1 =⇒ 2 ≤ n + 1 =⇒ h ≤ 2 log2 h
2
h
2
. ´¨
O(log n) ,RB ´¡¤¢
h
2
ÛìÀ Èþ ¤
áÔ¤
: ¹µ÷
. Ýþ ¤Þª üÞ÷ Â÷ ø ´¨ Âb ü x ¢¡ Ù÷¤
4
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
.3 ÛÊê
86
ö¤ø¢ ¤ ±¹õ Íþª üÌã ¤¢ éÁ ø ¤¢ ÜÞä ¥ Àã
3.7.3
RB ´¡¤¢ «¡ üþ ¥ ýÂ
û Âð ù¤ª ¤µ¡¨ ¤¢ üÂç þ Ýî ä ¤ û ùÂð ¥ üÌã Ù÷¤ î Àª Ýû¡ ü õ Ó þ  ã ( ¢Â Ú ³ ø ¢Â Ú µ ¨¤ ) ö¤ ø¢ Û Þ ä ø¢ ¤ Ñ õ ß Þ û . Ý þ Þ ÷ ñ Þ ä ×þ «¡ ¤¢ üóت ºû ÛÞä ø¢ ßþ î ´¨ ¼®ø Âþ ¥ Ûت . ÝþÞ÷ . ¢Âî Àû¿÷ ¢¹þ üþø¢ø¢ ´¡¤¢ À÷¥ Âê î ÝþÞ÷ üõ Âê ¢ª üõ ô¹÷ ¢ÂÚ³ ö¤ ø¢ ×þ î üõÚû : µØ÷ . Àª±÷ Âç ö¤ ø¢ ×þ  ¤¢ û Âð ù¤ª ú Âþ ¥ Àª
O(1)
nil
ÂÑ÷ ¢¤ õ ùÂð ´¨¤
¥ ö¤ ø¢ î ´¨ ¼®ø
. À÷õ üõ Âç öøÀ à Âþ¨ ø ÀþÞ÷ üõ
Right-Rotate(T,y) -
y x α
x
Left-Rotate(T,x) α γ
y β
β
γ
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 12. p[x]← y
// Put x on y’s left
RED-BLACK ù¨ - ÃõÂì ´¡¤¢ .7.3
87
¤¢ ü õ à õÂ ì ¤ Àª ù¨
x
x
¤ î ß þ ýÂ Ý þ Þ ÷ ü õ ¤¢ ¤
x
ü ø¢ø¢ ´ ¡¤¢ ¤¢ ¤¢ § ¨ Â
¤À Âð . À÷õ üõ ´ û ùÂð ôÞ ýÂ
y=uncle[x]
¤¢ . Ý þø ¤ ü õ
å ¨ À ª à õ ì
x
4.7.3
5 bh
î ´¨ ¼®ø , ÝþÞ÷
¤À  ð õ À ¨¤ ü õ ö þ ¤¢
´¡¤¢ ¯ Âõ 4 ´¬¡ ÐÔ ÜÂõ Âû ¤¢ î ´Æþ üܬ ùÀþ ýÀã ´ÞÆì á Ô ¤ ý ¤ À ª ü õ 3 ´ ¬ ¡ ý ¤Â ì ôÀ ä ¯  õ î ¢ õ ñ Ø ª
RB
ý ¤ ¤î ßþ ø ÝþÞ÷ ñ¨¤  äÔ¤ ¤ ÛØÈõ ø ÝþÞ÷ Û ´¡¤¢ üÜãê ø ¢ª ¤ÂìÂ
x
¤À ö¢ ù¨ ¯Âª þ ݨ Èþ ¤ Ýû¢ õ¢ ¤ÀÖ÷  Ψ
x
¼½Ê ´¨ ÃõÂì
¤À î ü÷õ¥ ú ´¡¤¢ î Àª üõ ôÜãõ . ݨ úµ÷ .¢¤¢ ¥÷
Ç ª ´ ¨
6 :
Parent[Parent[x]] ´ ¨¤
þ ² À ÷¥ Â ê
°Æ Â
´¨ ö ¤Öµõ Âþ ¥ ´ó ¨ ÂÚþ¢ ´ó ¨ î Àû¢ üõ ¤ øÔµõ ´ó . ´¨ ÃõÂì
y
: ñø ´ó
. ´¨ ©¤À ´¨¤ À÷¥ Âê
xø
ù¨
y
: ôø¢ ´ó
. ´¨ ©¤À ² À÷¥ Âê
xø
ù¨
y
: ô¨ ´ó
üõ ù¨ ´¡¤¢ Èþ ¤ 5 ´¬¡ ÐÔ ýÂ
RB-insert
A
D Bx
α
A α
ε
δ
ε
δ
B
y
γ new x C
B
Dy
B γ
D
β
C
x A
. ¢ª
-
y
γ
β
ý öþ ¤¢ : µØ÷
new x C
C
α
Parent[x] Ø ÷
δ
γ
A
ε α
β
D δ
ε
β
ñø ´ó
Black-Height ¢ª üõ ßã y=uncle[x] Ù÷¤ §¨  ßþ
5 6
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
C
.3 ÛÊê
A Bx
-
y
B
δ
x A ε
β
C
ôø¢ ´ó
y δ
α
88
ε β
α
ô¨ ´ó
? B x A α
C εβ
δ
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
RED-BLACK ù¨ - ÃõÂì ´¡¤¢ .7.3
89
11
11 14
2
15
7
1
case 1-
2 1
7
8
5
x
y 15
5
x 4
14 8
4 case 2
? 11
7
x 2 1
case 3
11 5
x 2
14
1 4
14
7
15
8
y 15
5 4
ùÂð ×þ ¤¢
éÁ ô÷ üµÒÔ ùÂð ×þ
RB-Delete
5.7.3
ý¥¨ ù¢ ¤¢ ý¥ Âõ Íþª ý¥¨ ù¢¨ ýÂ
î ´¨ üþû Ôóõ öÞû ýø ùÂð ßþ . ÝþÞ÷ üõ Óþ Âã
T
´¡¤¢ ýÂ
nil[T]
Âþ¨ ø Àª üõ ù¨ DZüª ßþ Ù÷¤ Ôóõ . ¢¤¢ ¢ø ´¡¤¢ üóÞãõ ýû ùÂ𠤢 . À÷ÂÚ ù¿ó¢ Âþ¢Öõ À÷ üõ û Ôóõ üóÞãõ ùÂð ×þ À÷õ
Parent Ôóõ ù¢Ôµ¨) ÝþÞ÷ ¤µê¤ Àª üõ x ©¤À
DZ üª ßþ ¯ Âõ (. Àª üõ
while
ßþ ¤¢) Ýû¢ ù¤ª
nil À÷¥ Âê ×þ Ý÷ üõ üµÑê½õ DZ üª ßþ ¥ ù¢Ôµ¨
ÖÜ ýÂ ßóø ø
nil[T]
¤
nil
RB-Delete-Fixup
ýûÂð ù¤ª ôÞ
ü÷¡ Âê ¤¢ üµÑê½õ
RB ´¡¤¢
¤¢ ýù¢Ôµ¨ Ûì ø «¡ ¤ÀÖõ ¥ û DZ üª ßþ ÂÒµõ
î ´¡¤¢
¤¢ Àþ ßþÂ
Parent Ôóõ
, ÜÂõ
(.¢¤À÷ ¢¡ , ¹ µ Æ ü ø¢ø¢ ´ ¡¤¢ ¥ éÁ À ÷ õ ü ªø ¤ À µ Â Ê ä × þ éÁ ýÂ Ý þ Þ ÷ ´ ì¢ À þ . Ý þ Þ ÷ ü õ ¼ ½ Ê ¤ ´ ¡¤¢ Å ³ ¨ ø éÁ ¤ Â Ñ ÷ ¢¤ õ Â Ê ä ý¹µÆ ´¡¤¢ ¤¢ ¢¡ ýµÞû üõ ù¤ª
nil[T]
nil
ýûÂð ù¤ª
RB
´¡¤¢ ¥ éÁ ¯ Âõ ¤ µ¨¢ ±ª î
RB
´¡¤¢ ¤¢ ö ´Æ÷ öÆØþ f Öì¢ üø¢ø¢
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
.3 ÛÊê
90
. ¢ª üõ üû¢ ¤ÀÖõ üϪ ºû öøÀ 7 Í¡ ¤¢ . ´ ê ð À û ¡ ¤À Ö õ
nil[T].Parent,
16 ¯Î¡ ¤¢ ´¡¤¢ , Àª ù¨
RB
y
À ª
nil
Parent[x] Ôóõ ß»Þû ø
ïÂ × þ
x
ÀþÞ÷
î Ý û ü ¤ ¬ ¤¢  þ ¥
Ù÷¤ î ü¤ ¬ ¤¢ , ùÀª Âî£ Âç ø¢  ùø
ä
´¡¤¢ ¤¢ 4 ´¬¡ ¢ª üõ ¼½Ê
RB-Delete-Fixup
ü÷¡Âê 17 ø . ¢ª üþ ¥
ùÂ ð ö ¢ ¡ þ ¢ ª ü ÷ ¡Â ê
T
´ ¡¤¢ ýø ¤ Â
z
ùÂ ð
RB-Delete
 ð : µ Ø ÷
¤ µ¨¢ ôø¢ ´ó ¤¢ . ¢ª üõ éÁ ö (Successor) ýÀã ÂÊä þ ¢ª üõ éÁ . Àª Àû¡  Ã÷ . Ýõ÷ üõ ¤±ä
y
y ¤
Key[z]:=Key[Succ(z)]
ùÀª éÁ ùÂð : ¢¢¤Âì
¥ µ ªÁ 𠤢 î ý Â Æ õ ¢ ª ü õ ° õ ö ¥ éÁ , À ª ù ¨
y
 ð
ßµê¤ ß ¥ ¶ä ßþ ø Àª µª¢ û ÂÆõ Âþ¨ ¥ µÞî ù¨ ùÂð ×þ , ù¢Âî üõ ùÂð Ý÷µ Øþ Âê ¤ ÛØÈõ ßþ Ý÷ üõ õ . ¢ª üõ ´¡¤¢ ¤¢ 4 ´¬¡ ×þ ¤ ( ´¨ ù¢
y
öÀª éÁ ¥ Û±ì
y
ùÂð ´¨¤ þ ² À÷¥ Âê ´ÖÖ ¤¢ î)
ùÂð ø¢ ¥ ¤ ±ä ýãõ
x
x üãþ ©À÷¥ Âê ¤ ö
Ù÷¤ Ýî üõ éÁ ¤
x
ùÂð ¥ ¤ ±ä üãþ . ÝþÞ÷ Û , Ýî ù¨ Â ê® ¤
¥ ©¢¡) . Àª ùÀª ù¨ ¤ø¢
x
y ùÂð î ü÷õ¥ ßþÂ
. Àª ù¨
¢¤¢ öØõ î ´¨ ßþ ÛØÈõ ú . ݵ¨Âê üõ
. ¢ª üõ ´¡¤¢ ¤¢ 1 ´¬¡ ßµê¤ ß ¥ ¶ä ßþ ø ( Àª ù¨ Û±ì ´¡¤¢ ¤¢  äÔ¤ éÂÏ ¤ üê® ù¨ Ù÷¤ ×þ î ´¨ ßþ õ éÀû : ݨ Âþ ¥ ýû ´ó ¥ üØþ ݵ¨ÂÔ . ÝþÞ÷ üõ ù¨ ¤ ö õ ´ó ßþ ¤¢ î ÀþÞ÷ ù¤ª ÃõÂì ùÂð ×þ
. ´¡À÷ ¤ ø¢ ö üõ ¤ üê® ù¨ , ´ó ßþ ¤¢ î Àî ù¤ª Èþ ¤
x
( Óó
x
(
. ¢Þ÷ ¤ 1 ´¬¡ öµ ¢À¹õ ýÃõ Ù÷¤ ø °¨õ ýû ö¤ ø¢ ( 4 ´¨ ßØÞõ ݨ ´ã®ø ¨ ¥ üØþ î ÝþÈ÷ Õêõ ÜÂõ ×þ ¤¢ Âð Àª ´¨¤ þ ² À÷¥ Âê
x
Øþ °Æ  ´ÖÖ ¤¢) Ýþª ø ¤ ø ¤ øÔµõ ´ó
: û ¢¢¤Âì (. Àþ üõ ¢ø ö ¤Öµõ ø¢ ø¢ ´ã®ø 8 . ¢¤¢ ù¨ °Æ  ø¢ î ´¨ ý ùÂð
. ¢ Àû¡
x
ÜÂõ Âû ¤¢
w=sibling(x) •
ߪø ¤ ý µÆî¡ ýû ùÂð ø ÃõÂì ý µÆî¡ ýû ùÂð , ù¨ Ù÷¤ ù ýû ùÂð .
c’,c À÷õ ´¨ ôÜãõ÷ Ù÷¤
•
ùÂð ÂÚ÷ þÞ÷
•
RED-BLACK ù¨ - ÃõÂì ´¡¤¢ .7.3
91
: ´¨ Âþ ¥ ¤ ¬ Àþ ¢ø ´¨ ßØÞõ î üþû ´ó
( ¢¤¢ ù¨ öÀ÷¥ Âê ßþ ) ´¨ ÃõÂì w(1 . ´¨ ù¨ ©À÷¥ Âê ø¢ ø w(2 . ´¨ ù¨ ö ´¨¤ À÷¥ Âê ø ÃõÂì ö ² À÷¥ Âê ø ù¨ w(3 . ´¨ ÃõÂì ö ´¨¤ À÷¥ Âê ø ù¨ w(4
.... .. B
.... .. D case 1
x A
(a)
x
β
α
C
E
γ
δ
x
case 2
A
β
β C
E ε
δ
x A
w
β
α C
x
δ
ξ
ε
δ
C γ
case 4 A
ε
ξ
α
ε
E
B
E δ
E
.... .. c D
β
α
γ D
w D
A
ξ
E
... ... c B (d)
ε
new w C
xA
β γ
δ .... .. c B
case 3D
E
γ
ξ
... ... Bc
α
D
α
γ
ξ
new x C γ β δ
D C
(c)
A
.... . new x . c B
A
α
E ε
α
ξ
ε
... ... B c (b)
B
D
c’ ε C β γ δ new x =root[T]
ξ
ξ
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
ö¤ ø¢ ô¹÷ ø ÂÚþÀØþ
B
ø
D
.3 ÛÊê
92
ýû ùÂð Ù÷¤ Ëþã 1 ´ó : ñø ´ó (1
. ¢ª üõ ÛþÀ± 4 þ 3 þ ø 2 ýû ´ó ¥ üØþ ¢Âð ²
à õÂ ì ´ ¨ ùÀ ª ù¢¢ Ç þ Þ ÷
x
 ð ù¤ ª î ü ê ® ù ¨ Ù ÷¤ : ôø¢ ´ ó (2
Õ þ Â Ï ¥  ð . ¢ ª ü õ Û Ö µ õ  á Ô ¤ × þ . À¨¤ Àû¡ öþ ÖÜ ´¨ ÃõÂì
ö¤ ø¢ × þ ô ¹ ÷ ø
D
ø
C
c
B
x
ö¢¢ ù¤ ª ø
D
ö¢Â î
ö ݪ ùÀª 2 ´ó ¢¤ø ñø ´ó
ý û ù ð Ù ÷¤ Ë þ ã 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. 15.
key[z]← key[y] // if y has other fields , copy them , too
16. if color[y] = BLACK then
RED-BLACK ù¨ - ÃõÂì ´¡¤¢ .7.3
93
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
.3 ÛÊê
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
94
(Disjoin sets)ùõ ýû äÞ¹õ á ÷ ß þ  ù¢ ¨.À õ ÷ ü õ à ¹ õ À ª ü ú ø¢ ö í µ ª ù ð û ¤ °ÆÂ
nø
...ø2ø1 ýû ù¤Þª î ýÌä
näÞ¹õ ý¥¨
AøB
8.3
ä Þ ¹ õ ø¢
ù¢ ýÂ ýù¢¢
.´¨þ¤¥ù¢Ôµ¨À÷ù¢¤ ¡ ùõ ýû µ¨¢ î ¤
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 } 3
2
1 4
5
. Ýû¢ üõ ¤Âì
set
6
10
7
8
9
þ¤ ¤¢ ¤ ©¤À ùÂð ¢Àä ÂÊä Âû ý ų¨
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 x} return set[x]
ݵþ ¤ Úó ßþ. À÷¢Âð üõ ¤ ¢¤¢ ¤Âì ö ¤¢
x î ýäÞ¹õ °ÆÂ find1 â . ´¨
öõ¥.ÀþÞ÷ üõ ôè¢ Ýû ¤ ÀµÆû
θ(1)
¥
bø a Ûõª î ýäÞ¹õ ø¢ merge1 â . ´¨
θ(n)
¥ â ßþ
(DISJOIN SETS)ùõ ýû äÞ¹õ .8.3
95
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
´¨
O(n) ¥find2 â
. ´¨  ú üܱì ݵþ ¤ Úó ´±Æ÷ î ´¨
θ(1)
¥
ݵþ ¤ Úó ¤¢ ´¨ µØî ö °ÆÂ î ´¨ ýÀÜî Èþ ¤ ÀÜî üÜ±ì ´¡¤¢ ø¢ ¤¢ ö öÀª ï¤ Ã ¥ø¢Âî ¤î áÔ¤ ýø ¤ Àþ Å ´¨ ý ÂµÈ öõ¥ ý¤¢
find
ôø¢
.¢Âî ý ÂðÜ ¤ ´ þ óø ø Ý þ  ð ü õ Â Ñ ÷ ¤¢ ü ä Ô ¤ ´ ¡¤¢ ¥ ù ð  û ý ¤ Ñ õ ß þ ý . ÀÜî ö¢ ×î ÷ Ýû¢üõ ¤Âì áÔ¤ : ÝþÞ÷ üõ Óþ Âã Âþ ¥ ¤ ¬ ¤
function merge3(a,b) if(height[a] = height[b])
find3
ø
merge3 â
¤ ¬ ßþ ¤¢
û ù¢¢ öÞµ¡¨ ¥ ü¡Â ý ¤ ø¢þ
.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¥Ýµþ ¤ Úó
ßþ öõ¥
4 ÛÊê Óܵ¿õ ýû ©ø ¤ üêÂãõ üÆþ÷ ݵþ ¤ Úó
üÆþ÷ õ÷ ýû ©ø ¤ á÷ .4 ù¤ ª  þ ¥ ¢¤ õ ö ü õ ü Æ þ ÷ õ ÷ ý û × Ø á ÷ ¥ :¢Þ÷
÷Êþ  ×Ø
•
Û ø ÝÆÖ ×Ø
•
þ üÆþ÷õ÷ ×Ø
•
°Öä ´Èð¥ ×Ø
•
À ø ¡ª ×Ø
•
û ý¥ ´Þ÷¤ ×Ø
•
üóÞµ ýû ݵþ ¤ Úó
•
ý¥õ ýû ݵþ ¤ Úó
•
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.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.”
î ¤ Âû ¢ª üõ ê® äÞ¹õ ¢ø ¤ ¬ ¤¢ ´¨ üúÀµ¤¢ éÁ C
C
äÞ¹õ ¥ fÀäì Àî üõ ¿µ÷ ¤
C
äÞ¹õ ¥ ÂÊä ×þ
äÞ¹õ ¥ ÂÊä ö¢Âî ê® þ î ´Æþ
solution , feasible
ø
Select
feasible
S
Select
â
â ÔÒø .¢ª üõ
â óbÆõ á÷ µÆ.¡ þ ´¨ ßØÞõ
S
äÞ¹õ
. ÀµÆû Âç Ûì
ßÞêû ý¥¨ ù¢ÂÈê ݵþ ¤Úó
1.1.4
ý¢ø ¤ ø õ ÷ ©ø ¤ ß þ¤¢ . ´ ¨ ß Þ ê û ©ø ¤ û Û þ ê ý¥ ¨ ù¢Â È ê ©ø ¤ × þ ¤¢ µê¤ ¤î ýû Æþ÷ ¥ ×þ Âû Å÷îÂê ų¨ ¢ª üõ ´êþ ¤¢ Æþ÷ Æþ÷ û Æþ÷ ü÷øÂê ¥ ù¢Ôµ¨ Ýû¢ üõ ¤Âì üóøÀ ¤¢ ¤ ö ø¢¢Âð üõ ±¨½õ ßµõ :Ýî üõ Âþ ¥ ª üø¢ø¢ ´¡¤¢ ×þ
(GREEDY ALGORITHMS) ÷Êþ  ýû ݵþ ¤Úó .1.4
99
ý¤¢ î ý ù ð ø¢ Å ³ ¨, Ý þ ¥ ¨ ü õ ¤ ´ ¡¤¢ ¥ ïÂ × þ Æ þ ÷  û ý¥ Ýþ ¥¨ üõ ¤À ùÂð ×þ ùÂð ø¢ ö ý ø ù¢Âî °î Ýû ¤ ÀµÆû ý µÞî Å÷îÂê ø¢ ß .´¨ ö ùÀ÷¥¨ ùÂð ø¢ ýû Å÷îÂê áÞ¹õ  ¤À ùÂð ßþ Å÷îÂê î Ýû¢ üõ õ¢ ¤ À÷ø ¤ ßþ À÷ ùÀÈ÷ µêÂð ý¥ ñ½ î üþû ùÂð ø ¡ ùÂð  û ï ýû Å÷îÂê áÞ¹õ Àþ Èþ ¤ Å÷îÂê.Àþ ´¨¢ ´¡¤¢Èþ ¤ ÂÑ÷ ¤¢ ×þ þ ÂÔ¬ °Æ ×þ ´¡¤¢ ñþ Âû ý Àª µ¡¨ ´¡¤¢ î ñ ,Àª ÂÔ¬ °Æ  ¤ ² ´Þ¨ ñþ Âû ø ×þ °Æ ¤ ´¨¤ ´Þ¨ ñþ Âû. Ýþ Âð üõ üõ ´î û ï ´Þ¨ Èþ ¤ ´Þ¨ ¥ î ý ÂÆõ üÏ ¤¢ °Â ßþÀ .Ý÷¥ üõ ö ÂÒµõ Àî µª¤ ö î Àõ Àû¡ ´¨À ï ÂÒµõ ý Âþ Èþ ¤ ×þ, Ýî . ´¨ ï ¥ Ý þ ¤¢ ¤ µ ¡ ¤¢ ü þ ± Ô ó é 7000 Û õ ª ü µ õ À î  ê ñ · õ ý 1100,
DéÂ
1800 ,Cé 900,
AéÂ
1200,
B
é 1800 ¢À ã ß þ
ù¢ÂÈê ý ô¥ ýû ´ ¢Àã ÛìÀ Ýû¡ üõ. Ýþ ¤¢
MéÂ
200ø
EéÂ
. Ýþ ¤ ø ´¨¢ ¤ ßµõ ßþý¥¨
7000 1 4000 0
0 2200 0
3000 0
1 1
1100 1
1
0
1200
1800
900
1100
1800
200
A=00
B=01
C=1000
E=101
D=11
M=1001
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.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-1
1
î Àî Âê
Æþ÷ ·îÀ ñÏ öõ¥ ßþ Â
. ´¨ ô i-1 1 ÂÊä ¥ ü÷øÂê áÞ¹õ ¥ µð¤ à ö ü÷øÂê ô
3
n
... .. . .. 15 ... .... .... .... .... .... 7 .... .... .... .... .... .... .... .... 2 4 8
i
ÂÊä ýÂ î
(GREEDY ALGORITHMS) ÷Êþ  ýû ݵþ ¤Úó .1.4
101
MST ñÞõ ýª ´¡¤¢ ýû ݵþ ¤Úó §¤ äÞ¹õ îÀª ù¢¨ ¤¢ ´ú ÂèÀ±Þû éÂð ×þ
2.1.4
G= Àî Âê
î ´¨ üµ¡¤¢ éÂð ßþ¥ª´¡¤¢ ×þ ¥¤ Ñõ.ÀªAö ýúóþ äÞ¹õø
N
ö
´¨ éÂð ßþ ýúóþ ¥ ü¡Â Ûõª ñ ßä ¤¢ üóø ù¢ éÂ𠧤 Þû Ûõª .( ¤ ø¢ ÀìêøÀ±Þû)Àª ´¡¤¢ ¢¡ ùÀõ ´¨À ¤µ¡¨ Øþ ¤ Î
: Ìì
:Àª ¤Âì üþú Âþ ¥ ýû ù¤Ãð ¥ ×þ Âû Âðúø Âð ´¨ ´¡¤¢ .(û ñþ ¢Àã
q
, §¤ ¢Àã
T=
p) p=q+1 ,Àª ¤ ø¢ Àìê T
.1
. p=q+1ø À±Þû T
.2
.Àª µª¢ ¢ø ÂÆõ ×þÖì¢ ÃþÞµõ §¤ ø¢Âû ß .3 .Àª ¤ ø¢ Àìê ø À±Þû .4
 ö ñ þ  û î ü µ ¡¤¢)¤¢ ÷ È ÷ ´ ¡¤¢
pp−2
½ Ô ¬ ¤¢ Î Ö ÷
p
.¢Âî ݨ¤ ö üõ( ¢¤¢ °Æ
: ñ·õ ´ ¡¤¢
p−2
p
ý¤¢
Kp
Û õ î ´ ¡¤¢ :ü Þ û¤)?¢¤¢ ª ´ ¡¤¢ À  þ ¥ é ð (.´¨ ª
| {z } | K3
{z
}
K4
:Û
33−2 × 44−2 = 48 ö ýúóþ ¥ ×þ Âû îÀª ¤¢ ö¥ ø éÂð ¤ îÁõ Íþª
G
éÂð Âð ñ
ß þ ¥ Ý Þ ÷ ü õ ý ª ´ ¡¤¢ × þ ö ü õ À ª ù¢¤ ¡ ° Æ Â ü Ô õ ÷ ý¢À ä
(minimum spaning tree)
ÝÞõ ýª ´¡¤¢ ×þ ¥ ¤ Ñõ¢Âî ¿µ¨ éÂð
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.4 ÛÊê
102
áÞ¹õ Øþ ¤ Î ´¨ ö ýúóþ ¥ ü¡Âø éÂ𠧤 Þû Ûõªî ´¨ üµ¡¤¢ . ´¨ Þî ª ýû ´¡¤¢ Âþ¨ ß ¤¢ ö ýúóþ ö¥ ø
× þ ý¤¢ f Þ µ ù¢ ¨ ¤¢ ´ ú Â è ¤¢ ö¥ ø À ± Þ û é ð  û: À÷µõ Øþ üãþ Àª±÷ ¢Âê Âʽõ À÷ üõ õø Ãó î ´¨ ÝÞõ ýª ´¡¤¢ .Àþ ´¨À ª ´¡¤¢ ßþ ¥ Ç : ¢¤¢ ¢ø ÝÞõ ýª ´¡¤¢ ßµêþ ý ݵþ ¤ Úó À üÜî ¤ Ï
Prim , Kruskal, Boruvka ,Sollin
:kruskal ݵþ ¤Úó :¢¥¨ üõ ¤ ñÞõ ýª ´¡¤¢ ×þ Âþ ¥ ùª ݵþ ¤ Úó ßþ ¢Àã äÞ¹õ
n
ų¨ ÀØõ °Âõ ý¢ã¬ °Â ¤ éÂð ýúóþ Àµ
¥ ä Þ ¹ õ  ¬ ä î ´ ¨ ß þ   ê)¢¥ ¨ ü õ éÂ ð § ¤ ä Þ ¹ õ  ¬ ä ¿µ÷ ñþ
find
n-1
¢Èõ ¤ÂؤÀì ö
greedy ÖÜ ñ( À÷ù¢¤ ¡ °Æ n 1
â ų¨ Àª µª¢ ¤ ßØÞõ ö¥ ø ßþ µÞî î ¢ª üõ ¿µ÷ üóþ. À÷ª
±¨½õ
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 \ {e} ucomp←find (u) vcomp←find (v)
(GREEDY ALGORITHMS) ÷Êþ  ýû ݵþ ¤Úó .1.4
103
if(vcomp 6= ucomp) then T←T ∪{e} merge(ucomp,vcomp) until T is containing n-1 elements return T
:Àþ ÂÚ ÂÑ÷ ¤¢ ¤ Âþ ¥ éÂð ñ·õ öä
1
1 6
4
2
4
5
2
3
5
4 3
4
1
2
6 8
7
4 3
6 4
3
3
7 step
T
initialization
connected components
-
{1}{2}{3}{4}{5}{6}{7}
1
{1,2}
{1,2}{3}{4}{5}{6}{7}
2
{2,3}
{1,2,3}{4}{5}{6}{7}
3
{4,5}
{1,2,3}{4,5}{6}{7}
4
{6,7}
{1,2,3}{4,5}{6,7}
5
{1,4}
{1,2,3,4,5}{6,7}
6
{2,5}
7
{4,7}
.n log n Ýþ ¤¢ ü÷¡Âê ¤
reject {1,2,3,4,5,6,7}
n Å , ´¨ log n ù¥À÷ merge,find öõ¥ ßþ ¤¢ : Ýþ ¤¢ üêÂÏ ¥. §¤ ¢Àã
(n − 1) ≤ a ≤
n
ø ´¨úóþ¢Àã
|A| = a
n(n−1)
2
⇒ log (n − 1) ≤ log a ≤ log n + log (n − 1) − log 2 ⇒ log n ≤ log a ≤ 2 log n .¢ Àû¡
O(a log a)¥ sort
öõ¥ Å ´¨log n ¤¢ Ýû
log a
Å
.4 ÛÊê
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
104
: Prim ݵþ ¤Úó :¢¥¨ üõ ¤ ª ´¡¤¢ Âþ ¥ ùª ݵþ ¤ Úó ßþ ¢ÂðüõÂÑ÷ ¤¢ ´¨
G éÂ𠧤 ¥ üØþ Ûõª î ¤ B ô÷ ý äÞ¹õ Àµ
´Æ÷
B
¤¢ ö ÂÚþ¢ ¨ ø ´¨
ê®
B
¤ ÂÚþ¢ §b¤ ų¨,Àª µª¢ ¤ °Æ  ßþ µÞî î Àþ üõ ¤ üóþ ,
.¢ª éÂ𠧤 üãþ
N
B
¤¢ ú÷ ¨ ×þ î éÂð ýû ñþ ôÞ ß Å³¨
äÞ¹õ ÂÂ
B
ÀûÀõ õ¢ ¤ÀÖ÷ ¤ À÷ø ¤ ßþ.Àî üõ
ý¥¨ ù¢ (üÆþ Âõ ) ýÀã ø¢ ýû þ¤ ù¢¢ öÞµ¡¨ ¤ ݵþ ¤ Úó ßþ Âð Ýî ý¥¨ ù¢
binary heap
ö õ¥ Ý þ Þ ÷ ý¥ ¨ ù¢
×þ Âð õ . ´¨
fibonacci heap
O(n2 )
 ð ø ´ ¨
À ¤¢ ô¥ öõ¥ ÝþÞ÷
O((a + n)logn)Â
Âç ¤  öõ¥ ý ù¢¢ öÞµ¡¨ ø ý¥¨ ù¢ Âç Å. ´¨
ö õ¥
O(a + nlogn) Â .Àû¢ üõ
function Prim(G=< N, A >:graph,length:A −→ R+ ):set of edges B ←− {an arbitary element of N} T ←− ∅ 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 B} 2.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
(GREEDY ALGORITHMS) ÷Êþ  ýû ݵþ ¤Úó .1.4
105
11.
min ← mindist[j]
12.
k←j
13.
T=T ∪ {nearest[k],k}
14.
mindist[k] ← -1{add 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. 17.
Decrease-key(H,x,w(x,v)),π[x] ←−v end
18. return A
ݵþ ¤ Úó ý¥¨ ù¢
.4 ÛÊê
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
106
: ݵþ ¤ Úó Ãó÷
heap ݵþ ¤ Úó ßþ ¤¢
öõ¥ ø ö ´ó ø¢ î.¢ª ý¥¨ ù¢ À÷ üõ ¤ ¬ ø¢
: ´¨ ùÀª ù¢¢ ª Âþ ¥ ¤¢ û ö ý ô¥
:binary-heap ¥ ù¢Ôµ¨ üõ
key[x]
heap
óø Â þ¢ Ö õ
¤À Ö õ ß þ  µ Ø î
heap
× þ õ ýÂ î
Extract-Min â
Build-heap
â ´ ó ß þ ¤¢
O(|V |)
  ü ÷ õ¥ , ¢¥ ¨
.¢Â ð ü õ
ö¢¤ ø ´ ¨¢ ´ ó ß þ ¤¢ î,¢¥ ¨ ü õ ¤ ¡
heap
Àþ ų¨,¢¤¢ ¤Âì Èþ ¤ ¤¢ ¤ÀÖõ ßþ Âþ ¥, ´¨
Θ(1)¥ heap
×þ ù¤ø¢ ø ÝþÞ÷ ö ßþ ÃÚþ ¤ .Àª üõ
heap
O(log|V |)
üõ ßþ ÃÚþ ý µØî ¤ÀÖõ ¤
¤ÀÖõ ßþ µØî
ÂÊä ßþ ¡, µª¢Â ¤ ¤ÀÖõ ßþ
¥ÂÊä ×þ ¤ÀÖõ
ß þ ´ ó ß þ ¤¢ î , À þ Þ ÷ ü õ ý¥ ¨¥ ¤
heap
heap
Decrease-Key â
¤ µ ¡ ¨ ù¤ ø¢ Å ³ ¨ ø À þ Þ ÷
.Àª üõ
O(|E|log|V | + |V |log|V |) =
¥ ¤ ö øÀ ÷¢Â ð ü õ  ¤
¥ ÜÞä ßþ î, Ýî À ´¨¢
heap
O(log|V |)
¥ Ã÷ ÜÞä
¥ Ý µ þ ¤ Ú ó Û î ö õ¥ ° Â ß þ .Àª Àû¡
O((|E| + |V |)log|V |)
:fibonacci-heap(amortized) ¥ ù¢Ôµ¨
Extract-Min â ,¢Âð üõ ¤
O(1)
öõ¥
üõ ¤
O(|V |)
Decrease-Key â
öõ¥ öÞû
Build-heap
õ, ¢Âð üõ ¤
â ´ó ßþ ¤¢
O(log|V |)
öõ¥ öÞû Ã÷ .¢Âð
.Àª Àû¡
¤ ¬ ö ¤¢ ,
O(|E| + |V |log|V |)
|E| = Θ(|V |)
¥ ݵþ ¤ Úó Ûî öõ¥ ¤ ¬ ßþ
üãþ , Àª §¤³¨ éÂð ×þ ÂÑ÷ ¢¤ õ éÂð Âð
ü÷õ¥ ²û ø¢ Âû Âþ ¥ ¢Âî Àû¿÷ õ ü÷À ×Þî
fibonacci-heap¥ ù¢Ôµ¨
. ´êÂð Àû¡ ¤
|E| = Θ(|V |2 ) fibonacci-¥
üãþ Àª
(dense graph) Ýîµõ éÂð
ù¢ Ô µ ¨ ö õ¥ ø
|V | ¥
µð¤ Ã
|E|
O(|V |log|V |)
O(|V |2 log|V |)Â Â binary-heap ¥
î ´¨ µú ü÷õ¥
ÂÂ
×þ ÂÑ÷ ¢¤ õ éÂð Âð
.¢ Àû¡ .Àª
•
ù¢ Ô µ ¨ ö õ¥ ,
O(|V |2 )ÂÂ heap
fibonacci-heap ¥ ù¢Ôµ¨ ßþÂ
ü÷õ¥ ¤ ø¹õ Åþ Âõ ܨø ݵþ ¤ Úó ßþ ý¥¨ ù¢ î ´¨ üó ¤¢ ßþ ø .¢Âð üõ
O(|V |2 )
¥
•
(GREEDY ALGORITHMS) ÷Êþ  ýû ݵþ ¤Úó .1.4
107
: Sollin ݵþ ¤Úó üõ ¤Âì ñþ öøÀ ¤ û §b¤ ôÞ Àµ , Ýû¢ üõ ª Âþ ¥ ñ·õ ¤ ݵþ ¤ Úó ßþ µØî °Æ Â ÂÑ÷ ¥ î ö ÝþÞ÷ üõ ÆþÖõ áø ª ÂÔ¬ §¤ ¥ ų¨ Ý
4| , {z 3, 2} ø1|{z} , 6 ,5, 0 ´ ¡¤¢ ¨ ¤ ¬ ß þ ¤¢ À û¢ ü õ Û Ø È ¤ ñ þ × þ ´ ¨ |{z} C
B
A
ýû ©¥ ¤ ý¤¢ ¢ª üõ Ûʵõ ©¥ ¤ ý¤¢ ¢ª üõ Ûʵõ ø Àî üõ Ûʵõ
C
¤
B
C
ø
C B
´¡¤¢ ¥ î üþû ÂÆõ . ¢ª üõ ÛØÈ
B
´¡¤¢ î üþû ÂÆõ ø ´¨ 24ø18ø16
A
´¡¤¢ î ´¨ 16 ÂÆõ ßþ µûî Å ´¨ 25ø28 .´¨ 25 ÂÆõ ßþ µûî Ã÷ 28ø25 ß
28
0 10
1
5
24
6
14
10 2
-
16 2
6
5
18
25 4
1
0 16
14
12 22
3
12
25 4
22
3
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;
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.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)
(GREEDY ALGORITHMS) ÷Êþ  ýû ݵþ ¤Úó .1.4
109
: Knapsack üµÈ óî ݵþ ¤Úó ßþ Ýû¡ üõ.Àî ÛÞ½ À÷ üõ ¤ ,
i
W
3.1.4
ö¥ ø î Ýþ ¤¢ üµÈ óî î Àî Âê
DZüª À÷õ û DZüª ¥ ×þ Âû Àî Âê .ÝîÂ
1, 2, ..., nýû DZüª ¤ óî
ßþ ÂµÈ üµÈ óî ö¢Âî  ýÂ î ´Æ÷ éÀû .Àª
vi ©¥ ¤
ø
wi
ö¥ ø ý¤¢
ø Àø ÂÔ¬ þ Àø ×þ üª Âû ¥ ö üõ ¤ Ñõ ßþ ý Ýþ ´¨¢ ßØÞõ ©¥ ¤ :¹µ÷ ¤¢ .¢Âî ¿µ÷ Àø ¥ ý ÂÆî þ
P
.
xi wi ≤ W , xi ∈ [0, 1] P ݨ max [ xi vi ] Ýû¡ üõ õ øÀ÷¤¢ ÝÖµÆõ ´±Æ÷
©¥ ¤ û ¿µ÷
üóø Ã÷ ´  ¤ ú÷ ų¨. Ýþ ¤ ø üõ ´¨À DZª ôÞ ý ¤
vi wi ´±Æ÷ Àµ
¤Âì óî ¤¢ ø Ýî üõ ¿µ÷ ¤ DZª üØþ üØþ ´Æó ¨ ¥ ßþ Ýî üõ °Âõ üãþ ¥ µÈ
Ýþ ¥À óî Û¡¢ Ûõî ¤ Ï ¤ ý üª Ý÷µ÷ î ü . Ýû¢ üõ
weight üãþ
Ýþ µ¿þ ¤ üµÈ óî Û¡¢ ¤¢ î üª ö¥ ø üª ö ¿µ÷ .¢ª
üõ ¿µ÷
x[k] =
W −weight ù¥À÷ ô W [k]
ú ÷ ©¥ ¤ ø .À ¨¤ À û ¡ ý¥¨ °ÂõÎÖê Âþ ¥ ´¨
W
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
.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 implicity} for i ←− 2 to n D[i]←− L[1,i] repeat n-2 times v←− some element of C minimizing D[v] C←− C\{v} for each w∈ C do D[w]←− min(D[w], D[v]+L[v,w]) return D weight of edge 0 Lij = ∞
(i,j)∈ E i=j else : ñ·õ
1 10
50
= 5 10
30
100 U 4
20
W -3
R 32 5
50 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]
(GREEDY ALGORITHMS) ÷Êþ  ýû ݵþ ¤Úó .1.4
111
µª¢ ¤ ÂÆõ Øþ ý Š.Àû¢ üõ ¤ ñþ Âû ¥ ¤ ±ä þ Ãû ú ݵþ ¤ Úó ßþ Ýû¡ Å Ýþ Ãþ  ö ¤¢ ¤ ý ¤ ±ä ýû ùÂð ݪ µª¢ ÂÚþ¢ ý þ¤ Àþ ݪ : ´ª¢
function Dijkstra(L[1..n,1..n]):array D[2..n] , array P[2..n] C←−{2,..,n}{s=N\C exists only implicity} for 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 ) :ÂÆõ ö¢Âî À
: Ýþ ¤¢ Û±ì ñ·õ ý .Ýþ ¤ ø üõ ´¨¢
2 P 3
3 4 0 5
P þ¤ ýø ¤
¥ ¤ ÂÆõ
5 0
üõ ÝÖµÆõ §b¤ ö 1 §b¤ ¥ î ÀµÆû üãõ ßþÀ ÀµÆû ÂÔ¬ î üþû þ¤¢ f · õ,Â Ô ¬  è ý û þ¤¢ õ. ´ ¨ Â Æ õ ß þ  ù î ¢ ¡ Â Æ õ ß þø Ý þø ¤ 4 §b¤
ýþ¤¢ õ ø Ýþø ¤ 5 Àµ Àþ 4 ßµê¤ ý Š´¨ 5 ýø 4 ýþ¤¢ ö, . Ýþø ¤ üõ 4 ų¨ ø 5 1 ¥ Àµ4 ßµê¤ ý Š´¨ ÂÔ¬ ýø ¢¡ 5 ø
O(a+nlogn)
¥
Fibonacci-heap
ý¥ ¨ ù¢ Ý µ þ ¤ Ú ó ß þ ýÂ ö õ¥ .´¨
O((a+n)logn) ¥Binary-heap
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.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 ý µÈõ ¤Ñµ÷ öõ¥ P Ti T¯ = n : Åþø ¨ ´êþ ¤¢ ý ¤Ñµ÷ öõ¥ ͨµõ P T ´¨ üêî ø ô¥ T¯ öÀª Þî ý . ¢ª Þî : Ýþ ¥¢Â üõ Âþ ¥ ñ·õ Ýþ ¤ ø ´¨À Ýû¡ üõ î üÞµþ ¤ Úó µú í¤¢ ý , 5 ñø ý µÈõ ý öõ¥. Àû¢ üõ Åþø ¨ ý µÈõ 3
server ßþ ÀþÞ÷ Âê
.À÷ÂÚ Åþø ¨ À÷ üõ ´ó 6 ý µÈõ 3 ßþ î ´¨ 3 ô¨ ø 10 ôø¢
1 , 2, 3 1, 3, 2 2, 1, 3 2, 3, 1 3, 1, 2 3, 2, 1
=⇒ T = 5 + (5 + 10) + (5 + 10 + 3) =⇒ T = 5 + (5 + 3) + (5 + 3 + 10)
=⇒ T = 10 + (10 + 5) + (10 + 5 + 3) =⇒ T = 10 + (10 + 3) + (10 + 3 + 5) √ =⇒ T = 3 + (3 + 5) + (3 + 5 + 10) =⇒ T = 3 + (3 + 10) + (3 + 10 + 5)
(GREEDY ALGORITHMS) ÷Êþ  ýû ݵþ ¤Úó .1.4
113
ý¢ã¬ °Â Åþø ¨ öõ¥ °Æ  ¤ öþ µÈõ Åþø ¨ ý ݵƨ ßþ ¤¢ ¤ À÷ø ¤ ßþ ø Ýû¢ üõ Åþø ¨ ú÷ ´Æó ýÀµ ¥ °Â ø ÝþÞ÷ üõ °Âõ ý¥¨ °Âõ öõ¥ ú ö .À÷ÂÚ ¤ öÈÆþø ¨ û¤î ôÞ Ýû¢ üõ õ¢ ¤ÀÖ÷ . ´¨
O(n log n)
¥ Ýþ ¤¢ ¤
(Scheduling with deedline)¤¢ ´Üúõ ýÀ öõ¥ ø À÷¤¢ ¥÷  ý öõ¥ Àø ×þ ×þ Âû î Ýþ ¤¢ üþ ¤î ù¥À÷ ý¢¨ ô
i
Àª ö ´Üúõ î
di
¤î . ¢ª ô¹÷ À÷ üõ ¤î ×þ ÍÖê
n
ÀþÞ÷ Âê
(T=1,2,...)öõ¥ Âû ¤¢
ýøÆõ µÞî öõ¥ ¤¢ ¤ ¤î ßþ Âð úø Âð À÷¨¤ üõ
gi ≥ 0
Åþø ¨ öþ µÈõ ßþ Àþ ý½÷ Ý÷À Ýû¡ üõ .Àª ùÀ¨¤ ôÞ . Ýþ ü¨Âµ¨¢ ¢¨ ßþ ÂµÈ ¢¢ : ñ·õ ª û ö
deedlineø
¢¨ öÃõ °Â î Ýþ ¤¢ ý µÈõ ¤ú î Àî Âê : ´¨ Âþ ¥
i 1 2 3 4 gi 50 10 15 30 di 2 1 2 1 sequence profit sequence 1 50 2,1 2 10 2,3 3,1 3 15 4 30 4,1 1,3 65 4,3
profit 60 25 65 80−→ optimum 45 fisible þ ü÷Àª ó±÷¢
äÞ¹õ Âû ßþ . ¢Âî  ¤ ú÷ °Â Ý÷µ Âð Ýð ó±÷¢ õ ´¨
fisible , 2,1äÞ¹õ ñ·õ ýÂ
.´¨
fisible
fisible ó±÷¢ ×þ
ý¤¢
. Àª üÞ÷ ° Ü Î õ ´ Ü î ¥ î ö öøÀ ø À ª Û ç ª ¤ ¬ ø À ÷ ù¢¤ ¡ ° Æ Â ,
k
¥ ý ä Þ ¹ õ
j
¤ ý ó±÷¢
fisible
fisible , 1,2
À þ Þ ÷ Â ê
1, 2, ..., k û¤ î î À î Â ê ¢ ª Ý î
1, ..., k  ð ú ø Â ð ´ ¨ fisible , j ¤ ¬ ß þ ¤¢. À ª d1 ≤ d2 ≤ ... ≤ dk . Àª
fisible
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.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 schedule} d[0]←j[0]←0 {sentinels} k← j[1]←1{job 1 is always choosen} {gready loop} for 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 gi di
1 20 3
2 15 1
3 10 1
3 Initialization:
1 ↑ 1 3
Try 2:
2
1 ↑
Try 3: unchanged 1 3 3
4 7 3
5 5 1
6 3 3
(GREEDY ALGORITHMS) ÷Êþ  ýû ݵþ ¤Úó .1.4
115
Try 4:
2
1
4 ↑
Try 5: unchanged Try 6: unchanged =⇒ optimal sequence: 2 , 1 , 4
value=42 . ´¨
O(n2 )¥
: Disjoin Set
ݵþ ¤ Úó ßþ ý öõ¥
¥ ù¢Ôµ¨ ýÀ öõ¥ ôø¢ ݵþ ¤ Úó
üõ ô¹÷ ¤ ýÀ öõ¥ ób Æõ ùõ äÞ¹õ ù¢¢ öÞµ¡¨ §¨  ݵþ ¤ Úó ßþ f ±ì î ¤ Ï öÞû, Àû¢ merge â ø Àþ üõ ¤ ´¡¤¢ ýÈþ ¤ find â Àª ùÀûÈõ
´¨ µÞî ©ÀÜî î ö ø Àî üõ °î Ýû ¤ É¿Èõ ýû Èþ ¤ ´¡¤¢ ø¢ .Àª Àû¡ ÂÚþ¢ ýÈþ ¤ À÷¥ Âê
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]
.4 ÛÊê
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
116
. ´¨ Èþ ¤ ö î ¢ª üõ É¿Èõ Àª ©¢¡ ý ÂÊä ¤À Âð : Ýþ ¤¢ Û±ì ñ·õ ýÂ
Initilize : L=min(6, max(d,1))= 3 F=
0 0
1 1
2 2
3
4
5
6
3
4
5
6
Try 1: d1 =3 , assign task 1 to position 3 F=
0 0
1 1
2 2 M 3
Try 2: d2 =1 assign task 2 to position 1 F=
2
0 0
2 K
K 3
1
Try 3: d3 =1 no free position available since the F value is 0 Try 4: d4 =3 assign task 4 to position 2 F=
0 0
1
o 2
] 3
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)¥ ݵþ ¤ Úó
ßþ ýÂ öõ¥
(DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
117
(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;
ï¤ Ã ¢Àä ® ¤ Ï Ý þ Þ ÷  ® Ý û ¤¢ ´ ¨ ü Þ ì¤
n
1.2.4
 µ ð¤ à ¢À ä î ¤ ¢À ä ø¢ Ý û ¿  ð
?Àµê üõ üìÔ , Ýî ÛÞä Âþ ¥ ¤ ¬ Âð ñ .Àª üõ
O(n2 ) ¥
ñÞãõ
981 × 1234 = (|{z} 9 ×102 + |{z} 81 ) × (|{z} 12 ×102 + |{z} 34 ) = w
x
y
z
(w × 102 + x)(y × 102 + z) = wy × 104 + (wz + xy) × 102 + xz : Ýþ ¤¢ Å. À÷ª âÞ Ýû Àþ
T (n) ≤ 4T ( 2 ) + θ(n) ⇒ T (n) ∈ O(n2 ) 2 µú ¤ öõ¥ î ´¨ O(n ) ¥Ã÷ ݵþ ¤ Úó ßþ ÀþõÂê üõ
n
2
¢Àä ¤ú Ýû ¥
n
.Àª üÞ÷ µú ÈÞû
Ñ
õ î ¤ Î÷Þû
D&C
(wz + xy) = (w + x)(y + z) − wy − |{z} xz = r − p − q {z } |{z} | r
p
¹µ÷ ¤¢ Àî üÞ÷
q
⇒ wy × 104 + (wz + xy) × 102 + xz = p × 104 + (r − p − q) × 102 + q
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.4 ÛÊê
118
3
⇒ T (n) ≤ 3T ( n2 ) + θ(n) =⇒ T (n) ∈ O(nlog2 ) ¤¢ ´ ¨
n
2
¥ ü Â Ì õ Å Ý þ ¤¢ â Þ
n
n
2 +1 þ 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=b n2 c 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 } }
(DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
119
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 . . . b n2 c + 1], array
u[1 . . . b n2 c] ← T [1 . . . b n2 c]
v[1 . . . d n2 e + 1]
v[1 . . . d n2 e] ← T [1 + b n2 c . . . n] merge − sort(u[1 . . . b n2 c])
merge − sort(v[1 . . . d n2 e]) 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]
.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 31 3 3 31 3 31
10 ∞
3 31 ∞
17 12 43 48 8
10 54 7
17 12 43
10
17
7 54
7 54 ∞
48 8 2
12 43
2 8
48
1243 ∞
17 ∞
7 10 54 ∞
2
12 17 43 ∞
3 7 10 31 54 ∞
2
48 ∞ 2 8 ∞ 2 8
48 ∞
8 12 17 43 48 ∞
2 3 7 8 10 12 17 31 43 48 54
: ݵþ ¤ Úó Ãó÷
T (n) = T (d n2 e) + T (b n2 c) + θ(n) T (n) = 2T ( n2 ) + θ(n) =⇒ T (n) ∈ O(nlogn)
¤ ± ä ¤ üÞ÷
inplace
if u[i] < v[j]
¤ ± ä Â ð õ À ª ü Þ ÷
ݵþ ¤ Úó ßþ ß»Þû .¢ Àû¡
stable
stable
Ý µ þ ¤ Ú ó ß þ
Ýî ÛþÀ±
if u[i] ≤ v[j]
.ÀþÞ÷ üõ ù¢Ôµ¨ üØÞî ýÑê ¥ Âþ ¥ Àª
(DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
121
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 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
1
2
3
4
5
6
7
8
9
10
p=T[i]=5 k←i L ← j+1
25 11
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
5
5
5
1
17
1
48
7
3
9
8
5
↑
↑
k
L
5
1
4
.4 ÛÊê
5
4
4
48
7
3
↑
↑
k
L
3
7
48
122
25
9
8
17
25
9
8
17
25
↑ ↑ L k .¢ª üõ ä
3 |
1
5 {z
4
5
7
48
9
} ⇑ |
8
p
ô
17
LÂÊä ý Å¢µêÂÜ L¥ k
25
{z
} :ݵþ ¤ Úó ý öõ¥ ±¨½õ
: ´ó ßþ ÂÀ ¤¢Ãó ÷ Å ¢Âî ´î þ¤ ¡ ý ÂÚþ¢ ø ñø üØþ éÂÏ ø¢ ¥ Àþ
pivot
. ´¨
T(n)=T(n-1)+θ(n)
T(n)=c
•
¤¢ î¹÷¥
θ(n)
¥ ÈÞû
=⇒ T(n)=θ(n2 )
n≤ n0
÷¡ ¤¢ þ ø ¢¡ ý¤¢ þ ¤ Âû ¤¢
pivot
î Àµê üõ ëÔ ü÷õ¥ ´ó ßþ ÂÀ
û ù¢¢ þ Ø ÷ ü ã þ ¢Â ð ¤Â ì , ´ Æ ÷ ü Ü ã ê Û ½ õ
i
î
(n-i+1)
ü ã þ ö ¤ Ö µ õ
.Àª ùÀª °Âõ üóø Ã÷ þ ø À÷ ý¢ã¬
: ´ó ßþ µú ¤¢ ݵþ ¤ Úó Ãó ÷ Àª ü÷õ ¯Ö÷ ¤¢
pivot
î Àµê üõ ëÔ üõÚû ´ó ßþ µú ݵþ ¤ Úó ßþ¤¢ : ´¨  ݵþ ¤ Úó ý öõ¥ ¤ ¬ ßþ ¤¢ ,
T(n)' 2T ( n2 ) + θ(n) ⇒ T (n) = θ(n log n)
•
(DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
123
: ñ·õ ×þ ¤ þ¤ ñø ÂÊä
√ 2 n+1 , quick sort ݵþ ¤ Úó
¤ ÷õ ÂÊä ų¨ , ÝþÞ÷ üõ °Âõ
¥ ýÀþÀ ý ÷𠤢
insertion sort À÷õ üõÀÖõ ݵþ ¤ Úó
¥ ݵþ ¤ Úó ßþ ý öõ¥ ´ó ßþ  À ¤¢ , Ýþ Âð üõ ÂÑ÷ ¤¢
pivot öä
?Àþ üõ ´¨¢ üµÈð¥ Τ :Û
√
÷õ ÂÊä
=
2
n+1+1
2
=
√
n+1
µ ¨¢ ø¢ Å À ÷ Þ ü ì ¢ ¡ ý ¤¢ Â Ê ä ß þ î ´ Æ ÷ ö õ¥ ß þ  À Å
√ .Àã
´ ¨
n+2 ¥
√ 2 O((2 n + 1) ) ∈ O(n)
√ ôø¢ µ¨¢ ø ¢Àä
Ý û
insertion
n
µ¨¢ ×þ , Ýþ ¤¢ ÂÊä
ý¥ ¨ ° Â õ ýÂ ô¥ ö õ¥ .
√ T(n-( n+2)) θ(n) }| { z }| { z √ √ T(n)≤ T ( n) + T (n − n) + θ(n) + O(n)
: ͨµõ ´ó ¤¢ ݵþ ¤ Úó Ãó ÷
k−1
n−k
z }| { z }| { 1 . . . k (k + 1) . . . n T (n) = T (k − 1) + T (n − (k + 1) + 1) + θ(n) = n 1 P (T (k − k=1
n
1) + T (n − k)) + θ(n)
n n P P = 1n T (k − 1) + n1 T (n −
k=1 k=1 n− n− n− P1 P1 P1 1 1 2 0 k) + θ(n) = n T (k) + n T (k ) + θ(n) = n T (k) + θ(n) = k=0 k=0 k=0 n−1 n−1 2 2 P T (k) + θ(n) = 2 × a + 2 P T (k) + θ(n) n (T (0) + T (1)) + n n n k=2 k=2
•
.4 ÛÊê
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
θ(n lg n)
124
Í ¨ µ õ ´ ó ¤¢ ö õ¥ î Ý û¢ ü õ ö È ÷ ü ® þ ¤ ýÂ Ö µ ¨ ñ
n=2Â
ð î ´ ¨ ¼ ®ø .´ ¨
ü Àî Âê ñ. ´¨ ¤Âì ñø ôð Å, ´¨
θ(n lg n) = θ(2 lg 2) = 2
ü êÂ Ï ¥
.´ ¨ 1 Ý µ þ ¤ Ú ó ö õ¥ À ª
ùÚ÷, ´¨
T (n) =
X1 2 × a + 2 n− n
n
→ T (n) =
=
T (k) + θ(n) =
k=2
θ(k lg k) ô¥
X1 2 a + 2 n− n
n
öõ¥
k < nÂû
θ(klogk) + θ(n)
k=2
X1 2 × a + θ(( 2 ) n− (klogk)) + θ(n) n
n
2 × a + θ( 2 n
Z
k=2
n−1
xlogxdx) + θ(n)
n 2
→ T (n) = θ(nlogn) :ßþ ÂÞ ´¨¢ ¤ ÂÊä ßþ µØî ßõ
k î Àû¢ Âç ý ¤ Ï
¤
quick sort ݵþ ¤ Úó . Ýþ ¤ ø
:ßþ ÂÞ .Àþ ¤ ø ´¨¢
quick sort
¤¢ Âç ×þ ¥ ù¢Ôµ¨ ¤ û ÷õ ö¢Âî À
:Ýþ ¤ ø ´¨À Âþ ¥ ùª ¤ ¢Àä ßþ µØî ßõ µ¨¢ ×þ ·îÀ . Ýî üõ ÝÆÖ üþ 5 ýûµ¨¢ î Ý þ ¤¢ ùø  ð
(dn/5e)
k
Ýû¡ üõ ñ
(bn/5c) ¤ ÂÊä n Àµ
ß þ À ª µ ª¢ Â Ê ä 5 ¥  µ Þ î ý¢À ã ´ ¨ ß Ø Þ õ .´¨ ÂÊä
n mod 5 ý¤¢ û µ¨¢ ¥ üØþ
·îÀ
Ý µ þ ¤ Ú ó ¥ ù¢ Ô µ ¨ ¤ ý Ì ä 5 ý û µ ¨¢ ¥ × þ  û ý ÷ õ Â Ê ä Å ³ ¨ ø ¥ µ ¨¢ × þ  ¬ ä ¢À ã Â ð ´ ¨ ¼ ®ø . Ý þ Þ ÷ ü õ ± ¨ ½ õ
insertion sort
üµÈð¥ â ×þ ¥ ù¢Ôµ¨ . Ýî üõ Âê µØî ÂÊä ¤ ÷õ ÂÊä Àª 㨠¿Æ÷ ×þ ¥ ù¢Ôµ¨ ,Ýþ ¤ ø üõ ´¨À ¤ ¬ä ýû ÷õ ÷õ
select ô
i
pivotµêþ
î Àî Âê ßþÂ . Ýî üõ ÝÆÖ
ý Ç¿ ¤¢ Â¬ä ¢Àã ý üµÈ𥠤 ¬
n−i
select
x
üãþ û ÷õ ÷õ ñ ¤
Å Àª ÝÆÖ ÎÖ÷ ßþ Ç¿ Â¬ä ¢Àã
¥ Àª
i
ýøÆõ µØî
k
Âð . Àª ÝÆÖ ÎÖ÷
(DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
125
k − i ¤ ¬
ßþ Âè ¤¢ø Ýî üõ ù¢Ôµ¨ üþ Ç¿ ¤¢ Þî ÂÊä ßõ
k
ßµêþ
.ÝþÞ÷ üõ À µð¤ à ǿ ¤¢ ¤ Þî ÂÊä ßõ
•
•
•
•
•
•
•
•
•
•
•
•
•
x•
◦
◦
◦
•
•
◦
◦
◦
◦
•
•
◦
◦
◦
3( 12 d n5 e − 2) ≥ 310n − 6 x ¥ µØî Â¬ä ¢Àã ·îÀ: n − ( 310n − 6) = 710n + 6 x
¥ µð¤ Ã Â¬ä ¢Àã ÛìÀ:
üþ5 ýûµ¨¢ ý¥¨ °Âõ ýÂ î ¢ª Âî£ Àþ ݵþ ¤ Úó öõ¥ ü¨¤  ý ŠÝþ ¤¢ µ¨¢ ¤¢ .´¨
3n − 6 10
dn/5e
ö ø ´¨
T (dn/5e) Å
þ
7n + 6 10
O(1)
¥ î ¢ª üõ ù¢Ôµ¨
insertion sort ¥
Àþ ´¨Àû÷õ ÷õ Àþ ÂÚþ¢ üêÂÏ ¥ø ´¨
ýûµ¨¢ ¥ üØþ ¤¢ ÂÊä ßõ
k
O(n)
¥
î ´¨ ßØÞõ ´ó ßþ ÂÀ
: Ýþ ¤¢ Ûî ¤¢ Ýî üõ ±¨½õ ¤ µð¤ à µ¨¢ öõ¥ Àû¢ ¤
T (n) = T (dn/5e) + T (7n/10 + 6) + O(n) T (n) ∈ O(n)
ý Â¬ä ¢Àã ·îÀ
2(n/5) − 1 Ýþ ¤¢ ÂÚþ¢ ö ¥ ùÀª ¤ üÞµþ ¤ Úó ¤¢ .Àª û ÷õ ÷õ éÂÏ ø¢ ¤¢ À÷ üõ î ´¨
:Àª û ÷õ ÷õ éÂÏ ×þ ¤¢ À÷ üõ î ý Â¬ä ¢Àã ·îÀ
1 ((n − 1) − 2( n − 1)) + 2( n − 1) = 7n − 3 2 5 5 10 2
=⇒ T (n) ≤ T (d n5 e) + T ( 710n − 32 ) + O(n)
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.4 ÛÊê
126
(û Åþ Âõ ® ݵþ ¤Úó) ߨµ¨ ݵþ ¤Úó
4.2.4
ü ªø ¤ Ý û ¡ ü õ , 2 ¥ ü ÷ b ±  õ ¥ Ý þ ¤¢ ¤ µ ¡ ¤¢ Å þ  õ ø¢ À î  ê öÈ÷ ߨµ¨ .Ýî ±¨½õ ¤ û Åþ Âõ ® Û¬üóÞãõ ® ¥  âþ ¨ ¥÷
θ(n3 )
bù¥À÷ ü÷õ¥ ý¢ä ´ó ¤¢ î ¤ û Åþ Âõ ® ö üõ î ¢¢ .¢¢ Çûî
7
θ(nlog2 )
ñ¢ãõ ü÷õ¥ , ¢¤¢
Åþ Âõ ø¢ ® ´Æ÷ û Åþ Âõ ö¢Âî îÜ ß¨Âµ¨ ¤ Ñõ ßþ ý .Àû¢ Çûî ® 7 ¢¤¢ ¥÷ ® 8 ý¢ä ´ó ¤¢ î ¤
c11 c21 C= c31 c41
c12 c22 c32 c42
c14 c24 = c34 c44
c13 c23 c33 c43
: ÝþÞ÷ ® Ýû ¤¢ ¤
A=
n×n
2
a% 11 a21
2
a12 a22
:Âþ ¥ ñ·õ À÷õ
c011 c021
c012 c022
Bø A, n × n Åþ Âõ
2×2
B=
n×n
b11 b21
b12 b22
ø¢ Ýû¡ üõ ñ
,C = A ×B n×n
m1 = (a21 + a22 − a11 )(b22 − b12 + b11 ) m2 = a11 b11 m3 = a12 b21 m4 = (a11 − a21 )(b22 − b12 ) m5 = (a21 + a22 )(b12 − b11 ) m6 = (a12 − a21 + a11 − a22 )b22 m7 = a22 (b11 + b22 − b12 − b21 )
:Àþ üõ ´¨¢ Âþ ¥ ¤ ¬
m2 + m3 m1 + m2 + m4 − m7
. Ý þ ¤¢ ¥ ÷
n
n 2×2
m1 + m2 + m5 + m6 m1 + m2 + m4 + m5
C
Åþ Âõ
ý û Å þ Â õ ýÂ â Þ Û Þ ä 18ø Â ® Û Þ ä 7 ß þÂ
n 2
: ´ª¢ Ýû¡ Å
T (n) = 7T ( n2 ) + 18 2 18 n2 2 ∈ O(nlog27 − ) =⇒ T (n) ∈ O(nlog27 ) . Ýþ¢Þ÷ ù¢Ôµ¨
O ¥ θ
ý À÷ª ÂÔ¬ û þ¤¢ ¥ üÌã ´¨ ßØÞõ ö
(DEVIDE AND CONQUER) Ûø ÝÆÖ .2.4
127
:ßþ ÂÞ ÛìÀ.Ýû¢ ô¹÷ ¤ 24 ±Âõ ¥ Åþ Âõ ø¢ ® ߨµ¨ ©ø ¤ Ýû¡ üõ ?´¨ ¤ÀÖ Â® ¢Àã
T (24) = 7T (12) = 72 T (6) = 73 T (3) = 73 × 33 : ñ·õ ¤
an
b ±¨½õ ý ô¥ ýû ® ¢Àã ßþ µÞî î ¤ üÞµþ ¤ Úó Ýû¡ üõ
n 2 (a 2 ) an = a × an−1 a
. Ýþ ¤ ø ´¨¢ Àû¢ üõ õ
n ¢Âê n n=1
ø ¥
: Ýþ ¤¢ ßþ . Ýþ Âð üõ û ® ¢Àã  ¤
n T ( 2 ) + 1 T (n) = T (n − 1) + 1
0
T(n) : Û
n n n=1
ø ¥ ¢Âê
n T (b 2 c) + 1 ⇒ T (n) = T (n − 1) + 1 = T ( n−1 ) + 2 = T (b n c) + 2 2 2
0
⇒ T (n) = T (b n2 c) + θ(1) ⇒ T (n) = θ(logn)
, θ(1) = θ(nlog2 1 (logn)0 )
ø ¥
n
¢Âê n n=1
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.4 ÛÊê
128
Dynamic Programming þ üÆþ÷ õ÷Â
3.4
¤ ü Ü ¬ ób Æ õ ö ¤¢ î ´ ¨ û Ý µ þ ¤ Ú ó ß µ ª ÷ ©ø ¤ × þ þ ü Æ þ ÷ õ ÷ ή ×þ ób Æõ ý Àµ ¤¢ üãþ ÝþÞ÷ üõ Û üµÈð¥ ñõÂê ×þ ¥ ù¢Ôµ¨ óbÆõ Àµ ¤¢ î Ýþ ¤¢ ö  ü㨠Ñê ×þ ¥ ù¢Ôµ¨ ų¨ .Ýþ üõ üµÈ𥠤¢ ¤ ób Æõ Û Â üõÀÖõ ýû Û °î ų¨ Ýî Û óø Âþ¢Öõ ý ¤ ý ü¿¨ î Ýû¢ üõ õ¢ ¹÷ ¤ À÷ø ¤ ßþ . ÝþÞ÷ üõ ñ±÷¢  ´ó Û ù¤ À ÷ µ î ´ ¨ ùÀ þ¢Â ð áÀ ¹ ÷ ¥ .ÀþÞ÷ éÁ ¤ Àþ ¢ø . ´¨
D&C
DP
©ø ¤ . Ý þ ´ ¨¢ ü Ü ¬ ób Æ õ
©ø ¤ ¤¢ ´¨ ßØÞõ î ¤ ý ¤ÂØ ýû
Bottom - Up
üÜ ù¤ Û ù¤ ßþ ¤¢
: n k
=
1
n−1 k
+
n−1 k−1
k = 0 or else
n k
±¨½õ
1.3.4
k=n
5 2 4 1
3 0
? 1
3 .1..
3 1..
4 2 3 2
.. .. .. . ... ... .... ...
2 1 1 0
1 1
? 1
ݵþ ¤ Úó ßþ ý ô¥ öõ¥ ÛìÀ üãþ ´¨ µÞî
2 2
? 1
? 1
n k
¥ üØþû âÞ ¢Àã .´¨
T(n,k)=
0
k = 0 or T (n − 1, k) + T (n − 1, k − 1) + 1
k=n else
Ω(
n k
)
DYNAMIC PROGRAMMING þ üÆþ÷ õ÷Â
129
.3.4
g(n, k) = T (n, k) + 1:Âê g(n,k)=
1 k = 0 or k = n g(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 = n T (n − 1, k) + T (n − 1, k − 1) + l else
. ´¨
n k
T (n, k) =
−l
üµÈð¥ ó¢ãõ
1 − l ≥ 0 ýÂ
ÛÞä Âþ ¥ Õþ ÂÏ ×õþ¢ üÆþ÷ õ÷ ¥ ù¢Ôµ¨ °î ßþ ±¨½õ ý :Ýî üõ :Ý÷¢ üõ ø Ýþ Âð üõ ÂÑ÷ ¤¢
c
ô÷ ý ¤¢Â
c[n,k]=c[n-1,k-1]+c[n-1,k] . Ýû¢ ÛØÈ ¤ Âþ ¥ ñøÀ ´¨ üêî Å
c 0
0 1
1
1
1
→
2
1
→
3 . . . . . n-1
1 . . . . . 1
→
n
1
1 ↓ 2 ↓ 3
. Ýþ ¤¢ öµ¨
2
→ →
.
.
.
.
k-1
k
1 ↓ 3
c[n-1,k-1]
kø
ÂΨ
n
Âþ ¥ , ¢ Àû¡
θ(nk)
→
c[n-1,k] ↓ c[n,k]
¥ ±¨½õ öõ¥ Å
.4 ÛÊê
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
Âê .Ýî ¢Â¡ ýÀø
dn ,. . . d2 ,d1
130
û ñ ö¢Âî ¢Â¡ óbÆõ
2.3.4
N
Ýû¡ üõ
ýû ب ͨ ¤ ñ Àø
Ý ÷À Ý û ¡ ü õ . ´ ¨ ¢ õ ü ê î ù¥À ÷ Ø ¨  û ¥ î ´ ¨ ß þ  û ب ¢Àã ßþ µÞî ¥ î ý ¤ Ï Ýî ¢Â¡ ¤ ñ Àø
N
ßþ Ý÷ üõ ü±Â .Ýî ù¢Ôµ¨
¢Â¡ ý ô¥ ب ¢Àã ÛìÀ ¤
c[i,j]
. ýÀø
Ýî üõ Óþ Âã ób Æõ ßþ Û ýÂ
di , . . . , d1 ýû ب ͨ
0 ∞ c[i,j]= 1+c[1 , j-d1 ] c[i-1 , j] min{ c[i-1 , j],1+c[i , j - di ]}
ñ Àø
j
ö¢Âî
j=0 i=1 , j < d1 i=1 , j ≥ d1 i > 1 , j < di i >1 , j ≥ di
:¢¢Âð üõ ¢Â¡ Âþ ¥ ¤ ¬ ñ Àø 8 ñ·õ öä
amount d1 =1 d2 =4 d3 =6
0 0 0 0
1 1 1 1
2 2 2 2
3 3 3 3
4 4 1 1
5 5 2 2
6 6 3 1
7 7 4 2
8 8 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 j1 and j
N+1ø ÂΨ n
Âþ ¥ ,´¨
θ((N + 1)n)
¥ öõ¥
DYNAMIC PROGRAMMING þ üÆþ÷ õ÷Â
131
{0, 1} üµÈ óî óbÆõ ¤ ö Ýû¡ üõ . Àî ÛÞ½ À÷ üõ ¤
vi
ö ö¢Âî  ýÂ.Àª üõ
ö ©¥ ¤ø
W
wi
ô
.3.4
3.3.4
ö¥ ø î Ýþ ¤¢ üµÈ óî Àî Âê
i
üª ö¥ ø .Ýî Â
1,2,. . . n
ýª
Àþ ßþ .(Ýþ ¤À÷ ý ÂÆî ´ó)¢ÂØ÷ þ ¢Âî ¿µ÷ ¤ üª ö ö üõ ¤ Âû .x i
∈ {0, 1} ö
¤¢ î ݪ µª¢ ¤
Ûì ö¥ ø üµÈ óî ×þ î üª¥ ¤ ·îÀ : Ýþ ¤¢ ßþ .Àª µª¢
max(
v[i,j]
P
ø
P
xi wi ≤ W
Ýî üõ Óþ ÂãÛ ýÂ
1,2,. . . i
0 −∞ or 0 V[i,j]= V1 V[i-1,j] max{ V[i-1,j],Vi +V[i-1,j-wi ]}
xi vi )
ýª À÷ üõ
j
ÛÞ½
j=0,∀ i i=1 , 0<j < w1 i=1 , j ≥ w1 i > 1 ,0< j < wi i >1 , j ≥ wi
:ÀþÞ÷ ´ì¢ Âþ ¥ ñ·õ
weight w1 =1 w2 =2 w3 =5 w4 =6 w5 =7
unit v1 =1 v2 =6 v3 =6 v4 =22 v5 =28
0 0 0 0 0 0
. ´¨
1 1 1 1 1 1
2 1 6 6 6 6
3 1 7 7 7 7
θ((W + 1)n)
4 1 7 7 7 7
5 1 7 18 18 18
6 1 7 19 22 22
7 1 7 24 24 28
8 1 7 25 28 29
9 1 7 25 29 34
10 1 7 25 29 35
11 1 7 25 40 40
¥ öõ¥ ¢ª üõ ùÀûÈõ î ¤ Ï öÞû
: 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
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
P
.4 ÛÊê
üØÞî þ¤ ¥ ö üõ ÂÆõ ßµêÂð ýÂ. ´¨
132
θ(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 :ÀþÞ÷ ´ì¢ Âþ ¥ ñ·õ
15 4 1 I 30 5 5
15
50 2
15
0 5 ∞ ∞ 50 0 15 5 D0 = L = 30 ∞ 0 15 15 ∞ 5 0 0 5 20 10 50 0 15 5 D2 = 30 35 0 15 15 20 5 0 0 5 15 10 20 0 10 5 D4 = 30 35 0 15 15 20 5 0
5
- 3
0 50 D1 = 30 15 0 45 D3 = 30 15 0 4 P = 0 0
5 ∞ ∞ 0 15 5 35 0 15 20 5 0 5 20 10 0 15 5 35 0 15 20 5 0 0 4 2 0 4 0 1 0 0 1 0 0
?Àî ¢¹þ À÷ üõ üÜØÈõ Àª üÔõ éÂð ýû ñþ ö¥ ø Âð : ßþ ÂÞ ? ÀþÞ÷ ü¨¤ Â
Dijkstra
ݵþ ¤ Úó ¢¤ õ ¤¢ ¤ ßþ ÂÞ : ßþ ÂÞ
DYNAMIC PROGRAMMING þ üÆþ÷ õ÷Â
133
(chained matrix multiplication) û Åþ Âõ ýù¹÷¥ ® üõ
di−1 × di
A1 , A2 , ..., An
± Â õ ¥Ai Å þ Â õ Â û.À µ Æ û ø Â Ô õ
® ßþ Øþ ¤ Ï ÝþÞ÷ ±¨½õ¤
A=A1 A2 .....An
.3.4
5.3.4
Å þ Â õ
n
Û¬ Ýû¡ üõ .Àª
÷ð Àþ û Åþ Âõ ¤î ßþ ý ´¨ üúþÀ .Àµê ëÔ ßØÞõ öõ¥ ßþ µÞî ¤¢ .¢ª Þî ú÷ ýú ® ¢Àã î À÷ª ý ¤Áðõ÷ ý ® ¢Àã ÛìÀ
mij
îÝþ ¥¨ üõ ö ¤ .Àª
mii = 0
Ai ±¨½õ ¤¢ô¥ ®
mii+1 = di−1 di di+1
M=(mij )n∗n Åþ Âõ ¤ Ñõ ßþ ýÂ
Ai Ai+1 .....Aj
® ±¨½õ ý ô¥
¢Àã
Ai Ai+1 ±¨½õ ¤¢ô¥
® ¢Àã
: Ýþ ¤¢ ¤ Âþ ¥ Íø ¤ û Åþ Âõ ® ¤¢ Ý÷¢ üõ
A = (aij )p×q B = (bij )q×r C = (cij )p×r = AB ⇒ cij =
q P
k=1
aik bkj
for i=1 to p do for j=1 to r do
∈ θ(pqr)
for k=1 to q do cij = cij + aik bkj
: Ýþ ¤¢ ßþÂ
( Ai Ai+1 ...Ak )(Ak+1 ...Aj ) mij =
0 i=j mini≤k≤j−1 {mik + mk+1,j + di−1 dk dj }
j>i , i=1,2,.....n-1
: Ýþ ¤¢ Âþ ¥ Âçµõ Âç
j=i+s ⇒ 0 s=0 , i=1,...,n mi,i+s = mini≤k≤i+s−1 {mik + mk+1,i+s + di−1 dk di+s } i=1,2,.....n-s , 1≤ s ≤n-1
.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−1 {m[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− X1
s(n − s) = Θ(n3 )
s=1
.Àþ ¤ ø ´¨À ¤ û ® ¢Àã ÛìÀ Âþ ¥ ýû Åþ Âõ ¤¢: ñ·õ
A1 = A13×5 m 11 m22 s=0 =⇒ m 33 m 44 m12 s=1 =⇒ m23 m34
A2 = B5×89
A3 = C89×3
A4 = D3×34
=0 =0 =0 =0 = d0 d1 d2 = 13 × 5 × 89 = 5785 = d1 d2 d3 = 5 × 89 × 3 = 1335 = d2 d3 d4 = 89 × 3 × 34 = 9078
m13 = {m11 + m23 + 13 × 5 × 3, m12 + m33 + 13 × 89 × 3} s=2 =⇒ = min{1530, 9256} = 1530 m24 = 1845
DYNAMIC PROGRAMMING þ üÆþ÷ õ÷Â
135
s=3 =⇒
.3.4
m14 = min{m11 + m24 + d0 d1 d4 , m12 + m34 + d0 d2 d4 , m13 +
m44 + d0 d3 d4 }=2856
ú üþø¢ø¢ ý¹µÆ ´¡¤¢ ´¡¤¢ ×þ ýø ¤ ¤ ÀÜî
n
ßþ Ýû¡ üõ î Ýþ ¤¢ ¤µ¡ ¤¢ ÀÜî
n
6.3.4
î Àî Âê
ý ü ã õ ñ Þ µ ý¤¢ û À Ü î ß þ ¥ × þ  û .Ý û¢ ¤Â ì ü þø¢ø¢ ý ¹ µ Æ ¢Âê Âʽõ ÀÜî) .À÷ ùÀª °Âõ ý¢ã¬ °Â û ÀÜî .Àª üõ ü¨Âµ¨¢ ´¨ ¼®ø .Àª üõ × þ ¤ À Ü î
n
pi
ô
i
ÀÜî ü¨Âµ¨¢ ñÞµ î ´¨ ßþ  Âê( ´¨
ß þ ü ±  î Ý þ Þ ÷ ü ¨¤ Â Ý û ¡ ü õ .
n P
i=1
pi =
1 î
ÝÞ÷ üõ û ùÂð ü¨Âµ¨¢ þ Ãû ͨµõ ÝþÞ÷ ÛþÀ± üþø¢ø¢ ý¹µÆ ´¡¤¢ .Àª ÕÎõ ú÷ ü¨Âµ¨¢ ñÞµ ø û ÀÜî ù¤Þª ñøÀ î Àî Âê ñ·õ ý :Àª Âþ ¥
node
6
12
18
20
27
probability 0.2
0.25
0.05
0.1
0.05
34 0.3
35 0.05
üõ. ´¨ Âþ ¥ Ûت ´ª¢ üþø¢ø¢ ý¹µÆ ´¡¤¢ ×þ ö üõ î ü¥ üØþ ¢Àã üê¢Ê Âçµõ Å. Ý ¤ û ùÂð áÞ¹õ ü¨Âµ¨¢ þ Ãû ͨµõ Ýû¡ .Àª üõ ü¨Âµ¨¢ ý û ÆþÖõ
34 12
6
35
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
.4 ÛÊê
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
ñ , Àª üõ
n P
i=1
pi (depth(ci ) + 1)
136
ÂÂû ùÂð ôÞ ü¨Âµ¨¢ þ Ãû ͨµõ
.Àõ Àû¡ ´¨¢ ý ÂÚþ¢ ¤ÀÖõ Àª Âþ ¥ ¤ ¬ ´¡¤¢ Âð
12 6
20 34
18
35
27
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
´¨¤ ´Þ¨ ý þ Ãû ø ´¨
ck
ci,k−1 ÂÂ ck
öÀ ÷¥  ê ô Þ ¥ ñ Þ µ × þ Ý þ ¤¢ ¤ . ´¨
pk
² ´Þ¨ ýûÈþ ¤ ýÂ þ Ãû
ck
È þ ¤ î ü µ ìø Å .´ ¨
ck+1,j
Ã÷ Èþ ¤ ¢¡ ý .¢ª üõ ê® áÞ¹õ
ci,k−1 + ck+1,j + pk + pi + ... + pk−1 + pk+1 + . . .+ pj = cik−1 + ck+1j +
j X t=i
pt
DYNAMIC PROGRAMMING þ üÆþ÷ õ÷Â
137
⇒ cij = mini≤k≤j {(cik−1 + ck+1j ) +
j X
.3.4
pt }
t=i : Ýþ ¤¢ Å
ci,i+s =
j = s + i ÝþÞ÷
pi
üõ Óþ Âã
s = 0, i = 1, ..., n
i+s P pt mini≤k≤i+s {ci,k−1 + ck+1,i+s } + t=i
1≤s≤n−1 ,1 ≤ i ≤ n−s
.´¨ û Åþ Âõ ý ù¹÷¥ ® ±ª õ÷ ßþ Àî
.
n− P1 s=1
(n − s)(s + 1) = θ(n3 ):
Ýþ ¤¢ Ã÷  öõ¥ ý ø : ñ·õ
:Ýþ ¤¢ ¤µ¡ ¤¢ ¤ Âþ ¥ ÀÜî 4 Àî Âê
Don
Isabelle
Rulph
Wally
key[1]
key[2]
key[3]
key[4]
p1 = 38
C 1 2 1 38 98 2 3 4
3 8
3
p2 = 38
p3 = 18
p4 = 18
P 1 1 1
2 1
3 2
4 2
2
2
2
2
3
3
4
11 7 8 4 5 1 8 1 3 8 8 1 8
3
4
4
Isabelle
Don
Rulph
Wally
. ´¨ ÂÆõ Åþ Âõ
P
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.4 ÛÊê
138
íµÈõ µª¤ Âþ¥ ßþ µð¤ à Y = y1 y2 . . . yn , X = x1 x2 . . . xn
Ý û ¡ ü õ .À ª µ ª¤ ø¢
7.3.4 À î Â ê
,µª¤ ×þ ¥ µª¤ Âþ ¥ ×þ ¥ ¤ Ñõ.Ý ¤ ø¢ ßþ ß íµÈõ µª¤ Âþ ¥ ßþ µð¤ à .Àª ùÀõ ´¨À µª¤ ö ¥ é À þ ×þ þ ºû éÁ ¥ î ´¨ ý µª¤ :×õþ¢ Û .Yj
= y1 y2 . . . yj ,Xi = x1 x2 . . . xi
ÝþÞ÷ üõ Óþ Âã
LCS=Longest Common Subsequence
LCS[Xi , Yj ] =
0
1 + LCS[Xi−1 , Yj−1 ]
M ax{LCS[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
4 5 6 7 8 9
to
m
do
c[i,0]← 0 for j←0
to
n
do
m
do
c[0,j]←0 for i←1
to
for j←1
to
n
do
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
i = 0 or j = 0 xi = yj , i 6= 0, j 6= 0
else
16
c[i,j] ←− c[i,j-1]
17
b[i,j] ←− ” ← ”
18 return c and b
//θ(nm)
DYNAMIC PROGRAMMING þ üÆþ÷ õ÷Â
139
.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 j i
Y=BDCABA
LCS=BCBA
0
1
2
3
4
5
6
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
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.4 ÛÊê
140
ü÷ú ÖÆõ ý óbÆõ ö ¤¢ Àþ ´¨¢ ý¥ ø Â
n Ý
ø¢ ¥ üØþ Àû¢ üõ ÖÆõ ¤ÀÖ÷
B
8.3.4 ø
A
Ý ø¢
ø¢ ßþ î ´¨ üúþÀ .Àþ ù¤ ÖÆõ Àã ýÜÂõ À÷ üõ Ý ßþ ¤ ¬ .(¢¤À÷ ¢ø ýøÆ ´ó ) Àª µª¢ ý¥ Àª
q
ÂÂ
B
¢Â ¹µ÷ ¤¢
A
2n − 1 ·îÀ ø n ÛìÀ Àþ Ý
´Æت ñÞµ ø
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 ≥ 1 p(0, j) = 1 ∀j ≥ 1 p(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+j j
−1
µê¤ ¤î ýû âÞ ¢Àã ñب ñõÂê ¥ ù¢Ôµ¨
¢Àã  ø¢ ü¨¤  ¢¤ õ üµÈð¥ ý Τ ¤¢ û ® ¢Àã î Ý÷¢ üõ õ
•
•
DYNAMIC PROGRAMMING þ üÆþ÷ õ÷Â
141
üõ ô¹÷ ®
4 2n+1 ¥
2
2n − 2 n
n
üõ
µð¤ à î, ´¨
¢Àã
Ω
2n n
p(n, n)
.3.4
ý ±¨½õ ý Š. ´¨û âÞ
À ¤¢ ü÷õ¥ ý¤¢ Àî ¹µ÷ ¤¢ ø .¢ª
. ´Æ÷ Àõ¤î ©ø ¤ ßþ ¥ ù¢Ôµ¨ Å. Àª
:
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 )¥ ü÷õ¥
3 2 1 0 ..1.. .... ..1.. 0 0 .....1 ........ ........ . . . . . . .... .... .p+pq .... 1 .....0 ........p .. .. . . . . . ..... 2 ..2.. 3 2 ....0 ........p p + pq + pq . . . . . . 3 ....0 0 n
4
üðÀ» °Â ßþ
n
•
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.4 ÛÊê
142
¢Âð ù¤ø¢ ùÀªø Âê óbÆõ î ý ¤ Ï ¢¢Âð ø ¢ø  Âúª
n
9.3.4
Àû¡ üõ ¢Âð ù¤ ø¢ ùÀªø Âê ×þ Àî Âê
É¿Èõ þ Ãû ÂÆõ ×þ ÂÚþ¢ Âúª Âû ¥ üãþ Àª µª¢ ¤ ÂÆõ þ Ãû ßþ µÞî .¢¤¢ ¢ø
ü õ ö È ÷
W
minlenght.
ýÀ ã ø¢ þ¤ Í ¨ ¤ §¤ ´ ¨
ø ´¨
n 1
ÅþÀ÷
P[i][A]
A
j
ø
i
n
¤¢ ´ ú éÂ ð ¹ þ ¤¢ :Û
§¤ ß ñ þ ñ Ï ùÀ û¢ ö È ÷
¥ ö ýûÂΨ î ´¨ ýÀã ø¢ þ¤ . ´¨ ùÀª ý ¤Áð ÅþÀ÷
§¤ Þû ¥ î ´¨
v1
vi
V − v1
P,
W[i][j]
¤ Ê ÷ ¤¢ Ý û¢
´¨ ú ¤ ùÀû¢ öÈ÷
ýû äÞ¹õ Âþ ¥ ͨ ö öµ¨
¥ ÂÆõ ßþ Â ùî ýø ¤
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 -{v1 }contaning 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 }]; }
û ý¥ ´Þ÷¤
143
û ý¥ ´Þ÷¤ ÂÊä
n
.4.4
4.4
ß ¤ ÂÊä ßþ µð¤ à ßõø¢ üãÎì ݵþ ¤ Úó ×þ ¥ ù¢Ôµ¨ Ýû¡ üõ
©ø ¤ ßþ ¤¢. ´¨ ùÀª ý ¤¢Â Úó üêÁ ýû ô ©ø ¤ ¥ ´Þ÷¤ ©ø ¤ Ý :¢ª üõ ÛÞä Âþ ¥ ùª û Ý öõÂúì ö¢¤ ø ´¨À ý ÖÆõ Ýû Ý ø¢ Âû ų¨ ùÀª ÝÆÖ üþ 2 ýû µ¨¢ ¢õ ýû Ý ý ¤Ãð  À÷ø ¤ ßþ ų¨ Àþ ù¤ Àã ¤ ø¢ À÷ üõ û Ý ßþ öõÂúì Àû¢ üõ .¢ª É¿Èõ û öõÂúì öõÂúì Ø÷ Àþ üõ õ¢ ýÀã ´Þ÷¤ :ñ·õ
20
13
20
20
14
19 20
¢À ã .´ ¨
dlg ne
14
12 9
12
13 5
13
á Ô ¤ À ª ± ÷ 2 ö ¥ ü Â Ì õ  ¬ ä ¢À ã Â ð ¹ þ ¤¢ .´¨
n=2 : k
8
lg n X n i=1
2i
2h − n −∞ ¬ä
n (1 − ( 12 )lg n ) 1 = 2 = n(1 − ) = n − 1 1 n 1− 2
Àª±÷ 2 ¥ ü÷ öª¢Àã î ý ¬ä ÝÞþ Ãîõ ö¢¤ ø ´¨À ý ©ø ¤ ßþ ´ ¨À ý õ ¢¤À ÷ ü ó Þ ã õ ©ø ¤ ü ì ê î,¢¤¢ ¥ ÷ Æ þ Ö õ
n-1
ö Þ û Ã ÷
. ´¨ °¨õ ÂÊä ßþ µð¤ à ßõø¢ ö¢¤ ø Èþ ¤ ýû ùÀ÷¥ ß ¤¢ ¤ ÝÞÆîõ Àþ ÂÊä ßþ µð¤ à ßõø¢ ö¢¤ ø ´¨À ý .Ýþ ¤¢ Èþ ¤ ùÀ÷¥ ÂÊä, ´¡¤¢ áÔ¤ ù¥À÷ Å . ÝþÞ÷ À( 20 üãþ)
n-1+dlg ne-1=n+dlg ne-2
Û î ¤¢ Å . ´ ¨
dlg ne -1
û Æ þ Ö õ ¢À ã Å . Ýþ ¤¢ ÆþÖõ
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.4 ÛÊê
144
ö¢¤ ø ´¨À ý ÆþÖõ ¢Àã ÛìÀ ÆþÖõ ¢Àã ßþ Àû¢ öÈ÷ : ßþ ÂÞ . ´¨ ÂÊä ßþ µð¤ à ßõø¢
B &T ( Back Tracking )
5.4
¥ ÜÿÆõ ×þ Û ý ö ¤¢ î ´¨ üÆþ÷ õ÷ ×Ø ¢Âð °Öä ´Èð¥ ýÌê ¥ ÎÖ÷ Âû üãþ. ¢¢Âð üõ ù¢Ôµ¨(¤¢ ´ú ´¡¤¢) ¤¢ ´ú éÂð ×þ üõ ÂÑ÷ ¤¢ ¤¢ ´ú ´¡¤¢ þ éÂð ×þ ¥ ñþ ×þ þ ø §¤ ×þ ÂÒµõ ¤ ÜÿÆõ Âþ ¥ µØ÷ üµÆþ î ´Æ÷ ´¨ Ýúõ
B&T ÛÆõ
Promissing â
Û ¢¤ õ ¤¢ î »÷ . Ýþ Âð
: ¡ª ¤ µîê : Óó . ¢ª
ö ä §b¤ × þ ¥ ö ü õ î ü þ û ù ð ¢À ã  · îÀ ü ã þ ¡ ª ¤ µ î ê þ î À î ü õ ü ¨¤ Â î ´ ¨ ü ã
promissing
â ø ´ ª¢ ü ¨Â µ ¨¢ À ÷¥  ê
üãþ ¡ ùÂð ¿µ÷ öØõ ¥ ¤ Ñõ . ¡ þ ´¨ (fisible) ü÷Àª ¡ ùÂð ¿µ÷ ßþ ´þ Ãõ . ¡ þ Àõ Àû¡ ¢ø üÜ¡À þ Ëì ùÂð ßþ ¿µ÷ Øþ . ´¨û ´ó ôÞ ö¢¢ ©ø ¤
Âþ¥ø nóÆõ ý ¤ Ï Ýû¢ ¤Âì ¤ Âþ ¥ ø
n ,n×n ¸÷ÂΪ ½Ô¬ ×þ ¤¢
1.5.4
Ýû¡ üõ î Àî Âê
Û ¡À î ¢ ª × À þ ¹ þ ¤¢ .À þ Þ ÷ À þÀ ú ¤ Â Ú þÀ Ø þ ý  þ ¥ ø ø¢ º û î
[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] k abs(col[i]-col[k])==i-k) switch=false; k++;}//{end of while} return switch;} .´¨n ¡ª ¤ µîê Å Ýþ ¤¢ öµ¨
n¡ª Âû¤¢
:¡ª ¤ µîê
B &T ( BACK TRACKING )
145
.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);} } .ÀþÞ÷ ÛÞ½¤ ¤¢.´ ¨
wi
W
ö¥ ø À÷ üõ î Ýþ ¤¢ üµÈ óî ×þ î Àî Âê : ñ·õ
ö¥ ø ý¤¢ ü ª  û.Ý î Â
n, ..., 2, 1
ª ¤ ó î ß þ Ý û ¡ ü õ
î Àª ý ÷ð Àþ ö¢Âî  ù½÷.ÝþÞ÷ ¿µ÷ Ý÷µõ ¤ üª ºû þ ×þ ¹þ ßØÞõ ýúµó ôÞ Ýû¡ üõ .Àª
w
 À÷ª üõ ¿µ÷ î üþª ö¥ ø fÖì¢ .Ý ¤
w1 = 3, w2 = 4, w3 = 5 ª ö¥ ø
ø
13 üµÈ óî
ö¥ ø î Àî Âê
Â𠢪 üõ ê® üª ö Àª ×þ ñþ °Æ Âð ´¡¤¢ ßþ ¤¢ .Àª ¤¢ Âþ ¥ ´¨
2
w4 = 6
ø
¡ª ¤ µîê .´¨ ÕÞä ñø ´¡¤¢ ßþ. ¢ÈÞ÷ ê® Àª ÂÔ¬ .Ýþ ¤¢ À÷¥ Âêø¢ ùÂðÂû
w1 w2 w3 1
3
1
1 13 √
0
3 0
1
7
8 0 × 7 ×
0
1
0
7
12 ×
0
1
4 0
1
0
3 ×
9
4
×
×
0 0 ×
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
weightk =
k− P1 i=1
xi wi , totalk =
n P
.4 ÛÊê
146
wi
i=k
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Æõ 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);} }
2.5.4
B &T ( BACK TRACKING )
147
.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
m-coloring óbÆõ ýÃõ Ù÷¤ ö Ù÷¤
m ¤ Àªüõ §b¤ n Ûõª î éÂð ×þ
3.5.4
§¤ Ýû¡üõ
.Àª±÷ Ù÷ÂÞû ý ¤ ø¹õ §b¤ ø¢ ºû î Ýî . ´¨
m
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);} }
¡ª ¤ µîê óbÆõ ßþ ¤¢
üÆþ÷ ݵþ ¤ Úó Óܵ¿õ ýû ©ø ¤ üêÂãõ
.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) ×Ø Back Tracking ©ø ¤
6.4
ü÷øÂê ´û±ª î ´¨û ݵþ ¤ Úó ý¥¨ù¢ ×Ø ×þ
¤¢ ù ð  û ý ( óø ¤À Ö õ)
Bound
×þ
B&B
f Þ ã õ .¢¤¢ ©ø ¤ ý¥ ¨ù¢ ¤¢
Ýî ùÂð Âû ¿µ÷ ø ÂÆõ Âû ¿µ÷ ý üµÆþ ¹µ÷ ¤¢ ,¢ªüõ µêÂð ÂÑ÷ ÂÑ÷ ¤¢ î Àª ýÀ÷ ¥ ÂµÈ ÀÊÖõ ùÂð ùÂð ßþ ¥ öÀ¨¤ b þ Ãû Âð î ý f ± ó è .¢ ªü õ §Â û Â Æ õ ö â ìø ¤¢ .Ý þ Â Ú ÷ Â Ñ ÷ ¤¢ ¤ Â Æ õ ö ,Ý þ µ ê ð .¢¢Âðüõ ù¢Ôµ¨
BFS
¤µ¡¨ ¥ ©ø ¤ ßþ ý¥¨ù¢
5 ÛÊê û éÂð Çþ
Exploring graphs û éÂð Çþ .5 (Depth First Search) DFS ݵþ ¤Úó procedure 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)
1.5
û éÂð Çþ
.5 ÛÊê
150
: Ýþ ¤¢ ñ·õ öä
1
2
3
4
5
6
7
8
1 2
4
3
7
6
8
5
1. 2.
DFS(1)
=⇒ mark[1]=visited , mark[2] 6= visited DFS(2)
3.
DFS(3)
4.
DFS(6)
5. 6.
DFS(5)→ .À÷ùÀª
visit ¤ ø¹õ ýû¢÷ Þû ¹þ
DFS(4)
7.
DFS(7)
8.
DFS(8) : ñ·õ
ö õ¥ ¤¢ î ¢¤¢ ¢ ø . ´¨úóþ ¢Àã
DF-Search A
Ý µ þ ¤ Ú ó ¥ ý¥ ¨ ù¢ À û¢ ö È ÷
ø §¤ ¢Àã
N
î .¢ª üõ ý¥¨ ù¢
θ(|N | + |A|)
(DEPTH FIRST SEARCH) DFS ݵþ ¤Úó
151
.1.5
:Û öõ¥ öÞû Öì¢ Ýµþ ¤ Úó ý¥¨ ù¢ î ¢Þ÷ öÈ÷ ÂÏ¡ Àþ ¾¨ ¤¢ .¢Þ÷ ù¢Ôµ¨ ´Æó ý¥¨ ù¢ ¥ ö üõ ø ¢¤¢ ¥÷ ùÀª Âî£ î ´¨ ßØÞõ ¤¢ ´ú éÂð ×þ ¤¢ ´¨ ¢úÈõ Âþ ¥ ñ·õ ¤¢ î ¤ Î÷Þû ´¨ ¼®ø Àª À±Þû Âè éÂð »÷.¢Âî ÇþÞ ¤ §¤ ôÞ öµ÷ §b¤ ×þ .¢ª ü÷¡Âê
DF-Search ñø ¤ üµÆþ
éÂð ýû Ôó b õ ¢Àã ù¥À÷ î
1 6 2 3 6I 6
R
w 6
5
4 6 7
R ? 8
I -
2 ? 3 K
1 ~
4
o
? q 8 ? 7
1. DFS(1) 2.
DFS(2)
3. 4.
DFS(3) DFS(4)
5.
DFS(8)
6.
DFS(7)
7. DFS(5) 8.
DFS(6)
5 ? 6
.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 p{w is the new top(p)} pop(p)
(Breath First Search) BFS ݵþ ¤Úó procedure
2.5
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 While
v
into
Q
Q is not empty
do
u ← first(Q) dequeue for
u
from
Q
each node w adjacent to u
do
if Mark[w] 6= visited then Mark[w] ←− visited enqueue ö¢Â î
visit
w into
Q
à ÷ û ñ þ ô Þ Â þ ¥ ´ ¨
O(|N | + |A|)
¥  µ Þ î Ý µ þ ¤ Ú ó ö õ¥ .À÷¤À÷
TOPOLOGICAL SORT ý¦ó ý¥¨ °Âõ .3.5
153
: Ýþ ¤¢ ñø ñ·õ ý ÷Þ÷ öä
node visited
1. 2. 3. 4. 5. 6. 7. 8.
1 2 3 4 5 6 7 8
Q
16 , 2 , 3, 4 | {z } 26 , 3, 4, 5 ,6 |{z} 36 , 4, 5, 6 46 , 5, 6, 7 ,8 |{z} 56 , 6, 7, 8 66 , 7, 8 76 , 8 86
Topological Sort ý¦ó ý¥¨ °Âõ
3.5
üóþ  °Öä ÂÜ §b¤ ¥) ´¨ ¤ ø¢ Àìê ø ¤¢ ´ú î Ýþ ¤¢ üêÂð Àî Âê î ´¨ ö éÂð ßþ §¤ ý¥¨ °Âõ ý ©ø ¤ ×þ ¤ ¬ ßþ ¤¢ ( Ýþ ¤À÷ : Ýî ÛÞä Âþ ¥ ùª ´¨ ÕÞä ñø ÇþÞ) .´¨ ÂÔ¬ ö ý¢ø ¤ ø ¤¢ î Ýþ üõ ¤ ü¨b¤ Àµ Ûʵõ ýû ñþ ôÞ ø §b¤ ö ų¨ ù¢Þ÷ ¿µ÷ ¤ §b¤ ö ( ê® ¯Âª õ ¤À Ö ÷ ¤ À ÷ø ¤ ß þ . Ý ûÀ õ õ¢ ¤ Õ ¨ þø ¤ f¢À ¹ õ . Ý î ü õ éÁ ¤ ö ¥ µêÂð ©ø ¤ ßþ î ´¨ üúþÀ . À÷ª ù¢Þ éÂ𠧤 ôÞ ÝûÀõ õ¢ öõ¥ ¹µ÷ ¤¢. ÂµÈ ùÀî ¢øÀ½õ Íþª õ , ´¨ ö Èõ f Öì¢ ø .´¨
θ(1)
¥ ùÀî ¢øÀ½õ Íþª öõ¥ Âþ ¥ ´¨
θ(|N | + |A|)
DFS ©ø ¤
À ¤¢ ö ýÂ
¥ Óܵ¿õ üø ¡ À ø Àª üÞ÷ ¢Âê Âʽõ î ´ª¢ Àþ : Ýþ ¤¢ ñ·õ öä . ݪ µª¢ Ý÷ üõ ݵþ ¤ Úó ßþ
*3
-6
s 2?
-4
1
1,3,2,4,6,5
j 5 3
:Àª ¤ ¬ ßþ À÷ üõ û üø ¡ ¥ üØþ ñ·õ ßþ ýÂ
û éÂð Çþ
.5 ÛÊê
154
Bellman Ford ݵþ ¤Úó Bellmanݵþ ¤ Úó ¢ª
4.5
ù¢Ôµ¨ üþ ÂÆõ ý À÷ üõ î üþû ݵþ ¤ Úó ¥ üØþ
À÷µõ ö ýúóþ °ÆÂ î ¤¢ ´ú éÂð ×þ ý ݵþ ¤ Úó ßþ . ´¨
Ford
¤Ø §¤ Âþ¨ â±õ ùÂð ô÷ üûÂð ¥ ÂÆõ ßþ µûî ßµêþ ´ú Àª üÔõ üÔõ ö¥ ø ý ¤ ø¢ î Àî ¤î ´¨¤¢ À÷ üõ ü÷õ¥ ݵþ ¤ Úó ßþ µ±ó . ¢ø ¤ üõ .Àª µªÀ÷ . Àª üõ â±õ §¤
s
ø
G=< V, E >
ø éÂ𠧤 äÞ¹õ
V[G]
IN IT ILIZE − SIN GLE − SOU RCE(G, s) 1.
for each vertex
v ∈ V [G]
2.
d[v] ← ∞
3.
π[v] ← N IL
4.
do
d[s] ← 0
RELAX(u, v, w) 1.
if
d[v] >d[u]+w[u,v]
2.
d[v] ← d[u] + w[u, v]
3.
π[v] ← u
then
BELLM AN − F ORD(G,w,s) 1.
INITIALIZE-SINGLE-SOURCE(G,s)
2.
for
3.
i← 1 for
4. 5.
to (|V [G]|-1) each
edge
(u, v) ∈ E(G)
do
RELAX(u,v,w) for
each
edge
(u, v) ∈ E(G)
6.
if d[v] > d[u]+w(u,v)
7.
return FALSE
8.
do
return TRUE
then
//θ(|V ||E|)
: Ýþ ¤¢ ñ·õ öä
DAG ݵþ ¤Úó
155
.5.5
5
5 r ^x ∞ ∞ 6 3 I-2 6 -3 8 7 s 0y2 -4 ? R j 7 -∞ ∞ 9 y z
R x ∞ 6 -2 6> Y 6 8 -3 s 0 y2 7 -4 R 7s ? -∞ 7 9 y z r
(b)
(a) 5 r ^ x 6 -2 4 6 I 7 6 8 -3 7 2 i s 0 ? -4 w -2 7s 7 9 z y
5 r ^ x 4 2 6 3 I -2 6 8 -3 7 s 0 y2 -4 7 s ? R 2 7 9 y z (d)
(c) 5
x 4 63 I-2 6 8 -3 7 s 0 y2 ? -4R q - -2 7 7 y 9 z (e) r 2
w
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)
û éÂð Çþ
.5 ÛÊê
156
ý¥ ¨ ° Â õ ´ Ü ä ö õ¥ ø ´ ¨ ¤ ø ¹ õ ´ Æ ó Ý µ þ ¤ Ú ó ß þ ý¥ ¨ ù¢
θ(|V | + |E|)ÂÂ 6 1 x y t sz ~ 2- ∞ 7- ∞ -1- ∞ -2 -∞ * > > 4
:Àî ´ì¢ Âþ ¥ ñ·õ .´¨
r ∞
s 5- 0 3
2 6 r ∞
s
50
t 2- ∞ 3
1 x y z 7-s -1- ∞ -2-~ ∞ ∞ * 4
3 r ∞
s 5- 0
2
6 t 22 >
1 y sx ~z 7 - 6 -1- ∞ -2- ∞ 4
3 r ∞
s 50
6 t 22
2
1 z y s -1-2 6 4 * 4 > 2
x 7 -s 6
3
1 y z s t ~ s x -1 -2 2575 6 4 0 2 3 3 4 3 2 3 6 1 x r y s jz t j ∞ 5 - 0 2- 2 7 - 6 -1- 5 -2- 3 3 > 4 3 2 6 1 x r z s y t s -2 s -127∞ 5- 0 6 2 5 -3 * * 3 4 3 2 6
r ∞
ñØþ¦ ó
6 ÛÊê ¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
LOOP INVARIANT
1.6
? ´Æ LOOP INVARIANT
. ´¨ üÜØÈõ ¤Æ ¤î Àµê üõ üìÔ ÖÜ Âû¤¢ Ý÷À õ î ßþ ,À÷ÂþÁ üõ öþ ÂÑ÷ ¢¤ õ éÀû öÀ¨¤ öøÀ î üþû ÖÜ þ öþ ü ýû ÖÜ
Loop Invariant ßþ õ¥ ßþ ¤¢.ÀµÆû ³õî üÆþ÷
õ÷ ¤¢ ¸þ¤ ÛØÈõ ×þ
.Àî üõ ×Þî õ î ´¨ ´¨¤¢ ݵþ ¤ Úó ×þ þ Ý÷À ÝþÞ÷ üõ ù¢Ôµ¨ û
Loop Invariant ¥
õ âìø ¤¢
.¡ þ Àî üõ ¤î û Âçµõ ß Î¤ î ´¨ µó õÂê ¤±ä À üûð þ ×þ
Loop Invariant
ß»Þû ø ÖÜ Û¡¢ öõ¥ Âû ,ÖÜ ý ¥ Û±ì î Àî üõ ö ¤õ ýõ÷ ¤¢ .À÷õ üõ üì ´¨¤¢ ÖÜ ýúµ÷ ¤¢
ø
LOOP INVARINT
óø Ý û Ô õ î ´ ¨ ö  ü ã ¨ ´ Þ Æ ì ß þ ¤¢
ñ·õ À Ã÷ úµ÷ ¤¢ ø ¢ª ù¢¢ ¼® Âʵ¿õ üÜ¡ ¤ ¬ ö ¥ ù¢Ôµ¨ ¥ ÂÏ . ´¨ ùÀª ù¢¤ ø ö ¥ ù¢Ôµ¨ ¥ Óܵ¿õ
ùÀ û È õ ¤
Loop Invariant
¥ ù¢ Ô µ ¨ ü Ü î ý Ú ó × þ ´ Þ Æ ì ß þ ¤¢
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
.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
LOOP INVARIANT .1.6
159
ü µ ¨¤¢  ´ ó¢ 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 P
i=1
loop invariant : sumk =
INITIALIZATION:
i
k P
i=1
i
.6 ÛÊê
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
precondition
´¨ ´¨¤¢
ýÂ
160
loop invariant ¢¢Âð
üõ ùÀûÈõ î ¤ Ï öÞû :
k = 0 ⇒ sum =
0 P
i=1
i = 0 = sum
MAINTENANCE: Àª ´¨¤¢ ÖÜ ¤ÂØ ¥ ô
j ÜÂõ ýÂ loop invariant
ÂðÝû¢ üõ öÈ÷ ñ
: ´¨ ´¨¤¢ Ã÷ ÖÜ ¤ÂØ ¥ ô
kj+1
sumj =
P
j=1
j+1 ÜÂõ ýÂ
j , kj+1 = kj + 1
sumj+1 = sumj + kj+1 = (
kj P
j=1
j) + kj+1 = (
kj P
j=1
j) + kj + 1 =
kj+1
P
j=1
j
TERMINATION: ¤±ä
loop invariant ö ý¥
ý¥ îÀª üõ
k=n
î ÝþÞ÷ üõ × ¤ ÖÜ ¥ ø ¡ ¯Âª ñ
ÖÜ ¥ ø ¡ ¯Âª.Àû¢ üõ õ ¤
postcondition : Ýþ ¤¢ ö
sum =
n P
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
LOOP INVARIANT .1.6
161
loop invariant : f act = i ! postcondition : f act = n ! ........................................................................................ INITIALIZATION: i = 1 ⇒ f act = 1! = 1 ⇒ f act = i ! MAINTENANCE: f act0 = j 0 ! , j = j 0 + 1 , f act = f act0 × j
⇒ f act = j 0 ! × j = j 0 × (j 0 + 1) = (j 0 + 1)! = j! ⇒ f act = j!
TERMINATION: i = n , f act = i! ⇒ f act = 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. 8. 9. 10.
else nprime - = mprime;} return mprime; }
..................................................................................................... precondition : m, n ∈ Z +
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
.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
¤ Ü ÍÆ ñø ýÜÞ
1. double TaylorExp(double n ,int k){
k
î üÞµþ ¤ Úó(4
LOOP INVARIANT .1.6
163
2.
double result =1;
3.
int count =0;
4.
int denom=1;
5.
while (count
6.
count ++;
7.
denom×=count;
8.
result+=pow(n,count)/denom;
9. 10.
} return result;
11.
}
...................................................................................................... precondition : n ∈ Z
k ∈ N, k > 0 2
loop invariant : result = 1 + n + n2! + · · · + 2
ncount count!
, denom = count!
postcondition : 1 + n + n2! + · · · + nK! = result ............................................................... K
INITIALIZATION: count = 0,
denom = 1,
0
result = 1 ⇒ n0! = 1 = result
MAINTENANCE: 2
resulti = 1 + n + n2! + · · · +
ncounti counti !
, denomi = counti !
⇒ denomi+1 = denomi ×counti+1 = (counti !)×counti+1 = (counti+1 )!, 2
n n resulti+1 = resulti + (count = 1 + n + n2! + · · · + ncounti ! + (count i+1 )! i+1 )! counti+1
counti
TERMINATION: 2
count = k ⇒ result = 1 + n + n2! + · · · +
nK K!
≡ postcondition
counti+1
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
.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.
if a ⊕ 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
¥ Ü Â õ ß þ ¤¢ î ø
bj+1 ø aj+1
cj+1
¢ ª ü õ ùÀ û È õ Ý ¹ Í ¡ ¤¢ î ¤ Ï ö Þ û ß » Þ û
¥ ø¢ î ´¨ ×þ üµìø ú Àþ üõ ´¨¢ : ´ª÷ Âþ ¥ ¤ ¬ ¤
cj+1
ö üõ
bj+1 ø aj+1 Å,Àª ×þ cj cj
ø
LOOP INVARIANT .1.6
165
cj+1 = b(aj+1 + bj+1 + cj ) / 2 c
¢ø ¤
xj+1 ø
¤ ¬ ¤
ùÀª âÞ
xj+1
dj
xj
üµìø ô¤ú Í¡ ÕÎõ Ýû ¤ ¬ ßÞû
ö üõ Å Àª ×þ
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 Âþ¢Öõ
¤ÂØ Âû ¤¢
: Ýþ ¤¢ ¤ÂØ ßõ
yk = zk = ck = 0 ⇒ xk = y0 + z0
k
zø y
¤ Âû ö ß»Þû
¥ Àã üãþ ÖÜ ¥ ø ¡ öõ¥
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
ùÀ÷¢Âð  î ý
x
.6 ÛÊê
166
¤ÀÖõ À¨¤ üõ öþ ݵþ ¤ Úó üµìø î ¢ª üõ ùÀûÈõ Å . ´¨õ ýóø
ô¹÷ ¤ üã±Ï ¢Àä ø¢ ® Âþ ¥ ݵþ ¤ ÚóÀû¢ öÈ÷
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;
5.
return(x)
z :=b z/2 c;
........................................................................................................ 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
LOOP INVARIANT .1.6
167
k ¤¢ ëÔ ßþ Âð
î Àª Àû¡ ÂÔ¬ ÂÂ
z ¤ÀÖõ Àþ üõ öþ ÖÜ î úµ÷ ¤¢ø : Ýþ ¤¢ Àû¢ ¤ ÖÜ ¤ÂØ ßõ
zk = 0, xk + yk × zk = y0 z0 ⇒ 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; return (q , r)
7.
....................................................................................................... loop invariant : qj wj + rj = y0 , rj < wj
r = y0
ø
q=0
ÖÜ ¢ø ¤ ø ¥ Û±ì, Ýþ Âð üõ ÂÑ÷ ¤¢ ¤¢
y0
¤
y ýóø ¤ÀÖõ
: Ýþ ¤¢ Å ´¨
r = y0
, q = 0 ⇒ qj wj + rj = 0 + y0 = y0
: üãþ,Àª ¤Âì ô
j
ýÜÂõ ýÂ
loop invariant Ýî üõ Âê
ñ
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
.6 ÛÊê
168
qj wj + rj = y0 , rj < wj
ÖÜ ø¢ ýø ¤ ý ¤Àì ´¨ ô¥ ýÀã ¤ÂØ ¤¢ û Âçµõ ´ã®ø ßã ý ñ ÖÜ ¤¢, ݵêÂð ÂÑ÷ ¤¢
z
ÂÂ ¤
w
ýúµ÷ ¤¢ Å, ÀþÞ÷ üõ  ø¢ ¤
ñø ÖÜ áø ª ¥ Û±ì,ÝþÞ÷ Ûõ ݵþ ¤ Úó
w
´¨ ¤ÂìÂ
ü õ ø ¥ ý¢À ä ß » Þ ûø ´ ¨  µ ð¤ Ã
w
´ ¨
w>z
ø ¥ ý¢Àä ø ¥
z
y
w≤y
¯Âª î üãìõ ñø
¥ î À þ ü õ ´ ¨¢ ýw Ö Ü ß þ
î ü ã ì õ Ö Ü ß þ ¤¢, Ý þ ª ü õ ôø¢ Ö Ü ¢¤ø ñ ,À ª
bw/2c ù¤Þû î ´¨ ¼®ø,¢¢Âð üõ ±¨½õ ö
Âð, ݵêÂð ÂÑ÷ ¤¢
w = z õ Âõ ýÀµ ¤¢
Óî ø ùÀª ÓÊ÷
î ´¨ ÂÏ¡ ßþ ßþ ø ´¨
¤  û ø À ÷ õ ü õ ü ì ø ¥ à ÷ öÀ ª   ø¢ ¤  û ø ù¢ ø ¥ à ÷ Àª ¢Âê
w
z ¤ÀÖõ Âð
w
À ª
ñ, Ýþ ÂÚ ùÀþ¢÷ ¤ Óî ´õ
ä Ý÷ üõ Ã÷ öÀª ÓÊ÷
ßþ Ã÷ ôø¢ ÖÜ ¤¢ õ , Ýþ ¤¢ ¤µ¡ ¤¢ üø ¥ ý
w
ñø ÖÜ ýúµ÷ ¥ Àã
ý¢Âê ¤ÀÖõ Àû¿ Âð ø ¢¢Âð üõ ±¨½õ ö Óîø ùÀª ÓÊ÷ ¤ Âû ùÀõ ´¨¢ ÖÜ ý ¤Â젯ª î ´¨ üó ¤¢ ßþ ø ¢ Àû¡ .Àª üõ
w/2
ÂÂ
bw/2c
qj+1 = 2qj
z
¢¡  Àª µª¢
¤ÀÖõ ÖÜ ßþ ¤¢ ¤ÂØ ¤ Âû ¤¢ Å, ´¨
, wj+1 = bwj /2c
: Ýþ ¤¢ ô
j + 1 ¤ÂØ
w>z ¤¢ ñ
: ÝþÞ÷ ü¨¤  ¤ ´ó ø¢ Àþ ñ
: Ýþ ¤¢ Àª±÷ ¤Âì ݹ Í¡ ¯Âª Âð
wj+1 > rj ⇒
1:
rj+1 = rj
(a)
, qj+1 wj+1 + rj+1 =
2qj bwj /2c + rj = 2qj (wj /2) + rj = qj wj + rj = y0 2:
wj+1 > rj ⇒ rj < wj+1
, rj+1 = rj
⇒ rj+1 < wj+1
: Ýþ ¤¢ Àª ¤Âì ݹ Í¡ ¯Âª Âð
(b )
LOOP INVARIANT .1.6
169
wj+1 < rj ⇒
1:
rj+1 = rj − wj+1 = rj − bwj /2c, qj+1 = qj+1 + 1 = 2qj + 1 ⇒ qj+1 wj+1 + rj+1 = (2qj + 1)bwj /2c + rj − bwj /2c = qj wj + 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
ݵþ ¤ Úó Å
qk z0 + rk = y0
, rk < z0
: Ýþ ¤¢
= 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)
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
.6 ÛÊê
170
loop invariant : xj yj zj = y0 z0
loop
Õ ± Ïø ù¢
x0 =
1 À µ ¤¢ , Ý þ  ð ü õÂ Ñ ÷ ¤¢ z0 ø y0 ¤ zø y óø  þ¢ Ö õ : Ýþ ¤¢
invariant
xj yj zj = y0 z0
j+1 ÜÂõ ý ÖÜ ñø ¤ Õ±Ï ø ô j
ÜÂõ ýÂ
loop invariant
§¨  ñ : Ýþ ¤¢ ô
xj yj zj = y0 z0 , 2 Àª ¢Âê z Âð ⇒ xj+1 = xj yj , zj+1 = bzj /2c, yj+1 = yj
Àª ø ¥
z Âð ⇒ xj+1 = xj ,
zj+1 = bzj /2c,
yj+1 = yj 2 : Ýþ ¤¢ Å
2×bzj /2c Àª ¢Âê z Âð : xj+1 yj+1 zj+1 = xj yj × (yj ) = 2×(zj −1)/2 = xj yj zj = y0 z0 xj yj × (yj ) 2×bzj /2c Àª ø ¥ z Âð : xj+1 yj+1 zj+1 = xj × (yj ) = 2×(zj )/2 = xj yj zj = y0 z0 xj × (yj ) ô
k
ÜÂõ À÷õ ÜÂõ ×þ ¤¢ î À¨¤ üõ öþ üãìõ ÖÜ Ã÷ ¤î ýúµ÷ ¤¢ : Ýþ ¤¢ Å
z=0ݪ µª¢
xk × yk zk = y0 z0 , zk = 0 ⇒ xk = y0 z0
ö óø
y
¢ª üõ ù¢¢ Ûþ½ õ ݵþ ¤ Úó ýúµ÷ ¤¢ î ý
x
°Â ßþÀ
.¢¢ õ ¤ ÜÎõ ý¹µ÷ Ã÷ ݵþ ¤ Úó ßþ Å, ´¨ óø
z
LOOP INVARIANT .1.6
171
þ¤ ¤¢ ¢ õ  þ¢ Ö õ  þ ¥ Ý µ þ ¤ Ú óÀ û¢ ö È ÷
loop invariant
¥ ù¢ Ô µ ¨ (9
:ÀþÞ÷ üõ âÞ ÂÚþÀØþ ¤
A[1 · · · n]
function sum(A) comment
return
1.
s :=0;
2.
for i := 1 ton do
3.
s :=s+A[i]
4.
return (s)
Pn
i=1
A[i]
.....................................................................................................
loop invariant : sj =
j X
A[i]
i=1
loop
Õ ± Ï Ã ÷ õ ø ´ ¨ Â Ô ¬   þ¤  ¬ ä á Þ ¹ õ Ö Ü ¢ø ¤ ø ¥ Û ± ì : Ýþ ¤¢
j = 0 ⇒ s = s0 = ýÜÂõ ýÂ, Àª ¤Âì ô
j
0 X i=1
ýÜÂõ ýÂ
invariant
A[i] = 0
loop invarint Ýî üõ Âê ñ : Ýþ ¤¢ ô
sj+1 = sj + A[j + 1] = (
j X i=1
A[i]) + A[j + 1] =
j+1 X
j+1
A[i]
i=1
: Ýþ ¤¢ Ã÷ ÖÜ ¥ ø ¡ ôÚû ¤¢
j = n ⇒ s = sn =
n X
A[i]
i=1 . ´¨ ݵþ ¤ Úó ¥ õ ¤Ñµ÷ ¢¤ õ ý¹µ÷ öÞû î
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
.6 ÛÊê
172
ý Ü Þ À ¤À Ö õ þ ¥ Ý µ þ ¤ Ú óÀ û¢ ö È ÷ Àî üõ ±¨½õ
¥ ù¢ Ô µ ¨ (10
Horner ©ø ¤ ¥ ù¢Ôµ¨ ¤ an xn + an−1 xn−1 + · · · a1 x + a0 :À÷ùÀª ù¡£
A[i] = ai
loop invariant
f or
A[0..n]
þ¤ ¤¢ °þ® ö ¤¢ î
0≤i≤n
all
function Horner(A , n) Pn comment return i=0 A[i].xi 1.
v := 0
2.
for i := n downto 0 do
3.
v := A[i]+v.x return (v)
4.
.................................................................................................. loop invariant : vj =
n X
A[i]x i−j
i=j
Á ó, À þ Þ ÷ ü õ ù¢ Ô µ ¨ ü È û î
for
ý Ö Ü ¥ Ý µ þ ¤ Ú ó ß þ î ¢ Þ ÷ À þ
Ý þ ¤¢ Ö Ü ¢ø ¤ ø ¥ Û ± ì ø µ ê ð Â Ñ ÷ ¤¢ ¤ ¬ ¤ : Ýþ ¤¢
j =n+1 ⇒v =
n X i=n+1
: Ýþ ¤¢ ýÀã ýÜÂõ ¤¢, Àª ¤Âì ô
vj = A[j] + vj+1 .x ⇒ vj+1 = n P
i=j+1
A[i]xi−j−1 =
öÞû î
n P
i=j+1
j=0⇒v=
n P
i=0
vj −A[j] x
j
loop invariant
loop invariant Õ±Ï
j=n+1
A[i]xi−(n+1) = 0
ýÜÂõ ýÂloop n P
=
Å
õ
invariantÂð ñ n P
A[i]xi−j −A[j]
i=j
=
x
A[i]xi−j
i=j+1
x
=
A[i]xi−(j+1)
A[i]xi
: Ýþ ¤¢ ø ùÀª
j=0
ÖÜ ¥ ø ¡ ôÚû ¤¢
. ´¨õ¤Ñµ÷ ¢¤ õ ý¹µ÷
(AMORTIZED ANALYSIS)
173
(Amortized Analysis)
üî
úµ¨ Ãó÷
üî
úµ¨ Ãó÷
.2.6
2.6
Ãó÷ ¤¢ . ´¨ üî
úµ¨ Ãó÷ , ÜÞä ¥ äÞ¹õ ×þ Ãó÷ ýúªø ¤ ¥ üØþ ÜÞä ôÞ ýø ¤ ý ù¢¢ öÞµ¡¨ ÜÞä ¥ äÞ¹õ ×þ ý öõ¥ üî
úµ¨ Ýî üõ ù¢Ôµ¨ µØ÷ ßþ ö¢¢ öÈ÷ ý ©ø ¤ ßþ ¥ . ¢ª üõ ßت¨ ùÀª  þ Ãû äÞ¹õ ×þ öø ¤¢ ÛÞä ×þ Âð üµ ´¨ ×î ÛÞä Âû ͨµõ þ Ãû î Ãó÷ õ Ýî üõ ´±½¬ ͨµõ ø ßÚ÷õ ¢¤ õ ¤¢ õ Âð . Àª µª¢ ý¢þ ¥ üÞ÷ Ûõª ¤ ý ¤õ ýû ©ø ¤ ø ¢¤¢ øÔ ßÚ÷õ ´ó ¤¢ Ãó÷ üî
úµ¨ ´÷Þ® ¤ ´ó ßþ ÂÀ ¤¢ ÛÞä Âû ͨµõ ý öõ¥ üî
úµ¨ Ãó÷ ×þ . ¢ª . Àî üõ
üî
úµ¨ Ãó÷ á÷ À ¤ ± ä ü î
ú µ ¨ à ó ÷ ý û ©ø ¤ ß þ  ¢Â ¤ î  ¥ ©ø ¤ ¨ :¥
(Aggregate
Analysis) üãÞ¹
n
¥ äÞ¹õ ×þ,û
n
•
(Acconting
Method)
üÆ ©ø ¤
•
(Potential
Method)
ÛÆ÷µ ©ø ¤
•
(Aggregate Analysis) üãÞ¹ Ãó÷ ¤¢ ÜÞä
Ãó÷
1.2.6
ôÞ ý¥ Ýû¢ üõ öÈ÷ üãÞ¹ Ãó÷ ¤¢
ͨµõ þ Ãû , ´ó ßþ ÂÀ ¤¢ ßþ  . ¢Âð üõ ¤ ý ͨµõ þ Ãû ßþ î Àî . ´¨
T (n) fäÞ¹õ, ´ó ßþ ÂÀ
T (n) n ÜÞä Âû üî
úµ¨ þ Ãû þ
¢õ äÞ¹õ ¤¢ ÜÞä ¥ á÷ ßþÀ î üµìø üµ , ´¨ 뢬 ÜÞä Âû ÜÞä ¤ üøÔµõ ͨµõ ýû þ Ãû ´¨ ßØÞõ ýÀã ©ø ¤ ø¢ ¤¢ õ . ÀµÆû ¤ ýÀã ©ø ¤ ø¢ ´ì¢ õ ´¨ ù¢¨ Âð ©ø ¤ ßþ . Ýû¢ ´±Æ÷ Óܵ¿õ ýû Âû «Ê¿õ üî
úµ¨ þ Ãû ×þ ÛÆ÷µ ø üÆ ýû ©ø ¤ ÛÞä ¤¢ . ¢¤À÷ . Àû¢ üõ «Êµ¡ ÛÞä
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
. Ýî üõ Ãó÷ ¤ ¢¤ø ¤
x
ÂÊä :
1
.6 ÛÊê
174
µÈ ù¢¢ öÞµ¡¨ , üãÞ¹ Ãó÷ ¥ ñ·õ ßóø ¤¢
push(S, x)
:¥ ´Æ¤±ä ÀµÆû
O(1)
: 1 ñ·õ
¥ î µÈ üܬ ÛÞä ø¢ .ÀØõ
.À÷¢Âð üõ ¤ ö , µª¢Â ¤ üõ Âê À÷ª üõ Â
push
ÜÞä
n ¥
O(1)
S
µÈ ÂÊä ßþ  :
k
µÈ
pop(S)
öõ¥ ¤¢ û ÜÞä ßþ ¥ ôÀî Âû î üþ¹÷ ¥
äÞ¹õ ×þ üþú÷ þ Ãû ßþ . Àª 1 ôÀî Âû þ Ãû Ýî
n , pop ø
. ´¨ ý ¥ ¤ ÂÊä
S
î Ýî üõ ê® µÈ ¤
k
ü õ ü ó ¡ ¤ ö , À ª µ ª¢ Â Ê ä
¥ Â µ Þ î ,
multipop(S, k) S
ÛÞä ×þ õ ñ
S
µ È Â ð þ ø . ¢¤À õÂ
µÈ . Àî
TRUE ¤ÀÖõ Stack-Empty â Âþ ¥
µÈ ¤¢ ý ÂÊä ºû Âð ¢Âð üõ . À÷¢Âð üõ ¤
FALSE
Àî ±ª ¤¢
¤ÀÖõ ¤ ¬ ßþ Âè ¤¢ , Àª±÷ ¢õ
Multipop(S, k) 1. while
not
Stack-Empty(S)
2.
do pop(S)
3.
k ←k−1
µÈ ×þ ýø ¤ ¤
multipop
ø
pop
ø
and
push
k 6= 0
ÜÞä
n
¥ äÞ¹õ ×þ ¹þ ¤¢
µÈ Ãþ¨ Âð ´ó ßþ ÂÀ ¤¢ äÞ¹õ ßþ¤¢ , Ýî üõÃó÷ ´Æó¡ Àµ ¤¢ î ý öõ¥ ´ó ßþ ÂÀ ¤¢ . ´¨ . ¢ª üõ
O(n2 )
O(n)
¥
multipop
Ûî þ Ãû ßþÂ ´¨
ÛÞä þ Ãû Àª
O(n)
n
·îÀ
¥ µÈ ¤¢ ÜÞä Âû
ßþ ÂÀ ¤¢ þ Ãû ùÀõ ´¨¢ ¹µ÷ õ ´¨ ´¨¤¢ Ûܽ ßþ Âð äÞ¹õ Ý÷µõ üãÞ¹ Ãó÷ ©ø ¤ ¥ ù¢Ôµ¨ . ´Æ÷ Ýؽõ ´ó ÛÞä Âð , ´ÖÖ ¤¢ . Ýþ ¤ ø ´¨À µú üþ öÂî ×þ ÜÞä ø
push
. ¢¤¢ ¤
Ü Þ ä
O(n)
n
¥ ä Þ ¹ õ  û õ ¢Â ü õ ý¢ þ ¥ þ à û ü þ ú
þ à û ,  · îÀ ü ó ¡ ýÀ µ ¤¢ µ È × þ ýø ¤
n
Ûõª
multipop
multipop
ø
pop
µ ª¢Â µ È ¥ ¤ ± Ø þ À ÷ ü õ Í Ö ê µ È ¢ø ¤ ø ¤  û ý¥ Â Ê ä  û ö ×þ ýø ¤ , (multipop ßµêÂð ÂÑ÷ ¤¢ ) . ´ ¨
n
   · îÀ î ´ ¨
push
pop
â ü÷¡Âê ¢Àã , ßþ . ¢ª
â ü ÷ ¡Â ê ¢À ã ü ú Â è µ È
stack
1
(AMORTIZED ANALYSIS)
175
. ¢Âð üõ ¤
O(n)
Ûî öõ¥
multipop
þ Ãû , üãÞ¹ Ãó÷ ¤¢ . ´¨
O(n) n
ø
pop , push n
= O(1)
üî
úµ¨ Ãó÷
.2.6
n
Âû ý¥
¥ äÞ¹õ Âû ,
ÛÞä Âû ßت¨ þ ßÚ÷õ þ Ãû
ßþ ¤¢ ßþ . ´¨ ÛÞä ö ͨµõ þ Ãû öÞû âìø ¤¢ ÛÞä Âû ý üî
úµ¨ . ´¨
O(1)
µÈ ÛÞä 3 Âû üî
úµ¨ þ Ãû ñ·õ
ýû ©ø ¤ ¥ õ Ýþ ù¢Âî ±¨½õ ¤ ͨµõ þ Ãû õ Âð î ¢ª üõ Àîb ù¤ø¢ . Ýþ ù¢ÂØ÷ ù¢Ôµ¨ ý ¤õ . ´¨
2 üÈþÃê k-bit
üþø¢ø¢ ¢Àä . ´¨ ùÀ÷¤Þª öä ¤¢ ©¥ ¤ ßþ ÂµÈ ø
: 2 ñ·õ
üþø¢ø¢ ùÀ÷¤Þª ób Æõ ©ø ¤ ßþ ¥ ÂÚþ¢ ñ·õ
A[0]
length[A]=k
ñÏ
A[0..k − 1]
þ¤ ×þ
¤¢ ©¥ ¤ ßþ µÞî ý¤¢ ¢ª üõ ù¡£ ùÀ÷¤Þª ¤¢ î
: ¢Âð üõ ¤ ¬ Âþ ¥ â ͨ ÇþÃê ÛÞä .´¨
x
A[k − 1]
INCREMENT(A) 1: i ← 0
2: while i < length[A] and A[i] = 1 3: do A[i] ← 0 i←i+1
4: 5:
if
i < length[A]
then
6:
A[i] ← 1
1 û ´ Þû î ü÷õ¥ ) ´ó ßþ ÂÀ ¤¢ üþú ßþ ÂÀ ¤¢
INCREMENT
ýÂ
INCREMENT ÛÞä n ¥ µª¤ ×þ ßþ  ¢Âð üõ ¤ Θ(k) öõ¥(Àª . ¢Âð üõ ¤
O(nk)
öõ¥ , ´¨ ÂÔ¬ Àµ ¤¢ î ùÀ÷¤Þª ×þ ýø ¤ ´ó
ö î Ý ÷ ü õ À î ü Þ ÷  ç û ´ Þ û ü ÷ ¡Â ê  û ¤¢ î ß þ Ü Þ ä
A[1]
n
¥ µ ª¤ × þ ý ´ ó ß þ  À ¤¢ î ý ¤ Ï Ý û¢ ¤ ý  µ Ö ì¢
, Àî üõ Âç â ü÷¡Âê ¤ Âû ¤¢
. Àî üõ Âç ¤ . Àî üõ Âç ¤
n
b4c
Âû
A[2]
b 2ni c Âû , A[i]
A[0]
. ¢ª
ø Àî üõ Âç ¤
´ ,
O(n) n
b2c
¥
INCREMENT
Âû â ýÂ ¤
i = 0, 1, 2, · · · , blog2 c ýÂ n
. Àî üÞ÷ Âç ÃðÂû
A[i]
´ ,
n
¤¢
, üÜî ¤ Ï
i > blogn2 c
Incrementing a Binary Counter
ýÂ
2
.6 ÛÊê
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
176
: ´¨  äÞ¹õ ¤¢ û Âç Ûî ¢Àã
blg nc
X i=0
b
n
c
2
. ¢ª üõ
O(2n) n
1 2i i=0
∞ X
= O(1)
= 2n
ÜÞä Âû ͨµõ þ Ãû ßþÂ
(Accounting Method) üÆ ©ø ¤
2.2.6
üøÔµõ ýû þ Ãû Óܵ¿õ ýû ÜÞä , üî
úµ¨ Ãó÷ ¥ üÆ ©ø ¤ ¤¢ þ µÞî ÛÞä üãìø þ Ãû ¥ ´¨ ßØÞõ üûð ¦ ¤ª ßþ î ¢ª üõ ù¢¢ «Êµ¡ þ à û ¤ ¢ ª ü õ ù ¡£ Û Þ ä × þ ýø ¤ ¦ ¤ ª ö ä î ý þ à û .À ª  µ È , Àª ÛÞä üãìø þ Ãû ¥ ÂµÈ üî
úµ¨ þ Ãû î üõÚû . Ýþð í
úµ¨ ü õ µ ê ð Â Ñ ÷ ¤¢ ù¢¢ ö Þ µ ¡ ¨ ¤¢ « Ê ¡ Û Þ ä ö ¤ ± µ ä ö ä é
µ ¡ þ à û î ü þ û Ü Þ ä ý ýÀ ã ý û ´ ¡¢Â ¤¢ fÀ ã À ÷ ü õ ¤ ± µ ä . ¢ ª ¤Æ üãÞ¹ ©ø ¤ ©ø ¤ ßþ . ¢ª ù¢Ôµ¨ ´¨ üãìø þ Ãû ¥ µÞî öÈî
úµ¨ . ´¨ øÔµõ ¥ Ýû¡ üõ õ Âð . ¢ª É¿Èõ ´ìÀ ÜÞä Âû üî
úµ¨ þ Ãû Àþ Àµ ×î ÜÞä Âû ´ó ßþ ÂÀ ¤¢ ͨµõ þ Ãû Øþ ± ý üî
úµ¨ ©ø ¤ Ûî üãìø þ Ãû ý üþ öÂî ×þ üÜî üî
úµ¨ þ Ãû Àþ Ýî ù¢Ôµ¨ , ´¨ . Àª
ˆi É¿Èõ C
¤ ô
i
Û Þ ä ü î
ú µ ¨ þ Ã û ø
Ci
¤ ô
i
Û Þ ä ü ã ìø þ à û  ð : Ýþ ¤¢ , Ýî
n X
Cˆi ≥
i=1
n X
Ci
i=1
ü î
ú µ ¨ ø ü ã ìø þ Ã û ß é
µ ¡ ù¢¢ ö Þ µ ¡ ¨ ¤¢ ùÀ ª ù ¡£ ü þ ú ÷ ¤ ± µ ä . ´¨
n X i=1
Cˆi −
n X
Ci
i=1
þ à û ù Ú ÷ À ª ü Ô õ ü þ ú ÷ ¤ ± µ ä  ð . À ª ü Ô õ  è È Þ û À þ ¤À Ö õ ß þ Ûî üî
úµ¨ þ Ãû ¹µ÷ ¤¢ ø ¢Âð üõ ¤Âì Ûî üãìø þ Ãû Âþ ¥ üþú÷ üî
úµ¨ üþú÷ ¤±µä ݪ °ìÂõ Àþ ßþ . ¢ Àû¿÷ üãìø þ Ãû ý öÂî ×þ
(AMORTIZED ANALYSIS)
177
üî
úµ¨ Ãó÷
.2.6
. ¢È÷ üÔõ ù¢¢ öÞµ¡¨ ¤¢ ÜÞä üãìø þ Ãû î Ýî üõ ý ¤ ø¢¢þ Àþ ÂÚ ÂÑ÷ ¤¢ ¤ µÈ ñ·õ
:1 ñ·õ
: ´¨ Âþ ¥ ¤ ¬
Push
: 1
Pop
: 2
Multipop : 3
. Àª Âþ ¥ ¤ Ê ÛÞä Âû ý üî
úµ¨ Âþ¢Öõ Àî Âê
Push
: 2
Pop
: 0
Multipop : 0
â üî
úµ¨ þ Ãû õ ´¨ Âçµõ
multipop
üãìø þ Ãû Âð Àî
¥ ( üãìø þ Ãû ù¥À÷ ) Àø 1 Ýî üõ µÈ ¢¤ø ¤ ÂÊä ×þ üµìø ´¨ ÂÔ¬ ù¡£ üª ¤¢ ùÀ÷õ üì Àø ×þ ø Ýþ ¥¢Â üõ ¤î ßþ ô¹÷ ý üî
úµ¨ þ Ãû b . ¢ª üõ â üµìø . ´¨ µÈ ¥ üª ßµª¢Â þ Ãû âìø ¤¢ üª ýø ¤ ùÀª ù¡£ ¤±µä ßþ b b ¢ª üõ ßõ ùÀª ù¡£ ¤±µä ßþ ¥ ÂÊä ßµª¢Â þ Ãû ¢ª üõ ü÷¡Âê ¤ ü ª ýø ¤ b
multipop
þ
pop
pop
Û Þ ä ô ¹ ÷ ýÂ ü ê î ¤ ± µ ä È Þ û õ ß þ Â .
. ¢ª üÞ÷ üÔõ ùð ºû ¤±µä ´¨ µÈ ¤¢ ý ÂÊä î ü÷õ¥ . Ýþ ¤¢ î ´¨
O(n)
í
úµ¨ þ Ãû
multipop
ø
pop
ø
push
ÛÞä
n
¥ äÞ¹õ Âû ýÂ
. ´Æû Ã÷ üãìø þ Ãû ý öÂî f ±ì . Ýî üõ ü¨¤  ¤ üÈþÃê üþø¢ø¢ ùÀ÷¤Þª ñ·õ öõ¥ î ÝþÀþ¢
:2 ñ·õ
üî
úµ¨ þ Ãû . Àî üõ Âç î ´¨ üþû ´ ¢Àã °¨µõ â ßþ ý ¢ª üõ 1 ´ ×þ î üõÚû . Ýþ Âð üõ ÂÑ÷ ¤¢ 2 ¤ ×þ ÂÔ¬ ¥ ×þ Âç Âç ÂÔ¬ ¤ ´ î ü÷õ¥ ý ¤±µä ÂÚþ¢ Àø ø ¢ª üõ ´¡¢Â Àø ×þ ù¡£ ¤±µä Àø ×þ ùÀ÷¤Þª ¤¢ 1 Âû ,  ¥ ü÷õ¥ Âû ¤¢ . ¢ª üõ ù¡£ Ýû¢ ÀþÀ ¤±µä ý¥÷ ø ´¨ ¢õ ô¥ ¤±µä , ö ö¢Âî ÂÔ¬ ý ßþ ¢¤¢ Ã÷ üþú÷ ¤±µä Å ´Æ÷ üÔõ ùð ºû ùÀ÷¤Þª ¤¢ û ×þ ¢Àã ö ø ´Æ÷ þ Ãû ý öÂî î ´¨
O(n)
ßت¨ þ Ãû ßþ . ¢ª üÞ÷ üÔõ ùð ºû . ´¨ üãìø
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
.6 ÛÊê
178
(Potential Method) ÛÆ÷µ ©ø ¤
3.2.6
î ÂÚþ¢ ýû ©ø ¤ é
¡ Â î ´¨ ÛÆ÷µ ©ø ¤ , üت¨ Ãó÷ ©ø ¤ ßõ¨ ýø ¤ Û Æ ÷ µ ©ø ¤ , À ÷¢Â î ü õ ¤ î ù¢¢ ö Þ µ ¡ ¨ × þ ¤¢ É ¿ È õ ü ª × þ ýø ¤ b üê® ¤ÀÖõ î ´Æþ üÆ ©ø ¤ ö ë Âê . Àî üõ ¤î Ûõî û ù¢¢ öÞµ¡¨ . ¢ª üõ Óþ Âã ÛÆ÷µ ý¦ Â÷ öä ¹þ ¤¢ ¢¨ öÞû þ ùÀª ù¡£ ý Àª óø ù¢¢ öÞµ¡¨
D0
ø Àª
n
1 ¥ ù¢¢ öÞµ¡¨ ýû ¢Àã Âð : Ýî üõ Óþ Âã
i = 1, 2, · · · , n Âû
Ci =ô iÜÞä ô¹÷ üãìø öõ¥ Di =
ô
i
ÜÞä ô¹÷ ¥ Àã ù¢¢ öÞµ¡¨
Φ =(Potential Function)¢Â üõ üÖÖ ¢Àä ¤ Di ù¢¢ öÞµ¡¨ Âû î ÛÆ÷µ â Φ : Di → RealN umber Cˆ0 = Ci + Φ(Di ) − Φ(D i
i−1 ) ô
i ÜÂõ ¤¢
üت¨ þ Ãû
:ÜÞä
n ýÂ
Ûî üî
úµ¨ þ Ãû
n n n n P P P P [Ci + Φ(Di ) − Φ(Di−1 )] = Ci + Φ(Di ) − Φ(Di−1 ) Cˆi =
i=1
=
i=1
n P
i=1
i=1
i=1
Ci + Φ(Dn ) − Φ(D0 )
ýÂ üþ öÂî Ûî üî
úµ¨ þ Ãû ßþÂ
Φ(Dn ) > Φ(D0 )
Ýî ÂêÂð
. ¢ ª ô ¹ ÷ ´ ¨ ß Ø Þ õ Ü Þ ä À Ý ÷¢ ü Þ ÷ õ ö . ´ ¨ Û î ü ã ìø þ Ã û
Φ(Di ) ≥ Φ(D0 ) Φ(D0 ) = 0
:
i Âû ýÂ
Ýî Âê Âð ßþÂ
⇒ Φ(Di ) ≥ 0
´¨  ÛÆ÷µ Âç ßþ . ´¨ üÔõ Âè â ×þ ÛÆ÷µ â üãþ :
Φ(Di ) − Φ(0) > 0
for all i
. ´¨ µÆø ÛÆ÷µ â ¿µ÷ ¹þ ¤¢ ùÀõ ´¨À üî
úµ¨ þ Ãû ßþ . ´ª¢ Ýû¡ Óܵ¿õ üî
úµ¨ ýû þ Ãû Óܵ¿õ ýûÛÆ÷µ â ý¥ . ´¨ ÛÆ÷µ â ßþ µú ¿µ÷ ÛÆ÷µ ©ø ¤ ¤¢ õ ¤î ßþ µÞúõ
(AMORTIZED ANALYSIS)
179
üî
úµ¨ Ãó÷
: Ýî üõ Óþ Âã . Ýî üõ ü¨¤  ¤ µÈ ñ·õ
Φ(Di ) = D0 =
.2.6
: 1 ñ·õ
µÈ Û¡¢ Â¬ä ¢Àã
üó¡ µÈ
Φ(D0 ) = 0 Å ¢ ª ü Þ ÷ ü Ô õ ù ð º û þ¤ × þ Û ¡¢ Â ¬ ä ö
Àª µª¢ ÂÊä
s µÈ , i − 1
Φ(Di ) ≥ 0 = Φ(D0 ) ÜÂõ ¤¢ Ýî üõ Âê
Φ(Di−1 ) = s i ÜÂõ¤¢ push
Âð
i ÜÂõ ¤¢ pop â
Âð
:¢ª  ô
Φ(Di ) − Φ(Di−1 ) = (s + 1) − s = 1 Cˆi = Ci + Φ(Di ) − φ(Di−1 ) = 1 + 1 = 2 → O(1) :¢ª ô¹÷ ô
Φ(Di ) − Φ(Di−1 ) = (s − 1) − s = −1 Cˆi = Ci + Φ(Di ) − φ(Di−1 ) = 1 − 1 = 0 → O(1) :¢ª Â
0
0
k = min(s, k) Φ(Di ) − Φ(Di−1 ) = (s − k ) − s = −k Cˆi = Ci + Φ(Di ) − φ(Di−1 ) = k 0 − k 0 = 0 → O(1) . ´¨
O(n)
multipop
¥ Ûî üî
úµ¨ þ Ãû ßþÂ
: Ýþ ¤¢ üþø¢ø¢ ùÀ÷¤Þª ¤¢
Φ(Di ) = bi
ô
i ÜÂõ ¤¢
â Âð
0
:2 ñ·õ
û ×þ ¢Àã î ´¨ ¼®ø
Φ(Di ) ≥ 0 ti =
ô
i ÜÂõ ¤¢
Ci = ti + 1
À÷ª üõ ÛþÀ± ÂÔ¬ î üþû ×þ ¢Àã
¤Þ¨ ø¢ ¤  Âʵ¿õ üûÚ÷
.6 ÛÊê
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 Ci0 = Ci + Φ(Di ) − Φ(Di−1 ) ≤ ti + 1 − ti + 1 = 2 ⇒ Ci0 ≤ 2 n P
i=1
Ci0 ≤ 2n → O(n)
180