Professional Documents
Culture Documents
Algorithm HajSeyedJavadi
Algorithm HajSeyedJavadi
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
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
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
57 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3
59
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . max heap
62 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ( )
63 . . . . . . . . . . . . . . . . . . . . . . . . . ( )Binomial
63 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
Tree 1.4.3
64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65 . . . . . . . . . . . . . . . . . . . . . . . . .Min
Binomial Heap
Binomial Heap
66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.3
5.4.3
67 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FIBONACCI
67 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fibonacci
www.Bshams.ir
3.3
6.4.3
HEAP 5.3
Tree 1.5.3
www.Bshams.ir
68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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
5.4
144
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nb 1.5.4
146
..................................
b 2.5.4
149 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Exploring
149 . . . . . . . . . . . . . . . . . . . . . . . . . . . (Depth
graphs
.5
1.5
152 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.5
www.Bshams.ir
152
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+
f (n) =
3
n
n<1000
2n 2
n100
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+
3.1
f : N R+
:
n, n3 + n2 , n4 , n2 logn, ...}
www.Bshams.ir
www.Bshams.ir
SM ALL O .4.1
small o
:
4.1
f : N R+
n o(2n) 2n o(n):
2n cn
c=1
F = 2n
/ o(n)
c= 13
F = n
/ o(2n)
2n o(n) c > 0
nN
small
:
5.1
f : N R+
(f (n))
: :
o(f (n)) =
M1
o(f (n))
:
:
M2
d0
n M ax{M1 , M2 }
. ,
6.1
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
= log n! (n log n)
:
.log
n! (n log n)
log n! O(nlog 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
= nn (n!)2 (
n+1
2nlogn =
n + 1 2n
) =
= log n! (n log n)
o(f (n))
7.1
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
(A\B
= A\(A B)):
. :
:
,
:
www.Bshams.ir
www.Bshams.ir
.1
12
g(n)= n
n
n
:
g(n) (n)
n g(n) cn c >
( )
g(n)
c
nF
= g(n) 6 (n)
g(n) o(n)
= g(n) 6 o(n)
.
:
.
:
:
n N f (n) 1 f (n)
f (n) O(h(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) 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 (. )
.
:
:
O,
g(n) (f (n))
f (n) (g(n))
O,
, g(n) (h(n)) =
f (n) O(g(n))
f (n) (g(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, ,
:
:
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
g f
(.
www.Bshams.ir
www.Bshams.ir
.2
1.2
.
:
k ,
t0 , , tk1
. .
.
,f (n)
0
:
a0 tn + a1 tn1 + + ak tnk = 0
xi
ti .
: .
www.Bshams.ir
www.Bshams.ir
.2
10
()
.
r1 , . . . , rk
1.1.2
k (1
(x rp )m )
: ((x
rp )
m+1
rp
:
:
g(n) =
5g(n 1) 6g(n 2)
n1
else
:
x1 = 3, x2 = 2 g(n) = c1 3n + c2 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
tn 3tn1 + 2tn2 = 0 x2 3x + 2 = 0
x1 = 1, x2 = 2
, t0 = 0, t1 = 1 = tn = 2n 1
:
ai , bj
di pi (n)
tn 7tn1 + 12tn2 = 2n + n + 3n (n + 1)
:
www.Bshams.ir
www.Bshams.ir
.2
12
r1 = 1, r2 = 1, r3 = 2, r4 = 3, r5 = 3, r6 = 3, r7 = 4
t(n) =
1
2t( n2 ) + n
n=1
o.w
:
.
n = 2k t(n) = t(2k )
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 (n) =
3
2
n
1 n
1
2T(2) 2T(4) n
n=1
n=2
o.w
:
:
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)
n!
t(n1)
(n1)!
=2
= g(n)
T (n) =
n=0
n=1
1+T (n1)
T (n2)
o.w
:
T (0) = a
T (3) = 1+a+b
ab
T (4) =
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 = 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)
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
)
(.
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]
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
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
(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
n)
ck
ck+1 < ... < cn
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)
}|
10
10
n1
.........
10
(n-1)
= a(n-1)+b(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 (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) :
T ( 6) :
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 = n1 cn1 = n2
= n = an + bn + cn = 2an1 + 2bn1 + 3cn1 =
www.Bshams.ir
www.Bshams.ir
.2.2
25
nm
.
.
A b
T(n,m-1)
T (n, m 1)
{z
T (n 1, m)
B
d - T(n-1,m)
: .
,
.
:
.
n*n
www.Bshams.ir
www.Bshams.ir
.2
26
.
?
:
.
?
:
.
, :
0 1
.
{}
{4}
{3}
n-1
n2
.
:
(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
27
.T (n)
0
.
< <
, >
T (n) (f (n))
f ( nb )
(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
29
- f(n)
f(n)
a
6
f(n/b)
a
j
f(n/b)
a
?
f(n/b)
a
..
..
..
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)
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
31
: (3)
a
g(n) = O(nlogb )
.
f (n) = (nlogb )
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)
(2)
af (n/b) cf (n)
.
g(n) = (f (n))
c<1
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))
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
= (n
loga
b
(1
)
a
f (n) = (nlogb ) (2
www.Bshams.ir
33
0 , f (n) = (nlog + ) (3
af (n/b) cf (n) n c < 1
a
b
>
.T (n)
= (f (n))
:
: 1 (1) 2
:
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
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
:
2
(nlog 2 (logn))
a=b=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
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
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
n 1
n(n1)
www.Bshams.ir
(1)
O(n2 )
www.Bshams.ir
.2
38
Insertion Sort
3.5.2
n
P
i=2
false
while
.
.
while
O(1)
while
.
.
(n)
n-1
(n)
O(n)
while
(i)
(n2 )
(i )
O(n2 )
www.Bshams.ir
(n2 )
www.Bshams.ir
.5.2
39
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!
n!
4.5.2
,
.
.
.
www.Bshams.ir
www.Bshams.ir
.2
40
// (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
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
j, i
d,
if
right, left
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 )
6.5.2
n
P1
i=1
insertion sort
O(n2 )
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)
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
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
m
P1
for(int k=buckets[j];k>0;- - k)
//
j=1
buckets[j] = n
A[i++]=j;
O(n+m)
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)
//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
(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
531,1,13,43,313,24,25,5,205,96,999
.
( ) Trace
6.2
(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
dlogn10 e
X7
i=0
9
10
i
3X
logn
5
i=0
9
10
i
(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
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 ,
X
n=0
bn+1 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 ,
b0 , b1 , b2 ,
f (x) =
n=0
bn xn
(f (x) b0 ) = x
www.Bshams.ir
X
n=0
(1)
www.Bshams.ir
53
[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
, ;
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
.
.
.
.
.
. ,
struct , union
: .
f :
:
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
]
.
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
www.Bshams.ir
www.Bshams.ir
.3
60
//O(logn2 )
h, heap n , heap
h
h+1
20 + 21 +....+2h1 < n 20 + 21 +....+2h 2211 < n 2 211
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
{O(lg n)}
heap
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
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
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
2.4.3
b ,
.
www.Bshams.ir
www.Bshams.ir
.3
64
3.4.3
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
65
Binomial-Heap
Head[H]
- 10
- 1
- 6
12
25
8
11
18
14
17
29
38
27
Heap
1 .
,n
Binomial Tree
Binomial Heap
Binomial Tree
Node
.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)
6.4.3
: .
4 ........ 9 ..................... 7
3
4
5
3
2
merge
. ,
www.Bshams.ir
(1)
www.Bshams.ir
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
.
:
f0 = 0 , f1 = 1 , f2 = 1 , f3 = 2, ...
Fn fn+2
.
(n 0) fn
Fn
Fn
3.5.3
Fibonacci Heap
fn+1
4.5.3
Fi+2
Fi+1
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
LeftChild
2-3
MiddleChild
2-3
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
www.Bshams.ir
www.Bshams.ir
.3
72
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
for
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
www.Bshams.ir
www.Bshams.ir
.3
76
.
: ,
(
(new root)
( )
LeftChild
Middle Child, a
.
.
Tow3::Search
x.key
2-3
.
.
FindNode
FindNode
. ( )
.
p root
root
Tow3::Insert
. ,
,
.
:void InsertionError()
. .
(this)
Middle Child
RightChild
dataR
RightChild
dataL
MiddleChild
dataL
a dataR
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
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
:
www.Bshams.ir
www.Bshams.ir
2-3 .6.3
83
Combine Rotation
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]
p[left[y]] x
5. p[y] p[x]
// Link xs parent to y
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.
5.
y right[p[p[x]]]
6.
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.
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.
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)
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.
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
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.
3.
w right[p[x]]
4.
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.
10.
color[w]=RED
//case2
11.
x p[x]
//case2
12.
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.
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
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
solution , feasible
Select
feasible
Select
b .
1.1.4
.
:
www.Bshams.ir
www.Bshams.ir
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
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
www.Bshams.ir
www.Bshams.ir
.4
102
f :
.
:
:kruskal
:
find
n-1
greedy ( n 1
e=uv
.
.
find(v),find(u)
n-1 T
www.Bshams.ir
www.Bshams.ir
103
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)
www.Bshams.ir
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)
.
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
www.Bshams.ir
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.
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.
12.
A A {(v,[v])}
13.
S S {v}
14.
15.
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 ) heap
fibonacci-heap
www.Bshams.ir
O(|V |2 )
www.Bshams.ir
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
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
.
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
111
.
:
:
:
(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
113
.
.
O(n log n)
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
www.Bshams.ir
fisible
fisible
www.Bshams.ir
.4
114
deedline
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
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
.
:
0
0
1
1
2
2
0
0
1
1
2
2
M
3
0
0
2
K
K
3
0
0
o
2
]
3
value=42
.
www.Bshams.ir
O(nlogn)
www.Bshams.ir
117
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 )
D&C
www.Bshams.ir
www.Bshams.ir
.4
118
2 +1 2
(n)
www.Bshams.ir
www.Bshams.ir
119
merge sort
2.2.4
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])
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
stable
stable
if u[i] v[j]
www.Bshams.ir
www.Bshams.ir
121
Quick Sort
3.2.4
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
: ,
www.Bshams.ir
www.Bshams.ir
123
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
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
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)
2(n/5) 1
.
1 ((n 1) 2( n 1)) + 2( n 1) = 7n 3
2
5
5
10
2
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
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
127
:
. 24
?
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
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-1 , 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 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]
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
www.Bshams.ir
www.Bshams.ir
.4
132
(n3 )
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
di1 di
A1 , A2 , ..., An
Ai .
A=A1 A2 .....An
.3.4
5.3.4
.
.
mij
mii = 0
Ai
M=(mij )nn
Ai Ai+1 .....Aj
Ai Ai+1
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
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
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
m24 = 1845
www.Bshams.ir
www.Bshams.ir
DYNAMIC PROGRAMMING
135
s=3 =
.3.4
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
1)i = j cii = pi
2)j > i
ck
ci,k1 ck
pk
ck
ck+1,j
j
X
t=i
www.Bshams.ir
pt
www.Bshams.ir
DYNAMIC PROGRAMMING
137
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[Xi , Yj ] =
1 + LCS[Xi1 , Yj1 ]
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, 0) = 0
i 1
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)
h(i + j, j) = g(i, j)
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
.
.
.
.
.
.
....
.... .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
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 )
dlg ne -1
www.Bshams.ir
www.Bshams.ir
.4
144
:
.
5.4
. ( )
B&T
Promissing
: : .
promissing
. (fisible)
.
.
n ,nn
1.5.4
[k,col[k]] k
[i,col[i]] i
k < i
k i
www.Bshams.ir
www.Bshams.ir
145
.5.4
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
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
147
.5.4
m-coloring b
m b n
3.5.4
. b
.
www.Bshams.ir
www.Bshams.ir
.4
148
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)
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
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)
2.5
BF-Search(G)
into
Q is not empty
do
u first(Q)
dequeue
for
from
do
visit
w into
O(|N | + |A|)
www.Bshams.ir
www.Bshams.ir
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]
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.
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.
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.
2.
initialize-single-source(G,s)
3.
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
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
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
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
161
TERMINATION:
i = n , f act = i! f act = n! postcondition
precondition
, :
n 1
(3
:
int mprime = m;
3.
int nprime = n;
4.
while(mprime ! =nprime){
5.
6.
mprime - = nprime;
7.
8.
9.
10.
else
nprime - = mprime;}
return mprime;
}
.....................................................................................................
precondition : m, n Z +
www.Bshams.ir
www.Bshams.ir
.6
162
MAINTENANCE:
gcd[m, n] = gcd[mprimei , nprimei ]
nprimei+1 = nprimei
else :
nprimei+1 = nprimei mprimei ,
mprimei+1 = mprimei
TERMINATION:
mprime = nprime gcd[m, n] = gcd[mprime, nprime] =
gcd[mprime, mprime] = mprime postcondition
en
www.Bshams.ir
(4
www.Bshams.ir
163
2.
3.
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
ncount
count!
, denom = count!
INITIALIZATION:
count = 0,
denom = 1,
MAINTENANCE:
2
resulti = 1 + n + n2! + +
ncounti
counti !
, denomi = counti !
n
n
resulti+1 = resulti + (count
= 1 + n + n2! + + ncounti ! + (count
i+1 )!
i+1 )!
counti+1
counti
TERMINATION:
2
www.Bshams.ir
nK
K!
postcondition
counti+1
www.Bshams.ir
.6
164
loop invariant
(5
:
function add(y,z)
comment
1.
x := 0 ; c := 0 ; d := 1 ;
2.
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
loop invariant
(yj + zj + cj )dj + xj = y0 + z0
:
aj+1 = yj mod 2
, bj+1 = zj mod 2
bj+1 aj+1
cj+1
www.Bshams.ir
cj+1
bj+1 aj+1
, cj
cj
www.Bshams.ir
165
xj+1
xj+1
dj
xj
aj+1 bj+1 cj
(*)
n N
(*)
loop invariant
,
:
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.
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
:
yj+1 = 2 yj
www.Bshams.ir
c))()
=
xj + yj zj = y0 z0
www.Bshams.ir
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
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
j + 1
w>z
wj+1 > rj
1:
rj+1 = rj
, rj+1 = rj
www.Bshams.ir
(a)
(b )
www.Bshams.ir
169
wj+1 < rj
1:
2:
(1)
,
:
loop invariant
,
.
.wk
qk z0 + rk = y0
, rk < z0
= z0
loop invariant
loop invariant
(8
function power(y,z)
comment
www.Bshams.ir
1.
x :=1;
2.
while z > 0 do
3.
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 ,
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
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
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
: ,
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
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 )
. .
(Di ) (D0 )
(D0 ) = 0
(Di ) 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)
:
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
i=1
www.Bshams.ir
Ci0 2n O(n)
180