Sei sulla pagina 1di 189

www.Bshams.

ir

a a
1384

www.Bshams.ir

www.Bshams.ir

a
a
a

1
1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
1

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . big-O 1.1

2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . big

2.1

..........................................................

3.1

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . small o

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . small

4.1

5.1

3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1
5

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1
2

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

.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

www.Bshams.ir

1.5.2

Sort

2.5.2

www.Bshams.ir

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

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

www.Bshams.ir

3.3

6.4.3

HEAP 5.3

Tree 1.5.3

www.Bshams.ir

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)

DIJKSTRA

4.1.4

5.1.4

117 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (devide

www.Bshams.ir

3.1.4

and conquer)

2.4

117

........................................

119

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . merge sort

1.2.4
2.2.4

www.Bshams.ir

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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nb 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

www.Bshams.ir

152

. . . . . . . . . . . . . . . . . . . . . . . . . . (Breath First Search) BFS

153

. . . . . . . . . . . . . . . . . . . . . . . . Topological Sort

154

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bellman Ford

4.5

155

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DAG

5.5

2.5

3.5

www.Bshams.ir

6
157 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LOOP
173 . . . . . . . . . . . . . . . . . . . . . . . . . (Amortized

Analysis) 2.6

173 . . . . . . . . . . . . . . . . . . . . . . . . . (Aggregate

Analysis)

176

. . . . . . . . . . . . . . . . . . . . . . . . (Accounting Method)

178 . . . . . . . . . . . . . . . . . . . . . . . . . . (Potential

www.Bshams.ir

INVARIANT1.6

Method)

1.2.6

2.2.6
3.2.6

www.Bshams.ir

,


1384
.

1382 ,
,
.


a


1384

www.Bshams.ir

www.Bshams.ir

.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

n100

O(n2 ) = {n2 , n lg n, f (n), ....}


6

f1
f2 O(f1 )
...
...
...
...
.
M

www.Bshams.ir

O(f1 )

f2
-

f2

www.Bshams.ir

.1

6
f2

f1 O(f2 )

f1

f2 O(f1 )

f2 O(f1 )

f1
c

. ,

big-O ,

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 , ...}


:
,

www.Bshams.ir

www.Bshams.ir

SM ALL O .4.1

small o
:

4.1

f : N R+

o(f (n)) = {g : N R+ | c > 0 n N g(n) cf (n)}

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

nN

small
:

5.1

f : N R+

(f (n)) = {g : N R+ | c > 0 n N g(n) cf (n)}

(f (n))

: :

o(f (n)) =

M1

d0 > 0 g(n) (f (n))

o(f (n))

:
:

n M1 g(n) 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)})

www.Bshams.ir

www.Bshams.ir

.1

: 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)
:
:

2n)

n! = ( ne )n 2n = log n! = log( ne )n + log 2n

= log n! = n log ne + log 2n

= log n! = n log n log en + log 2n

(n!

( ne )n

= log n! = n log n + log e2nn

= 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

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

www.Bshams.ir

www.Bshams.ir

.7.1

n
Y

n (n!)2

x=1

n
Y
(n + 1)2
x=1

nlogn 2logn! 2nlog

= nn (n!)2 (

n+1

2nlogn =

n + 1 2n
) =

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

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

. :
:
,
:

www.Bshams.ir

www.Bshams.ir

.1

12
g(n)= n

n
n
:

M = 12 , n 13 g(n) n = g(n) O(n)


: ,

g(n) (n) c >

g(n) (n)

n g(n) cn c >

( )

g(n)
c

nF

= g(n) 6 (n)

g(n) o(n)

g(n) o(n) c > 0

g(n) cn, c = 12 = g(n) n2 F

= g(n) 6 o(n)
.

:
.
:
:

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)

nM

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))
.

www.Bshams.ir

www.Bshams.ir

.7.1

n2 O(n)

n2
/ O(n)

n M1 , M1

n O(n2 )

c > 0

n2 cn n c (. )
.

:
:

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

: :

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
:

www.Bshams.ir

www.Bshams.ir

.1


. 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))

www.Bshams.ir

www.Bshams.ir

.2

1.2



.

:

a0 tn + a1 tn1 + + ak tnk = f (n) ai R, f : N R0 , k N


n

k ,

t0 , , tk1

. .
.
,f (n)

0
:

a0 tn + a1 tn1 + + ak tnk = 0
xi

ti .


: .

www.Bshams.ir

www.Bshams.ir

.2

10

a0 xn +a1 xn1 + +ak xnk = 0 xnk (a0 xk + a1 xk1 + + ak ) = 0


|
{z
}

()
.

r1 , . . . , rk

1.1.2

k (1

tn = c1 (r1 )n + c2 (r2 )n + . . . + ck (rk )n


, (2

(x rp )m )

: ((x

rp )

m+1

rp

tn = c1 (r1 )n + c2 (r2 )n + . . . + cp0 (rp )n + cp1 n(rp )n +


. . . + cpm1 nm1 (rp )n + . . . + ct (rt )n
, (3
f
.

:
:

g(n) =

5g(n 1) 6g(n 2)

n1
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

www.Bshams.ir

www.Bshams.ir

.1.2

11

2tn1 tn2
tn = t0 = 1

t1 = 3
:

tn 2tn1 + tn2 = 0 = x2 2x + 1 = 0 x1 = x2 = 1
t0 = 1

tn = c1 + c2 n

, t1 = 3 c1 = 1, c2 = 2 = tn = 1 + 2n

2tn1 + 1
tn = t0 = 0

t1 = 1
:

tn = 2tn1 + 1

, tn1 = 2tn2 + 1 tn tn1 = 2tn1 2tn2

tn 3tn1 + 2tn2 = 0 x2 3x + 2 = 0
x1 = 1, x2 = 2

, t0 = 0, t1 = 1 = tn = 2n 1
:

a0 tn + a1 tn1 + a2 tn2 + . . . + ak tnk =


bn1 p1 (n) + bn2 p2 (n) + . . . + bnm pm (n)
( .

ai , bj

di pi (n)

(a0 xk + a1 xk1 + + ak )(x b1 )d1 +1 (x b2 )d2 +1 (x bm )dm +1 = 0


.
f
.
:

tn 7tn1 + 12tn2 = 2n + n + 3n (n + 1)
:

(x2 7x + 12)(x 2)0+1 (x 1)1+1 (x 3)1+1 = 0


(x 3)(x 4)(x 2)(x 1)2 (x 3)2 = 0

www.Bshams.ir

www.Bshams.ir

.2

12

r1 = 1, r2 = 1, r3 = 2, r4 = 3, r5 = 3, r6 = 3, r7 = 4

tn = c1 (1)n + 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(2k1 ) + 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) =

3
2

n
1 n
1
2T(2) 2T(4) n

n=1
n=2
o.w
:
:

n = 2k = T (2k ) = 32 T (2k1 ) 12 T (2k2 ) 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 =

www.Bshams.ir

www.Bshams.ir

.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(n1)
(n1)!

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

n=0
n=1

1+T (n1)
T (n2)

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
:

www.Bshams.ir

www.Bshams.ir

t(n) =

.2

1
4t(n
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) = 4qnqp
= qn+1 = 4qn pn
n

pn+1 = qn = pn = qn1

qn+1 = 4qn qn1 = (x2 4x + 1) = 0 = x = 2 3

= qn = c1 (2 + 3)n + c2 (2 3)n q2 = 3, q3 = 11

2.2


,
b

b
.

www.Bshams.ir

www.Bshams.ir

.2.2

15

: b
, 321

i + j + x = 1 + 2 + 3 x = 6 (i + j)

i j

6-(i+j)

void hanoi(int n,int i,int j)


{
if(n > 0) {
hanoi(n-1,i,6-(i+j)) ;
cout  i   j ;
hanoi(n-1,6-(i+j),j);
}
}
T (0) = 0

T (n) = T (n 1) + 1 + T (n 1) =

T (n) = 2 T (n 1) + 1 T (n) = 2n 1

www.Bshams.ir

www.Bshams.ir

.2

16

:
b
)
(.

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

.

.

).
(.

www.Bshams.ir

www.Bshams.ir

.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);
}
}

www.Bshams.ir

printf();

printf();

printf( ); }

www.Bshams.ir

.2

18

4
a(n) =
7

1 a(n 1) + 1 a(n 2) + 1 a(n 3)

n=1
n=2
n=3
else
:

.
.
:

n-2
.

n-2

f .

| {z } |

{z

n2

}
:

T (n) =

T (n 2) + 3

n-1

n=2

n-1

n = 2k

= T (n) = 32 n 2

( 32 (n 1) 2) + 2f ,

n-1

: .

