Algorithm Designing Dr.hamidhajseyyedjavadi Arakuniversity

  • Uploaded by: Amir
  • 0
  • 0
  • December 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Algorithm Designing Dr.hamidhajseyyedjavadi Arakuniversity as PDF for free.

More details

  • Words: 52,433
  • Pages: 187
퐤 ù‘ÚÈ÷¢ ü¨À€úõ ø ü€ê ùÀØÈ÷¢

ö€ä

ݵþ¤Úó üŸÂÏ §¤¢ ùøÛ ‘Þ€û¤ ¢‘µ¨

ý¢› Àƒ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) + 2‘fãޛ ŕ, Ýþ ¤¢

¥‘ƒ÷‚÷‘¡

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

: ´ª¢ ݃û¡ –¤ ¬ ßþ ¤¢. ´¨ üµ±·õ ¼ƒ½¬ ¢Àä

ù‘ Ú ÷,

 >



“‘ ™  þ¢‘ Ö õ ü Ì ã “ ýÂ “

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=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

: ñø ´ó‘Ÿ

. ´¨ ©¤À• ´¨¤ À÷¥ Âê



ù‘ƒ¨

y

: ôø¢ ´ó‘Ÿ

. ´¨ ©¤À• ² À÷¥ Âê



ù‘ƒ¨

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)Ã¹õ ý‘û ‚äÞ¹õ ၠ÷ ß þ  —ù¢‘ ¨.À € õ‘ ÷ ü õ Ã ¹ õ À ª‘ “ ü ú — ø¢ ö íÂ µ ª ù‘ ð û ¤ °ÆÂ“



...ø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]



ÂΨ

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 ¢¤ õ ö¢¢ ö‘È÷ ‘“ âìø ¤¢. ´¨ ü®‘þ ¤ ýÂÖµ¨ ‚“‘Èõ 1‹4 ۟Âõ ýÂ› –ø‘Ô— ßþ ‘“ Ýþ ù¢Þƒ• ¤ ÂÖµ¨ ý‘û ô‘ð 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 ≥ 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

Related Documents

Algorithm
October 2019 95
Algorithm
November 2019 83
Algorithm
May 2020 56
Algorithm
November 2019 82

More Documents from "nrao123"