2T ( n2 ) , n ) 1
. T (n) = 2T ( n
2 ) + 2 .
(. T (n) = 32 n 2

www.Bshams.ir

www.Bshams.ir

.2.2

19

T (n) =

n=1

3 (n 1)

n = 2k + 1

2n 2

n = 2k

: AVL

O(log n)

log n

.
.

:
.

:
4

AVL

n-1

AVL

T(1)

T(0)

T(2)

2
T (n) =
4

T (n 1) + T (n 2) + 1

www.Bshams.ir

T(3)

n=0
n=1
n=2
o.w

n-2

T(n-1)
T(n-2)
T(n)

www.Bshams.ir

.2

20

T (n) = T (n 2) + T (n 1) + 1

1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55

1 , 2 , 4 , 7 , 12 , 20 , 33 , 54
T (n) = f (n + 2) + (1)

f (n) = f (n 1) + f (n 2)

f (0) = 1 , f (1) = 1

f (n) = f (n 1) + f (n 2)

f (0) = 0, f (1) = 1

x2 x 1 = 0

r1 = 1+2 5

f (n) = c1 ( 1+2 5 )n + c2 ( 12 5 )n

f (n) = 15 ( 1+2 5 )n 15 ( 12 5 )n

AVL

, r2 = 12 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) log 5 = h O(log 5(n+1) ) = h O(logn )


h + 2 log(n+

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

www.Bshams.ir

www.Bshams.ir

.2.2

21

n
.
(c1

< c2 < < cn

n)

ck
ck+1 < ... < cn

c1 < c2 < ... < ck1


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

?
:

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

nm

T (m)T (n m) =

1 2n 2
n n1


:

.
:

www.Bshams.ir

www.Bshams.ir

.2

22

10

n
n-1

= a(n)

= a(n 1)

(. )

a(n 1)

}|

{z

}|

1,2,...,9
.

n-1

b(n 1)

(. )

b(n 1)

}|

= a(n) = 9a(n 1) + b(n 1)


1

10

10

n1

.........

10

(n-1)
= a(n-1)+b(n-1)=10n1

a(n 1) + b(n 1) = 10n1 b(n 1) = 10n1 a(n 1)

= a(n) = 9a(n 1) + 10n1 a(n 1) = 8a(n 1) + 10n1

www.Bshams.ir

www.Bshams.ir

.2.2

23

1
T(1)=2
2

1
3

T(2)=4

3
5

1
2

T(3)=7

T (1) = 2, T (2) = 4, T (3) = 7, T (4) = 11, . . .


n .

T (n 1)

T (n) = T (n 1) + n = T (n) =

n 1

T (n) = T (n 1) + n

n(n + 1)

n 1

+1

n 2

? 2

www.Bshams.ir

www.Bshams.ir

.2

24

T ( 2) = 1 :

2
T ( 3) = 1 :
3
T ( 4) = 2 :
2 + 2, 4
T ( 5) = 3 :
2 + 3, 3 + 2, 5
T ( 6) = 5 :
2 + 2 + 2, 2 + 4, 3 + 3, 4 + 2, 6
" 2+ ' k 2 k
: , k 1
T (5) :

{2 + (3)}, {(2 + 1) + 2}, {(4 + 1)}


|
{z
} | {z }
3+2

T ( 6) :

{2+(2+2)}, {2+(4)}, {(2 + 1) + 3}, {(3 + 1) + 2}, {(5 + 1)}


|
{z
} |
{z
} | {z }
3+3

T(n)=

4+2

n=2
n=3
T (n 1) + T (n 2) o.w

:
0,1,2

,
.
:
.n :
.

.
.

an

bn

cn

n = an + bn + cn
an = bn1 + cn1

, bn = an1 + cn1

, cn = an1 + bn1 + cn1

cn = n1 cn1 = n2
= n = an + bn + cn = 2an1 + 2bn1 + 3cn1 =

www.Bshams.ir

www.Bshams.ir

.2.2

25

2(an1 + bn1 + cn1 ) + cn1 = 2n1 + cn1


= n = 2n1 + n2
:
.

nm

.
.

A b

T(n,m-1)

T (n, m 1)

{z

T (n 1, m)

B
d - T(n-1,m)


: .

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

www.Bshams.ir

www.Bshams.ir

.2

26

.
?
:
.

?
:
.

, :
0 1
.

{}

{4}

{3}

n-1

n2


.
:

tic tac toe

(Master Theorem)

f : N R+ , b > 1 , a 1

3.2

T (n) = a T ( nb ) + f (n)

www.Bshams.ir

 >

f (n)

O(nlog

a
b 

(1

www.Bshams.ir

(MASTER THEOREM) .3.2

27

.T (n)

T (n) (nlog b (log n)k+1 )


a

0
.

< <

,  >

T (n) (f (n))

f ( nb )

f (n) (nlog b (log n)k )

(nlog b )

f (n) (nlog

< f (n)

b nb c

d nb e

a
b +

(2

(3

n
b )
( .

:
.

T(n)

n = 1, b, b2 , ..

b > 1

T(n)

T(n)=

n
n2

T(n)

T(n)O(n)

n=1,2,3,..
otherwise

T(n)O(n2 )

:
.

T (n) = aT ( nb ) + f (n)

www.Bshams.ir

www.Bshams.ir

.2

28

b>

1 n

b . .
. b

b n

. ,

: 1

f (n)

b>

1 a 1

T(n)

T(n)=

(1)

n=1

aT ( nb ) + f (n)

n = bi

1
logn
b

T (n) = (n

loga
b

)+

(1)

aj f (n/bj )

j=0

:
f (n)
.

f (n/b)

a2

T (1) = (1)

loga
b

f (n/b2 )

.
j

n
logb .

f ( nb )

lognb
.

www.Bshams.ir

www.Bshams.ir

(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
}

..
..
..

nlogb

af(n/b)

(1)

, .

aj f (n/bj )

logb n1

aj f (n/bj )

j=0

(1)

(nlogb )


:
, (1
.
. f (2
(3
.

: 2

f (n)

www.Bshams.ir

b>

g(n)

1 a 1

www.Bshams.ir

.2

30

1
logn
b

g(n) =

(2)

aj f (n/bj )

j=0
,

 >

f (n) = O(nlogb  )
.

nb

g(n) = O(n

(1

loga
b

g(n) = (nlogb . log n) f (n) = (nlogb )(2


c<

.g(n)

1 (3

= (f (n))

af (n/b) cf (n)

f (n) = O(nlogb  )

j loga
b 

n
(2) f ( j )
b

= O((n/b )

)
:

g(n) = O

1
logn
b

aj

j=0

 n logab 
bj

(3)

1
logn
b

j=0

 n logab 
bj

1
logn
b

=n

X  ab j
a
blogb

loga
b 

j=0

1
logn
b

=n

loga
b 

(b )

j=0

=n

loga
b 

= nlogb 

b logb 1
b 1

n 1
b 1

.
.

www.Bshams.ir

 b

loga
b 

O(n ) = O(nlogb )

www.Bshams.ir

(MASTER THEOREM) .3.2

31

: (3)
a

g(n) = O(nlogb )
.

f (n) = (nlogb )

f (n/bj ) = ((n/bj )logb )


: (4) (2)

1
logn
b

g(n) =

aj

 n logab

j=0

bj

(4)

1
logn
b

j=0

 n logab
bj

=n

1
logn

b

loga
b

blogb

j=0
1
logn
b

=n

loga
b

j=0

j

= nlogb lognb
: (4)

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

f (n/b) (c/a)f (n) f (n/bj ) (c/a)j f (n) aj f (n/bj ) (cj f (n))

www.Bshams.ir

www.Bshams.ir

.2

32

: (2)

1
logn
b

g(n) =

aj f (n/bj )

j=0
1
logn
b

cj f (n)

j=0

f (n)

cj

j=0

= f (n)

1C

= O(f (n)).
,

.g(n)

= (f (n))

g(n) = (f (n)), g(n) = O(f (n))


. 2

f (n)
b

b > 1 a 1

T(n)

T(n)=

(1)

n=1

aT ( nb ) + f (n)

n = bi

: .

 >

f (n) = O(nlogb  )
.T (n)

.T (n)

www.Bshams.ir

= (nlogb log n))

= (n

loga
b

(1

)
a

f (n) = (nlogb ) (2

www.Bshams.ir

(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
:

T (n) = (nlogb ) + O(nlogb ) = (nlogb ),


: 2
a

T (n) = (nlogb ) + (nlogb log n) = (nlogb log n),


: 3
a

T (n) = (nlogb ) + (f (n)) = (f (n)),


:

f (n) = (n

www.Bshams.ir

loga+
b

www.Bshams.ir

.2

T(n)=

34

. :

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

. :

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 )

www.Bshams.ir

www.Bshams.ir

.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

i1
while (i <= m)
p(i)
ii+1
,

1:

i1

O((m + 1) 1) +
O(m) +

L O(1) +

O(mt) +

p(i)

i i + 1

1
).p(i) O(t) . t, p(i)
(

www.Bshams.ir

www.Bshams.ir

O(m)

.2

36

while goto

L < O(2 + 3m + mt) L O(max{1, m, mt})



.

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

n
X1
i=1

ti =

(1) = n (i + 1) + 1 = n i

n
X1
i=1

(n i) = n(n 1)

(n 1)n

(n 1)n

O(n2 )

,
.

n2 n

1 2 ................. n
1 .*....*.
*
*......
2.
...
*....
....
...
....
...
....
...
....
...
.*...
.
....
n
*.
n2 n

www.Bshams.ir

O(n2 )

O(1)

www.Bshams.ir

.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(n1)

www.Bshams.ir

(1)

O(n2 )

www.Bshams.ir

.2

38

Insertion Sort

3.5.2

Procedere Insertion Sort(T[1..n])


for i 2 to n do
x T [i]
j i-1
while (j > 0 && T [j] > x)
T[j+1] T[j]
j
T[j+1] x
(n)

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 )

O(n2 )

www.Bshams.ir

(n2 )

www.Bshams.ir

.5.2

39

(Average Case Analysis)

E(x) =

i-1

i-2

.....

.....

x f (x)

xX

T[1..i]

ci =

i
X

k=1

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

sort

n
n
X
1X
1 n(n + 1)
(
i+
1) = (
1 + n 1) = (n2 )
2 i=2 i=2
2
2

insertion sort


.
.

n!

Pigeon hole Sort


u

n!

4.5.2

,
.
.
.

www.Bshams.ir

www.Bshams.ir

.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

1
2

2
4

3
2

4
1

5
2

1 1 2
| {z } |

{z

m=5

}| {z }
3

5 5
| {z }

www.Bshams.ir

www.Bshams.ir

.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;}
.
.

temp

temp

:Binary Search
i lef t, j right,

i = 0, j = n 1
temp

d=j i+1=n10+1 =n
,

if

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 )=
ji
ji+1
<
= d d < d
2

ji
else j = k 1, i = i, d = j i + 1 = k 1 i + 1 = i+j
2 i = 2 <
ji+1
= d d < d

www.Bshams.ir

www.Bshams.ir

.2

42

ij j i0j i+11d1
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

www.Bshams.ir

n
P

i=2

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

O(nlogn)

best case

n
P

i=2

log2

Rn

x
2 log2 dx O(nlogn)

+2

www.Bshams.ir

.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

.

www.Bshams.ir

www.Bshams.ir

.2

44

Len=8=gap
2
|

7
|

4
{z
|

8
{z

5
}

{z

6
}

{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

shell-sort

10

gap= 21

while

best case

worst case

n log n

n1.5

average case
n1.25

gap

www.Bshams.ir

www.Bshams.ir

.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

Bucket Sort2

Bucket-Sort

. ,

[0, 1)

Bucket-Sort2(A)
n [A]
for i 1 to n do
insert A[i] into list B[bnA[i]c]
for i 0 to n-1 do
sort list B[i] with insertion sort
concatenate the list B[0],B[1],...,B[n-1] together in order

www.Bshams.ir

9.5.2

www.Bshams.ir

.2

A
1 .78
2 .17
3 .39
4 .26
5 .72
6 .94
7 .21
8 .12
9 .23
10 .68

46

- .17
- .23

- .12
- .21
- .39
- .68
- .72

- .26

- .78

- .94

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:

www.Bshams.ir

1 2 3 7 8

www.Bshams.ir

.5.2

47

Counting Sort

11.5.2

counting-sort
for i0 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))

.
.

www.Bshams.ir

www.Bshams.ir

.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 )

.
.

www.Bshams.ir

www.Bshams.ir

( ) TRACE .6.2

49

7
10

i

n 1 = n

T (n)

10
7

dlogn10 e
X7 
i=0

53

>

10
= logn 1
7
53

T (n)

i

= logn10 i = i = dlogn10 e =
7

9
10

i

n=

9
10

logn10 +1
7

9
1 10

> logn10 = 3 logn5 > logn10 =


7

dlogn10 e
X7 
i=0

9
10

i

3X
logn
5 
i=0

9
10

i

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)

logn3
X2
i=0

www.Bshams.ir

( 49n )

m
n O(n logn3 )
2

www.Bshams.ir

.2

50

Catalan Number

7.2

:1 n

. ,
.

1
( ) .
. ,

,

, .
, )
(.

0, n ,bn
0 i n bi .
n

,bn+1
)
.

, .

b0 = 1

www.Bshams.ir

www.Bshams.ir

CATALAN NUMBER .7.2

51

www.Bshams.ir

n,

0 (1)

www.Bshams.ir

.2

52

.b0 bn

b1 bn1

bn+1

n 1,

n + 1,

1 (2)


.
.
.

n i,

bi bni

i (i+1)
bn+1

.
.
.

,
.

bn b0

n (n+1)

bn+1

n 0 ,

bn+1 = b0 bn + b1 bn1 + b2 bn2 + + bn1 b1 + bn b0

X
n=0

bn+1 xn+1 =

(b0 bn + b1 bn1 + + bn1 b1 + bn b0 )xn+1

(1)

n=0

a0 , a1 , a2 ,

a
,

f (x) =

i=0

a0 , a1 ,

ai xi

[f (x)]2

a0 a0 , a0 a1 + a1 a0 , a0 a2 + a1 a1 + a2 a0 ,

, a0 an + a1 an1 + a2 an2 + + an1 a1 + an a0

b0 , b1 , b2 ,

f (x) =

n=0

bn xn

(f (x) b0 ) = x

www.Bshams.ir

X
n=0

(1)

(b0 bn + b1 bn1 + + bn b0 )xn = x[f (x)]2

www.Bshams.ir

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

1 4x]
(2x)

1/2
1


(4)n

1/2
n

=
=
=
=
=


1/2 (4x)2 +
(4x) +


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)n1
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

www.Bshams.ir

(2n 1)

2n
n

xn

f (x)

 ##
xn

xn

bn

bn

www.Bshams.ir

.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

. ,
.
.

www.Bshams.ir

b6 = 132

x1 x2 x3 xn

b5 = 42, b4 = 14, b3 = 5, b2 = 2, b1 = 1, b0 = 1

www.Bshams.ir

.3

, f
.
.

.
.

.

char, bool ,int: ,


. ,

struct , union

: .

f :
:

x : array [a..z] of integer


int x[26];

www.Bshams.ir

www.Bshams.ir

.3

56

(Sparse array)

1.3


f ,
.
,
.
.
:

2
3

8
13

11

1  29 U 3
8
2
4
?

z
1

ctr

b[

a[ctr]

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

www.Bshams.ir

a[b[i]] = i

www.Bshams.ir

57

ctr

.2.3

b[8]=2

1 b[8] 3

a[b[8]]=a[2]=8

2.3

.
. :
. :
. ,
) :

(Depth)

. (
:(Level)
.
:

a
b
c
d
e
f

2
1
0
0
0
0

0
1
2
2
2
1

2
1
0
0
0
1

www.Bshams.ir

I(T)

E(T).

www.Bshams.ir

.3

T(n)= E(T)-I(T)

58

.
?

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
,
.
.
:

,

www.Bshams.ir

www.Bshams.ir

MAX HEAP

59

.3.3

,
.

2
4
8

15

13 14

11 12

9 10

. ,

max heap

3.3


).
.

heap

(.

2i , 2i+1

, .

(1)

,
.

1 b n2 c

b c + 1n
| 2 {z
}
dn
2e

. (

sift-up

d n2 e )

sift-down (perculate)sift-up, heap

sift-down

www.Bshams.ir

www.Bshams.ir

.3

60

procedure alter heap (T[1..n],i,v)


{ T[1..n] is a heap ,the value of T[i] is set to v and the heap
property is re-established we suppose the 1 i n }
x T[i]
T[i] v
if v < x then sift-down (T,i)
else percolate (T,i)
.....................................................................
procedure 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 }
ki
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 +....+2h1 < n 20 + 21 +....+2h 2211 < n 2 211

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


.

www.Bshams.ir

O(logn2 )

www.Bshams.ir

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 1i n the parametr n is not used here}
ki
repeat
jk
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)

www.Bshams.ir

// O(n log n)

www.Bshams.ir

.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)

:
.
:

r+1 r

SiftDown

(.

Repeat

r)
n

K = blog2 c

Heap

:
.For

SiftDown

Repeat

:t

t 2 2k1 + 3 2k2 + . . . + (k + 1) 20
t 2k + 2k + 2 2k1 + 3 2k2 + . . . + (k + 1) 20
t < 2k + 2k+1 (21 + 2 22 + 3 23 + . . .)

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
1x = 1 + x + x + . . .
x
(1x)
2

n=1

1
2
(1x)
2 = 1 + 2x + 3x + . . .

P
x
= x + 2x2 + 3x3 + . . .
(1x)
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 .

www.Bshams.ir

www.Bshams.ir

( ) BINOMIAL HEAP .4.3

63

( )Binomial Tree

Bn1

1.4.3

.
.

Bn1

1
B1

B0

Bn =

(x + y)n

B2

B3

n=0

Bn1 Bn1

; ,

2n Bn

2n1 Bn

2n1 Bn

) .

kn

Bn

. ,

n Bn

Max Binomial Tree

2.4.3


b ,
.

www.Bshams.ir

Max Binamial Tree

www.Bshams.ir

.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

8
7

6
3

2
1

+
3

.5

9
7

6
4

4
3

8
2
1

6
3

2
.5

Binomial Heap
.

www.Bshams.ir

Binomial Tree

4.4.3

H ,Binomial Heap

www.Bshams.ir

( ) 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

Binomial Tree

Binomial Heap

Binomial Tree

Node

Binomial Tree ,blg nc + 1

Min Binomial Heap

.2

.
.

.1

Heap

Node

5.4.3

Make-Heap()

x , Node

Node

Insert(H, x)

Minimum(H)
.

Delete

Heap

Node :

Extract-Min(H)

Node

Heap Heap

. Heap

www.Bshams.ir

www.Bshams.ir

Node

.3

66

Heap :
.

x ,Node

(x > k)

Union(H1 , H2 )

H2

H1 ,Heap

Decrease-Key(H, x, k)

x ,Node

Delete(H, x)

Max Binomial Heap


;

6.4.3

Max Binomial Heap



: .


4 ........ 9 ..................... 7
3

4
5

3
2

Max Binomial Heap

merge

. ,

www.Bshams.ir

(1)

www.Bshams.ir

FIBONACCI HEAP .5.3

67

R
8 ......... 6
4

?
4 .......... 9 ............. 7
3

4
2

4
5

?
8 ......... 9 ............. 7
4 3

5
1

6
5 2

4
4

3
1

2
1

Binomial Heap :

FIBONACCI HEAP
Fibonacci Tree

5.3
1.5.3

: :

Fn =

Fn2 , Fn1

www.Bshams.ir

n=0

n=1

else

www.Bshams.ir

.3

Fn2 ,Fn1

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

Max Fibonacci Tree

Fi+1

Fi

Fi

www.Bshams.ir

Merge

Merge

www.Bshams.ir

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

2-node

3-node

2-node

2-node

dataL.key

dataL.key

MiddleChild

MiddleChil

LeftChild

dataL.key

dataL.key

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

www.Bshams.ir

LeftChild ,MiddleChild,RightChild

dataL

2-3 ,

LeftChild

3-node

2-3

3-node

www.Bshams.ir

.3

70

. 1 2-3

A
40
B

10 20

80

2-3 1

.
.

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
2h1

2-node
m
l
h
n = 20 + 21 + + 2h1 n = 2211 = 2h 1 h = log2n+1

www.Bshams.ir

www.Bshams.ir

2-3 .6.3

71

h=1
h=2

X X
X .X
..
..
..
..
.

X .X
..
...
.
.
.
...

X .. X
...
...
...
..

h=h

2 30
2 31
2 3h1

3-node

h
n = 2 30 + 2 31 + + 2 3h1 n = 2(3311) = 3h 1 h =
l
m
1
logn+
3

l
m
l
m
1 < h < logn+1
logn+
3
2

: 2-3

templete<class KeyT ype >class 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 > &);

www.Bshams.ir

www.Bshams.ir

.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

2node

RightChild

dataL

2-3

1.6.3

x Tow3::Search

3,2,1

compare

, ,
. ,

. 2-3
.

O(log n)

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;)

for

templete< class KeyT ype >

www.Bshams.ir

www.Bshams.ir

2-3 .6.3

73

switch(p compare(x)){
case 1 :p=p LeftChild;break;
case 2 :p=p MiddleChild;break;
case 3 :p=pRightChild;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

() 2 .
.
. 30

3-node B

B A

x B

. () 2 .

www.Bshams.ir

www.Bshams.ir

.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

60 . () 2

x ,

3-node

.(80)

(70) .(60)

3-node A

f .

. 20, 40, 70

40 . 2-3
2-3 ,

. 3

G
40
A
20
B
10

D
30

F
70
C
60

E
80

() 2 2-3 60 -3

www.Bshams.ir

www.Bshams.ir

2-3 .6.3

75

3-node

. .
.

q,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(pdataR.key==MAXKEY){// p is a 2-node
pPutIn(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

www.Bshams.ir

www.Bshams.ir

.3

76

.
: ,
(

< KeyT ype >

: void Tow3::NewRoot(const Element& x,Tow3Node *a)


. 2-3

(new root)

( )

LeftChild

Middle Child, a

.
.

:Tow3Node* Tow3::Find(const Element & x)


. (1 )
.

Tow3::Search

x.key

2-3

.
.

FindNode

FindNode

. ( )
.

p root

root

Tow3::Insert

. ,

,
.

:void InsertionError()

. .

: void Tow3Node::PutIn(const Element& x,Tow3Node *a)


, f

(this)

Middle Child

RightChild

dataR

RightChild

dataL

MiddleChild

dataL

a dataR

:Eelement& Tow3::Split(Tow3Node* p,Element& x,Tow3Node *olda,*a)


www.Bshams.ir

(p)

Tow3Node

www.Bshams.ir

2-3 .6.3

77

ap

p ,

olda p

. .

for

x , Insert

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

dataL

dataR

(dataR.key=MAXKEY)

() 4

MAXKEY

dataR.key

. () 4 2-3

www.Bshams.ir

www.Bshams.ir

.3

78

A
50
C

B
10

80
D

60

20

70

90

95

2-3 ()

A
50
B

10 20

60

80
D
90 95

70 ( )

A
50 80
B
10

C
60

20

95

90 ()

, 4

. 60

3-node B

50 ,

dataL

20

dataR.key=MAXKEY

. , () 4 2-3

www.Bshams.ir

www.Bshams.ir

2-3 .6.3

79

(rotation)

60 .

2-node C

, 95

rotation

80 .

(combine)

95 .
50 . () 4 2-3
. () 4 2-3

10

2-node C

2-node

3-node C

.3-node

, 60

2-node

80 20 . 95

b .

(60 ) ,
,

. (95 )

.(() 4 )

www.Bshams.ir

www.Bshams.ir

.3

80

A
20 80
B
10

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

:1

.
:2

for(;p has zero element && p!=root;p=r){


left r be the parent of p and let q be the left or right sibling of p ;
if(q is a 3-node) perform a rotation
else perform a combine;}

www.Bshams.ir

www.Bshams.ir

2-3 .6.3

81

,
.

q , r

:3

.
.

q,

3-node 2-node

? . 5
)

c,b,a.


.(

r
X ?
q
Y Z

p
X
a

d
r

r
Y ?
q
Z
c

()

r
Y ?

r
Z ?
q
X Y
a

c d

a
r p

r
W Z
a q

b
r

a q
X

d e

b
()

r
W Y

X Y
b

p
Z

q
X

Z
c
p

()

2-3 -5

www.Bshams.ir

www.Bshams.ir

.3

82

combine

r
x

p
x y
a

( )

r
x z
q
y

q
y

c
r
z

p
x y
a

d
c

( )

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==pdataL.Key) // first element
if(pdataR.Key!=MAXKEY )
{ // p is a 3-node
p dataL = p dataR;
p dataR.Key =MAXKEY;}
else p dataL.Key=MAXKEY; // p is a 2-node
else p dataR.Key =MAXKEY;} // delete second element

www.Bshams.ir

www.Bshams.ir

2-3 .6.3

83

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

2-3

2-3
.

www.Bshams.ir

O(log n)

www.Bshams.ir

.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

39

NIL

NIL

NIL

NIL

NIL NIL

NIL

NIL

www.Bshams.ir

NIL

NIL NIL
NIL

NIL

21

www.Bshams.ir

RED-BLACK - .7.3

85

bh(X) Black-Height(x)

4
.

2.7.3

:Black-Height(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

:
.

nil

20 1 = 0 2bh(x) 1 x
:

x bh(x)

Black - Height,

bh(x)-1

bh(x)

2bh(x)1 1 x
bh(x)1
. 2
1 + 2bh(x)1 1 + 1 = 2bh(x) 1

b .

. , (

Black-Height .

3
.

(n+1)

n 2 1 = 2 n + 1 = h 2 log2
h

O(log n) ,RB

. b x

www.Bshams.ir

www.Bshams.ir

.3

86

3.7.3

RB


( ) .
.
.
:
.

O(1)

nil

Right-Rotate(T,y)
-

y
x

Left-Rotate(T,x)


Left-Rotate(T,x)
1. y right[x]

// SET y

2. right[x] left[y]

// Turn ys left subtree into xs right subtree

3. if left[y] 6= NIL then


4.

p[left[y]] x

5. p[y] p[x]

// Link xs 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

www.Bshams.ir

// Put x on ys left

www.Bshams.ir

RED-BLACK - .7.3

87

y=uncle[x]

4.7.3

5 bh

4
3

RB

.
.

6
:

Parent[Parent[x]]

RB-insert

D
Bx

new x C

Dy

x A

new x C

Parent[x]

Black-Height
y=uncle[x]

www.Bshams.ir

5
6

www.Bshams.ir

.3

A
Bx

x A

88

?
B
x A

RB-Insert(T,x)
1. Tree-Insert(T,x)
2. color[x] RED
3. while x6=root[T] and color[p[x]]=RED do
4.

if p[x] =left[p[p[x]]] then

5.

y right[p[p[x]]]

6.

if color[y] =RED then

7.

color[p[x]] BLACK

// Case 1

8.

color[y] BLACK

// Case 1

9.

color[p[p[x]]] RED

// Case 1

10.

x p[p[x]]

// Case 1

11.

else if x = right[p[x]] then

12.

x p[x]

// Case 2

13.

LEFT-Rotate(T,x)

// Case 2

14.

color[p[x]] BLACK

// Case 3

15.

color[p[x]] RED

// Case 3

16.

RIGHT-Rotate(T,p[p[x]])

// Case 3

17.

else(same as then clause with right and left exchanged)

18. color[root[t]]BLACK

www.Bshams.ir

www.Bshams.ir

RED-BLACK - .7.3

89

11

11
14

15

case 1-

2
1

y
15

x 4

14
8

4
case 2

?
11

x
2
1

case 3

11
5

x 2

14

1
4

14

15

y
15

5
4

RB-Delete

5.7.3

nil[T]

.
.

Parent ) x


(.

while

nil

nil[T]

nil

RB-Delete-Fixup

RB

Parent

(.
,
.

www.Bshams.ir

nil[T]

nil

RB

RB

www.Bshams.ir

.3

90

. 7
.

nil[T].Parent,

16 ,

RB

nil

Parent[x]

RB-Delete-Fixup

17
.

RB-Delete

. (Successor)
.
.

Key[z]:=Key[Succ(z)]

,
. 4
(

. ,

) .

. 1 (

:
.

. ,

. 1 (
4

: (. 8
.

w=sibling(x)

,
.

www.Bshams.ir

c,c

www.Bshams.ir

RED-BLACK - .7.3

91

( ) w(1
. w(2
. w(3
. w(4

....
..
B

....
..
D
case 1

x A

(a)

case 2

x A

www.Bshams.ir

case 4
A

....
.. c
D

w
D

...
...
c
B
(d)

new w
C

xA

....
.. c
B

case 3D

...
...
Bc

new x C

D
C

(c)

....
.
new x . c
B

...
...
B c
(b)

c
C

new x =root[T]

www.Bshams.ir

.3

92

1 : (1

. 4 3 2

: (2

.
.

3 : (3
. 4

4 (4

O(lg n)

RB-Delete(T,z)
1. if left[z]=nil[T] or right[z]=nil[T] then
2.

yz

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

www.Bshams.ir

www.Bshams.ir

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.

wright[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.

xroot[T]

//case4

22.

else(same as then clause with right and left exchanged)

23. color[x] BLACK

www.Bshams.ir

www.Bshams.ir

.3

94

(Disjoin sets)
.

...21

AB

8.3

n...21

.

.

set

set={1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }
set
1

10

10

1={1 , 5 }

2={2 , 4 , 7 , 10 }

3={3 , 6 , 8 , 9 }
3

1
4

set

10

set
1

10

function find1(x)
{ find the lable of the set containing x}
return set[x]

x find1
.

b a merge1
.

www.Bshams.ir

(1)

(n)

www.Bshams.ir

(DISJOIN SETS) .8.3

95

function merge1(a,b)
{merge the sets labled a and b }
imin(a,b)
jmax(a,b)
fork1 to n do
if set[k] = j then set[k] i
merge2 find2

function find2(x)
r x
while(set[r]6= r) do
rset[r]
return r

function merge2(a,b)
if(a<b) then set[b] a
else set[a] b
merge2

O(n) find2

(1)

find

.

.
:

function merge3(a,b)
if(height[a] = height[b])

www.Bshams.ir

find3

merge3

www.Bshams.ir

.3

96

set[b] a
height[a] ++
r a
else
if(height[a]>height[b]) then
set[b] a
ra
else
set[a] b
rb
return r
function find3(x)
rx
while(set[r]6=r) do
r set[r]
ix
while i6= r do
j set[i]
set[i] r
ij
return r
.

www.Bshams.ir

log n

www.Bshams.ir

.4

:

www.Bshams.ir

www.Bshams.ir

.4

98

(Greedy Algorithms)

1.4

.

.
.

.
:

Control Abstraction

Fuction Greedy(C):set //solution set


{ C is a set of condidates}
S { S C is a set of solution ,if it is possible }
{ Greedy loop}
While (C 6= & not Solutions(S))
x Select(C)
CC\{x}
if feasible ( S { x }) then
SS{x}
if (solution(S)) then return S
else

there are no solutions.

solution , feasible

Select

feasible

Select

b .

1.1.4

.


:

www.Bshams.ir

www.Bshams.ir

(GREEDY ALGORITHMS) .1.4

99

,

.

.
,
.
.
,
.
7000
1100,

1800 ,C 900,

1200,

1800

200

7000
1
4000
0

0
2200
0

3000
0

www.Bshams.ir

1
1

1100
1

1200

1800

900

1100

1800

200

A=00

B=01

C=1000

E=101

D=11

M=1001

www.Bshams.ir

.4

100

. ,
. ,
, 8
4
: .

2 1200 +2 1800+4900+31100+21800+4200=17300
.

70008=56000

DBAD

11010011
01001001101

,

.

BAME


.

.

n-1

www.Bshams.ir

. i-1 1

...
.. .
..
15 ...
....
....
....
....
....
7
....
....
....
....
....
....
....
....
2
4
8

www.Bshams.ir

(GREEDY ALGORITHMS) .1.4

101

MST

2.1.4

G=<N,A>

.A


.( )

:
.(

T=<V,E>

p) p=q+1 , T

.1

. p=q+1 T

.2

. .3
. .4

pp2

. (

p2

Kp

: )?
(.

| {z } |
K3

{z

K4

332 442 = 48

(minimum spaning tree)

www.Bshams.ir

www.Bshams.ir

.4

102

f :

.
:

Prim , Kruskal, Boruvka ,Sollin

:kruskal
:

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}
ucompfind (u)
vcompfind (v)

www.Bshams.ir

www.Bshams.ir

(GREEDY ALGORITHMS) .1.4

103

if(vcomp 6= ucomp) then


TT {e}
merge(ucomp,vcomp)
until T is containing n-1 elements
return T

1
6

4
3

6
8

4
3

6
4

7
step

initialization

connected components

{1}{2}{3}{4}{5}{6}{7}

{1,2}

{1,2}{3}{4}{5}{6}{7}

{2,3}

{1,2,3}{4}{5}{6}{7}

{4,5}

{1,2,3}{4,5}{6}{7}

{6,7}

{1,2,3}{4,5}{6,7}

{1,4}

{1,2,3,4,5}{6,7}

{2,5}

{4,7}

.n log n

reject
{1,2,3,4,5,6,7}

n , log n merge,find
: .

(n 1) a

|A| = a

n(n1)

log (n 1) log a log n + log (n 1) log 2


log n log a 2 log n
.

www.Bshams.ir

O(a log a) sort

log n

log a

www.Bshams.ir

.4

104

: Prim
:

G 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.

www.Bshams.ir

if 0 mindist[j] < min Then

www.Bshams.ir

(GREEDY ALGORITHMS) .1.4

105

11.

min mindist[j]

12.

kj

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

www.Bshams.ir

www.Bshams.ir

.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

www.Bshams.ir

O(|V |2 )

www.Bshams.ir

(GREEDY ALGORITHMS) .1.4

107

: Sollin
b ,

4| , {z
3, 2} 1|{z}
, 6 ,5, 0
|{z}
C

C B

241816

16 2528
. 25 2825

28

0
10

24

14

10
2

16
2

18

25
4

0
16

14

12
22

12

25
4

22

algorithm Sollin(G)
begin
Fo =(v,k);
i=0;
while there is more than one tree Fj do
for each tree Tj in forest Fj do
choose the minimum weighted edge (u,v) joining some
vertix u in Tj to a vertix v in some other tree Tk in forest Fj
from the otherforest Fj+i by joining all Tj and Tk of Fj with tree
converesponding select edge
i++;
end;

www.Bshams.ir

www.Bshams.ir

.4

108

: Boruvka

Boruvka( G = (V, E) , w ) {
initialize each vertex to be its own component ;
A = {} ; //A holds edges of the MST
do {
for ( each component C ) {
find the lightest edge (u,v) with u in C and v not in C ;
add { u, v } to A ( unless it is already there ) ;}
apply DFS to graph H = (V, A) , to compute the new components
} while (there are 2 or more components) ;
return A ;} // return final MST edges
BORUVKA(V,E):
F=(V,)
while F has more than one component
choose leader using DFS
FIND-SAFE-EDGES(V , E)
for each leader v add safe ( v ) to F
FIND-SAFE-EDGES(V, E):
for each leader v
safe(
v )
for each edge (u,v) E
u
leader(u)
v leader(v)
if u
6= v
if (w(u,v) < w( safe( u
))
safe ( u
) (u, v)
if (w (u,v) < w(safe(
v ))
safe ( v) (u, v)

www.Bshams.ir

www.Bshams.ir

(GREEDY ALGORITHMS) .1.4

109

: Knapsack
.
,

3.1.4

1, 2, ..., n

vi

wi


: .

xi wi W
, xi [0, 1]
P
max [
xi vi ]

vi
wi

weight

x[k] =

W weight

W [k]

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
weightweight+w[i]
else
x[i]

(W weight)
w[i]

weight W
return x

www.Bshams.ir

www.Bshams.ir

.4

110

: DIJKSTRA

4.1.4

.
.
. b b
.

function Dijkstra(L[1..n,1..n]):array D[2..n]


C{2,..,n} {s=N\C exists only 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

www.Bshams.ir

step

initilization

2,3,4,5

[50,30,100,10]

2,3,4

[50,30,20,10]

2,3

[40,30,20,10]

[35,30,20,10]

www.Bshams.ir

(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)

(n2 )
:

: .

2
P 3

3 4
0 5

5
0

b 1 b
f , .
4 b
5 4 5 4 ,
. 4 5 1 4 5

O(a+nlogn)

Fibonacci-heap

www.Bshams.ir

O((a+n)logn) Binary-heap

www.Bshams.ir

.4

112

(timetable or scheduling)

5.1.4

server

minimum

.

.

(with deadline)

(simple)

server

. .

ti (1 i n)

server


.
.

Ti = t1 + t2 + ... + ti1 + 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

www.Bshams.ir

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

www.Bshams.ir

(GREEDY ALGORITHMS) .1.4

113



.
.

O(n log n)

(Scheduling with deedline)



di

(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

.


,

fisible , 1,2

1, 2, ..., k

1, ..., k fisible , j . d1 d2 ... dk


.

www.Bshams.ir

fisible

fisible

www.Bshams.ir

.4

114

deedline

Function sequence(d[0..n]):k , array[1..k]


array j[0..n]
{The schedule is constructed step by step in the array j ,the variable k
say how many jobs are already in the 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}
rk
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 3

Try 2:

Try 3: unchanged
1 3 3

www.Bshams.ir

4
7
3

5
5
1

6
3
3

www.Bshams.ir

(GREEDY ALGORITHMS) .1.4

115

Try 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)
k0
for i 1 to n do
if j[i]>0 then kk+1 , j[k]j[i]
return k,j[1..k]

www.Bshams.ir

www.Bshams.ir

.4

116

.
:

Initilize : L=min(6, max(d,1))= 3


F=

0
0

1
1

2
2

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=

0
0

2
K

K
3

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

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
.

www.Bshams.ir

O(nlogn)

www.Bshams.ir

(DEVIDE AND CONQUER) .2.4

117

(devide and conquer)

2.4

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 i1 to l do yi DC(xi );
recombine the yi s to obtain a solution y for x;
return y;

1.2.4

? , .

O(n2 )

981 1234 = (|{z}


9 102 + |{z}
81 ) (|{z}
12 102 + |{z}
34 ) =
w

(w 102 + x)(y 102 + z) = wy 104 + (wz + xy) 102 + xz


: .

T (n) 4T ( 2 ) + (n) T (n) O(n2 )


2
O(n )

D&C

(wz + xy) = (w + x)(y + z) wy |{z}


xz = r p q
{z
} |{z}
|
r

wy 104 + (wz + xy) 102 + xz = p 104 + (r p q) 102 + q

www.Bshams.ir

www.Bshams.ir

.4

118

T (n) 3T ( n2 ) + (n) = T (n) O(nlog2 )


2 +1 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 uv 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 p102m + (r-p-q)10m+q
}
}

www.Bshams.ir

www.Bshams.ir

(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]<v[j]
T[k]u[i]
i++
else
T[k]v[j]
j++}

www.Bshams.ir

www.Bshams.ir

.4

120

:
:

1 2 3

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

12 17 43

3 7 10 31 54

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]

www.Bshams.ir

www.Bshams.ir

(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<kj , where p is the initial value of T[i] }
p T[i]
ki , Lj+1
repeat kk+1 until T[k] > p or k j
repeat LL-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])

17

48

10

p=T[i]=5
ki
L j+1

www.Bshams.ir

25
11

www.Bshams.ir

17

48

.4

48

48

122

25

17

25

17

25


L k
.

3
|

5
{z

48

} |

17

L L k

25

{z

}
:

pivot

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

T(n)=c

(n)

= T(n)=(n2 )

n n0

pivot

(n-i+1)

pivot


: ,

T(n)' 2T ( n2 ) + (n) T (n) = (n log n)

www.Bshams.ir

www.Bshams.ir

(DEVIDE AND CONQUER) .2.4

123

2 n+1 , quick sort

insertion sort

pivot

?
:

n+1+1

n+1

n+2

2
O((2 n + 1) ) O(n)

insertion

T(n-( n+2))
(n)
}|
{
z
}|
{
z

T(n) T ( n) + T (n n) + (n) + O(n)

k1

nk

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

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

www.Bshams.ir

www.Bshams.ir

.4

(n lg n)

124

n=2

. ,

(n lg n) = (2 lg 2) = 2

. 1

T (n) =

X1
2 a + 2 n
n

T (n) =

T (k) + (n) =

k=2

(k lg k)

X1
2 a + 2 n
n

k < n

(klogk) + (n)

k=2

X1
2 a + (( 2 ) n
(klogk)) + (n)
n

2 a + ( 2
n

k=2

n1

xlogxdx) + (n)

n 2

T (n) = (nlogn)
:

quick sort
.

:
.

quick sort

:
. 5

(dn/5e)

(bn/5c) n

5
.

n mod 5

5
.

insertion sort

.
,

select

pivot

www.Bshams.ir

ni

select

www.Bshams.ir

(DEVIDE AND CONQUER) .2.4

125

k i

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

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)

www.Bshams.ir

www.Bshams.ir

.4

126

( )

4.2.4

, 2
b
.

(n3 )

b
.

(nlog2 )


. 7 8

c11
c21
C=
c31
c41

c12
c22
c32
c42

c14

c24
=
c34
c44

c13
c23
c33
c43

A=

nn

a%
11
a21

a12
a22

c011
c021

c012
c022

B A, n n

22

B=

nn

b11
b21

b12
b22

,C = A B
nn

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
22

m1 + m2 + m5 + m6
m1 + m2 + m4 + m5

18 7


n 2

T (n) = 7T ( n2 ) + 18 2

18 n2 2 O(nlog27  ) = T (n) O(nlog27 )
.

www.Bshams.ir

www.Bshams.ir

(DEVIDE AND CONQUER) .2.4

127

:
. 24
?

T (24) = 7T (12) = 72 T (6) = 73 T (3) = 73 33


:

an

n 2

(a 2 )
an = a an1

n
n
n=1

: .

n
T ( 2 ) + 1
T (n) = T (n 1) + 1

T(n) :

n
n
n=1

n
T (b 2 c) + 1
T (n) = T (n 1) + 1 = T ( n1 ) + 2 = T (b n c) + 2
2
2

T (n) = T (b n2 c) + (1)
T (n) = (logn)

www.Bshams.ir

, (1) = (nlog2 1 (logn)0 )

n
n=1

www.Bshams.ir

.4

128

Dynamic Programming

3.4

b
b
b .
b
.

.
.

D&C

DP

. b

Bottom - Up

:
n
k

n1
k

n1
k1

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

www.Bshams.ir

k = 0 or
T (n 1, k) + T (n 1, k 1) + 1

k=n
else

n
k


)

www.Bshams.ir

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

1l

k = 0 or k = n
T (n 1, k) + T (n 1, k 1) + l
else

n
k

T (n, k) =

1 l 0


:
:

c[n,k]=c[n-1,k-1]+c[n-1,k]
.

c
0

0
1

3
.
.
.
.
.
n-1

1
.
.
.
.
.
1

www.Bshams.ir

k-1

c[n-1,k-1]

(nk)

c[n-1,k]

c[n,k]

www.Bshams.ir

.4

dn ,. . . d2 ,d1

130

2.3.4

c[i,j]

di , . . . , d1

c[i,j]= 1+c[1 , j-d1 ]

c[i-1 , j]

min{ c[i-1 , j],1+c[i , j - di ]}

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 j<d[1]) then C[i,j]
else if(i=1 and j d[1]) then C[i,j] 1+C[1,j-d[1]]
else if(i>1 and j<d[i])then C[i,j] C[i-1,j]
else C[i,j] min{C[i-1,j],1+C[i,j-d[i]]}
.

www.Bshams.ir

N+1 n

((N + 1)n)

www.Bshams.ir

DYNAMIC PROGRAMMING

131

{0, 1} b
.

vi

wi

.3.4

3.3.4

1,2,. . . n

.( )
.x i

{0, 1}


: .

max(

v[i,j]

xi wi W

1,2,. . . i

or 0
V[i,j]= V1

V[i-1,j]

max{ V[i-1,j],Vi +V[i-1,j-wi ]}

xi vi )

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]


DL
for k 1 to n do
for i 1 to n do
for j 1 to n do
D[i,j] min(D[i, j], D[i, k] + D[k, j])
return D

www.Bshams.ir

www.Bshams.ir

.4

132

(n3 )

Function Floyd (L[1..n,1..n]):array D[1..n,1..n],array P[1..n,1..n]


DL
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

- 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

? :
?

www.Bshams.ir

Dijkstra

www.Bshams.ir

DYNAMIC PROGRAMMING

133

(chained matrix multiplication)

di1 di

A1 , A2 , ..., An

Ai .

A=A1 A2 .....An

.3.4

5.3.4

.
.

mij

mii = 0

Ai

mii+1 = di1 di di+1

M=(mij )nn

Ai Ai+1 .....Aj

Ai Ai+1

A = (aij )pq B = (bij )qr C = (cij )pr = 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
minikj1 {mik + mk+1,j + di1 dk dj }

j>i , i=1,2,.....n-1

j=i+s

0
s=0 , i=1,...,n

mi,i+s =
miniki+s1 {mik + mk+1,i+s + di1 dk di+s } i=1,2,.....n-s ,

1 s n-1

www.Bshams.ir

www.Bshams.ir

.4

134

int minmult(int n,const int d[ ],index p[ ][ ]){


index i,j,k,diagonal;
int M[1..n][1..n]
for (i=1;i n;i++)
M[i][[i]=0;
for (diagonal=1;diagonal n-1;diagonal++)
for (i=1;i n-diagonal;i++){
j i+diagonal
m[i][j] = minikj1 {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 = A135

11
m22
s=0 =
m

33
m
44
m12
s=1 = m23

m34

A2 = B589

A3 = C893

A4 = D334

=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

www.Bshams.ir

www.Bshams.ir

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

6.3.4

.
) . .
.

pi

n
P

i=1

pi =


.

:

node

12

18

20

27

probability 0.2

0.25

0.05

0.1

0.05

34
0.3

35
0.05

.
.
.

34
12

35

20

18

27

10.3+20.25+20.05+30.2+30.1+40.05+40.05 = 2.2

www.Bshams.ir

www.Bshams.ir

.4

n
P

i=1

pi (depth(ci ) + 1)

136

12
6

20
34

18

35

27

10.25+20.2+20.1+30.05+30.3+40.05+40.05 = 2.3
:
.

ci , ci+1 , . . . , cj

cij

. . b

c1n

ck

ci < . . . < ck1

ck+1 < . . . < cj

1)i = j cii = pi
2)j > i

ci < . . . < ck1 < ck < ck+1 < . . . < cj

ck

ci,k1 ck

pk

ck

ck+1,j

ci,k1 + ck+1,j + pk + pi + ... + pk1 + pk+1 + . . .+ pj = cik1 + ck+1j +

j
X
t=i

www.Bshams.ir

pt

www.Bshams.ir

DYNAMIC PROGRAMMING

137

cij = minikj {(cik1 + 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
miniki+s {ci,k1 + ck+1,i+s } +

t=i

1sn1
,1 i ns

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

p2 = 38

p3 = 18

p4 = 18

P 1
1 1

2
1

3
2

4
2

11 7
8 4
5
1
8
1
3
8
8
1
8

Isabelle

Don

Rulph

Wally

www.Bshams.ir

www.Bshams.ir

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

1 + LCS[Xi1 , Yj1 ]

M ax{LCS[Xi1 , Yj ], LCS[Xi , Yj1 ]} xi 6= yj , i 6= 0, j 6= 0

LCS-length(X,Y)
1

m length(X)

n length(Y)

for i 1

4
5
6
7
8
9

to

do

for j0

to

do

do

c[0,j]0
for i1

to

for j1

to

do

if (xi = yj ) then

10

c[i,j] c[i-1,j-1]+ 1

11

b[i,j] -
else if (c[i-1,j] c[i,j-1]) then

13

c[i,j] c[i-1,j]

14

b[i,j]

15

else

16

c[i,j] c[i,j-1]

17

b[i,j]

18 return c and b

www.Bshams.ir

c[i,0] 0

12

i = 0 or j = 0
xi = yj , i 6= 0, j 6= 0

//(nm)

www.Bshams.ir

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)

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

www.Bshams.ir

Y=BDCABA

LCS=BCBA

yj

xi

www.Bshams.ir

.4

140

8.3.4

.
.( )

2n 1 n

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)

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

www.Bshams.ir

www.Bshams.ir

DYNAMIC PROGRAMMING

141

4
2n+1

2n 2
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
....

.....0 ........p

.. ..
.
.

.
.
.
.....

2
..2.. 3
2
....0 ........p p + pq + pq
.
.
.
.
.
.
3 ....0

0
n

www.Bshams.ir

www.Bshams.ir

.4

142

9.3.4

minlenght.

n 1

P[i][A]

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;kn-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 }]=min2jn (W[1][j]+D[j][V-{v1 , vj }])
P[1][V-{v1 }]=value of j that gave the minimum;
minleght=D[1][V-{v1 }];
}

www.Bshams.ir

www.Bshams.ir

143

.4.4

4.4

.
:
2

.
:

20

13

20

20

14

19 20

dlg ne

14

12
9

12

13
5

13

2
.

n=2 :
k

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

www.Bshams.ir

www.Bshams.ir

.4

144

:
.

B &T ( Back Tracking )

5.4


. ( )

B&T

Promissing

: : .

promissing

. (fisible)
.
.

n ,nn

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

www.Bshams.ir

www.Bshams.ir

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

n, ..., 2, 1

.
.

f
.

w1 = 3, w2 = 4, w3 = 5

13

w4 = 6

. .
.

w1
w2
w3 1

3
0

8
0
7

13

www.Bshams.ir

12

4
0

0
0

www.Bshams.ir

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);}
}

www.Bshams.ir

2.5.4

www.Bshams.ir

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 <i && switch){
if(vindex[i]==vindex[j])
switch=false;
j=j+1;}
}
return switch;}

m-coloring b

m b n

3.5.4

. b
.

void m-coloring (index i){


int color;
if (promissing(i))
if (i == n)
cout << vcolor[1] through vcolor[n]
else
for (color = 1; color <= m; color++) {
volor[i+1] = color;
m-coloring(i+1);}
}

www.Bshams.ir

www.Bshams.ir

.4

148

bool promissing (index i) {


index j;
bool switch = true;
j = 1;
while (j < i && switch) {
if (W[i][j] && vcolor[i] == vcolor[j])
switch = false;
j++; }
return switch;
}

Branch and Bound (B&B)


Back Tracking

6.4

( )

Bound

B&B

f .

,

b
f . . ,
.

www.Bshams.ir

BFS

www.Bshams.ir

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)

www.Bshams.ir

1.5

www.Bshams.ir

.5

150

1
2

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)
:

www.Bshams.ir

DF-Search
A

(|N | + |A|)

www.Bshams.ir

(DEPTH FIRST SEARCH) DFS

151

.1.5

:

.

. b
.

DF-Search

1
6
2
3
6I
6

w 6

4
6
7 

R ?
8

I
-


2
?
3
K

1
~

?
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.

www.Bshams.ir

DFS(6)

5
?
6

www.Bshams.ir

.5

152

1.1.5

Procedure DFS2(v)
p empty-stack
Mark[v]visited
push v on to p
while p is not empty do
while there exites a node w adjacent to top(p)
such that mark[w]6=visited do
mark[w] visited
push w on to 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

into

Q is not empty

do

u first(Q)
dequeue
for

from

each node w adjacent to u

do

if Mark[w] 6= visited then


Mark[w] visited
enqueue

visit

w into

O(|N | + |A|)

www.Bshams.ir

www.Bshams.ir

TOPOLOGICAL SORT .3.5

153

node visited

1.
2.
3.
4.
5.
6.
7.
8.

1
2
3
4
5
6
7
8

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,3,2,4,6,5

www.Bshams.ir

j
5
3

www.Bshams.ir

.5

154

Bellman Ford
Bellman

4.5

Ford


.
.
.

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

www.Bshams.ir

www.Bshams.ir

DAG

155

.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

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 vAdj[u] do
RELAX(u,v,w)

www.Bshams.ir

www.Bshams.ir

.5

156

(|V | + |E|)
6
1
x
y
t
sz
~
2- 7- -1- -2
-
*
>
>
4

: .

s
5- 0
3

2
6
r

50

t
2-
3

1
x
y
z
7-s -1- -2-~

*
4


3
r

s
5- 0

6
t
22
>

1
y
sx
~z
7 - 6 -1- -2-

4


3
r

s
50

6
t
22


1
z
y
s
-1-2
6
4
*
4
>
2

x
7 -s
6

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

www.Bshams.ir

www.Bshams.ir

LOOP INVARIANT

1.6

? LOOP INVARIANT

.
,

Loop Invariant .

Loop Invariant

Loop Invariant

,
.

LOOP INVARINT

www.Bshams.ir

Loop Invariant

www.Bshams.ir

.6

158

...
// the Loop Invariant must be true here
while ( TEST CONDITION ) {
//top of the loop
...
//bottom of the loop
//the Loop Invariant must be true here
}
// Termination + Loop Invariant Goal
...

Loop Invariant

Loop Invariant

Loop Invarint

Loop Invariant

: .
. :Pre-condition
:Post-condition

Loop Invariant

:Loop

Variant

. Pre-condition 1
. Pre-condition Loop Invariant 2
. Loop Invariant Loop Variant 3
. Loop Invariant 4

www.Bshams.ir

www.Bshams.ir

LOOP INVARIANT .1.6

159

Loop Invariant

. Post-condition
. Loop Variant 6

loop Invariant


2 . 14
4
. 5
.
:

n 1

(1

1. int sum=0;
2. int k=0;
3. while(k < n){
4.

k++;

5.

sum+=k;

6.

........................................................................................................
precondition : sum = 0, k = 0

postcondition : sum =

n
P

i=1

loop invariant : sumk =

INITIALIZATION:

www.Bshams.ir

k
P

i=1

www.Bshams.ir

.6

precondition

160

loop invariant

k = 0 sum =

0
P

i=1

i = 0 = sum

MAINTENANCE:

j loop invariant

kj+1

sumj =

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

j=1

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=facti; }

7.

return fact;

8.

.............................................................................................................
precondition : n 1

www.Bshams.ir

www.Bshams.ir

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 +

www.Bshams.ir

www.Bshams.ir

.6

162

loop invariant : gcd[m, n] = gcd[mprime, nprime]

postcondition : gcd[m, n] = mprime


...........................................................................
INITIALIZATION:
mprime = m

nprime = n gcd[m, n] = gcd[mprime, nprime]

MAINTENANCE:
gcd[m, n] = gcd[mprimei , nprimei ]

if (mprimei > nprimei ) :


mprimei+1 = mprimei nprimei ,

nprimei+1 = nprimei

gcd[mprimei+1 , nprimei+1 ] = gcd[mprimei nprimei , nprimei ] =


gcd[mprimei , nprimei ] = gcd[m, n]

else :
nprimei+1 = nprimei mprimei ,

mprimei+1 = mprimei

gcd[mprimei+1 , nprimei+1 ] = gcd[mprimei , nprimei mprimei ] =


gcd[mprimei , nprimei ] = gcd[m, n]

TERMINATION:
mprime = nprime gcd[m, n] = gcd[mprime, nprime] =
gcd[mprime, mprime] = mprime postcondition

en

1. double TaylorExp(double n ,int k){

www.Bshams.ir

(4

www.Bshams.ir

LOOP INVARIANT .1.6

163

2.

double result =1;

3.

int count =0;

4.

int denom=1;

5.

while (count<k){

6.

count ++;

7.

denom=count;

8.

result+=pow(n,count)/denom;

9.
10.

}
return result;

11.

......................................................................................................
precondition : n Z

k N, k > 0
2

loop invariant : result = 1 + n + n2! + +


2

ncount
count!

, denom = count!

postcondition : 1 + n + n2! + + nK! = result


...............................................................
K

INITIALIZATION:
count = 0,

denom = 1,

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! + +

www.Bshams.ir

nK
K!

postcondition

counti+1

www.Bshams.ir

.6

164

loop invariant

(5
:

function add(y,z)
comment

return y + z, where y,z N

1.

x := 0 ; c := 0 ; d := 1 ;

2.

while(y > 0 ) (z > 0 ) (c > 0 )do

3.

a := y mod 2;
b :=z mod 2;

4.

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


:

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

bj+1 aj+1

cj+1

www.Bshams.ir

cj+1

bj+1 aj+1
, cj
cj

www.Bshams.ir

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

,
:

loop invarint

(yk + zk + ck )dk + xk = y0 + z0

bz/2c by/2c

yk = zk = ck = 0 xk = y0 + z0

www.Bshams.ir

z y

www.Bshams.ir

.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

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

www.Bshams.ir

c))()
=

xj + yj zj = y0 z0

www.Bshams.ir

LOOP INVARIANT .1.6

167

z
:

zk = 0, xk + yk zk = y0 z0 xk + yk zk = xk + yk 0 = xk = y0 z0

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

r = y0

, q = 0 qj wj + rj = 0 + y0 = y0

: ,

www.Bshams.ir

loop invariant

www.Bshams.ir

.6

168

qj wj + rj = y0 , rj < wj

w>z

wy

, ,

bw/2c ,

w = z

w/2

bw/2c

qj+1 = 2qj

, wj+1 = bwj /2c

j + 1

w>z

wj+1 > rj

1:

rj+1 = rj

, 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

www.Bshams.ir

(a)

(b )

www.Bshams.ir

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

,
.


.wk

qk z0 + rk = y0

, rk < z0

= z0

loop invariant

loop invariant

(8

function power(y,z)
comment

www.Bshams.ir

return yz , where y R,z N

1.

x :=1;

2.

while z > 0 do

3.

if z is odd then x := x.y;

4.

z :=bz /2 c;

5.

y :=y2 ;

6.

return (x)

www.Bshams.ir

.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
:

2bzj /2c
z :
xj+1 yj+1 zj+1 = xj yj (yj )
=

2(zj 1)/2

= xj yj zj = y0 z0
xj yj (yj )

2bzj /2c

z :
xj+1 yj+1 zj+1 = xj (yj )
=

2(zj )/2
= xj yj zj = y0 z0
xj (yj )

z=0

xk yk zk = y0 z0 , zk = 0 xk = y0 z0

. ,

www.Bshams.ir

www.Bshams.ir

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

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
.

www.Bshams.ir

www.Bshams.ir

.6

172

(10

Horner an xn + an1 xn1 + a1 x + a0


:

A[i] = ai

loop invariant

f or

A[0..n]

0in

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 ij

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

n
P

i=j+1

j=0v=

n
P

i=0

vj A[j]
x

loop invariant

loop invariant

j=n+1

A[i]xi(n+1) = 0

loop
n
P

invariant
n
P

A[i]xij A[j]

i=j

A[i]xij

i=j+1

A[i]xi(j+1)

A[i]xi

j=0

www.Bshams.ir

www.Bshams.ir

(AMORTIZED ANALYSIS)

173

(Amortized Analysis)

.2.6

2.6

. ,

.

.

.
.

(Aggregate

Analysis)

(Acconting

Method)

(Potential

Method)

(Aggregate Analysis)

1.2.6

, .
.

T (n) f,

T (n)
n

,
.
.
.
.

www.Bshams.ir

www.Bshams.ir

.6

174

push(S, x)

O(1)

: 1

. ,

push

O(1)

pop(S)

. 1

n , pop

multipop(S, k)
S

TRUE Stack-Empty

FALSE

Multipop(S, k)
1. while

not

Stack-Empty(S)

2.

do pop(S)

3.

k k1

multipop

pop

and

push

k 6= 0

,
.
.

O(n2 )

O(n)

multipop

O(n)


.
, .

push

O(n)

multipop

multipop

pop


, (multipop )
.

push

pop

, .

stack

www.Bshams.ir

www.Bshams.ir

(AMORTIZED ANALYSIS)

175

O(n)

multipop

, .

O(n)
n

pop , push n

= O(1)

.2.6

.
.

O(1)

b
.
.

2 k-bit

: 2

A[0]

length[A]=k

A[0..k 1]

: .

A[k 1]

INCREMENT(A)
1: i 0

2: while
i < length[A] and A[i] = 1
3:
do A[i] 0
ii+1

4:
5:

if

i < length[A]

then

6:

A[i] 1

1 )

INCREMENT

INCREMENT n (k) (
.

O(nk)

A[1]

.
.

b4c

A[2]

b 2ni c , A[i]

A[0]

O(n)
n

b2c

INCREMENT

i = 0, 1, 2, , blog2 c
n

A[i]

i > blogn2 c

Incrementing a Binary Counter

www.Bshams.ir

www.Bshams.ir

.6

176

blg nc

X
i=0

c<n
i

O(2n)
n

1
2i
i=0

= O(1)

= 2n

(Accounting Method)

2.2.6

,

.
, .

f .
.
.
.

,
.

i
C

Ci


: ,

n
X

Ci

i=1

n
X

Ci

i=1

n
X
i=1

Ci

n
X

Ci

i=1

.

.

www.Bshams.ir

www.Bshams.ir

(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

.
f .

:2

.
1 . 2

1 , .
,

O(n)

.
.

www.Bshams.ir

www.Bshams.ir

.6

178

(Potential Method)

3.2.6

,
,
b
.
.

D0

1
:

i = 1, 2, , n

Ci = i
Di =

=(Potential Function) Di
: Di RealN umber
C0 = Ci + (Di ) (D
i

i1 )

n
n
n
n
P
P
P
P
[Ci + (Di ) (Di1 )] =
Ci +
(Di ) (Di1 )
Ci =

i=1

i=1

n
P

i=1

i=1

i=1

Ci + (Dn ) (D0 )

(Dn ) > (D0 )

. .

(Di ) (D0 )
(D0 ) = 0

(Di ) 0

.
:

(Di ) (0) > 0

for all i

.
.
.

www.Bshams.ir

www.Bshams.ir

(AMORTIZED ANALYSIS)

179

: .

(Di ) =
D0 =

.2.6

: 1

(D0 ) = 0

s , i 1

(Di ) 0 = (D0 )

(Di1 ) = s
i push

i pop

(Di ) (Di1 ) = (s + 1) s = 1
Ci = Ci + (Di ) (Di1 ) = 1 + 1 = 2 O(1)
:

(Di ) (Di1 ) = (s 1) s = 1
Ci = Ci + (Di ) (Di1 ) = 1 1 = 0 O(1)
:

k = min(s, k) (Di ) (Di1 ) = (s k ) s = k


Ci = Ci + (Di ) (Di1 ) = k 0 k 0 = 0 O(1)
.

O(n)

multipop

(Di ) = bi

:2

(Di ) 0
ti =

Ci = ti + 1

www.Bshams.ir

www.Bshams.ir

.6

if

bi = 0 bi1 = k = ti

if

bi > 0 bi = bi1 ti + 1

bi bi1 ti + 1

(Di ) (Di1 ) bi1 ti + 1 bi1 = ti + 1


Ci0 = Ci + (Di ) (Di1 ) ti + 1 ti + 1 = 2 Ci0 2
n
P

i=1

www.Bshams.ir

Ci0 2n O(n)

180

Potrebbero piacerti anche