Professional Documents
Culture Documents
29 2013
0.1
, .
. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
:
1.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
1.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
1.3
. . . . . . . . . . . . . .
1.4
. . . . . . . . . . . . . . . . . . . . . . . . . :
11
1.4.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
13
1.4.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
13
" " . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
17
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
20
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
20
. . . . . . . . . . . . . . . . . . . . :
27
). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :(BST
29
2.2.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :BST
30
2.2.2
. . . . . . . . . . . . . . . . . . . . . . . :BST
30
2.2.3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :BST
31
2.2.4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :BST
32
2.2.5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . :BST
33
2.2.6
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :BST
34
2.2.7
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :BST
36
Traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . :BST
37
2.3.1
. . . . . . . . . . . . . . . . . . . . . . . . . . :InOrderTraversal
37
2.3.2
PreOrderTraversal . . . . . . . . . . . . . . . . . . . . :BST
38
2.3.3
PostOrderTraversal . . . . . . . . . . . . . . . . . . . . :BST
39
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :AVL
39
2.4.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :AVL
42
2.4.2
. . . . . . . . . . . . . . . . . . . . . . . . :AVL
42
2.4.3
AVL . . . . . . . . . . . . . :
43
2.4.4
. . . . . . . . . . . . . . . . . . . . . :AVL
46
2.4.5
AVL . . . . . . . . . . . . . . . . . . . . . . . . . :
47
2.4.6
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :AVL
49
2.4.7
Cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :AVL
49
2.4.8
. . . . . . . . . . . . . . . . . . . . . . . . . . . :AVL
50
2.4.9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :t-AVL
51
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
53
1.5
2
2.1
2.1.1
2.2
2.3
2.4
3.1
4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
55
58
) (. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
60
4.1.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . :Chaining
60
4.1.2
). . . . . . . . . . . . . . . . . . . . . . . . . . :(Open Hashing
61
4.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
62
4.3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
65
4.3.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . :
65
4.3.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . :
67
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
70
5.1
qui ksort. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
70
5.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :Qui kSele t
74
5.2.1
. . . . . . . . . . . . . . . . :Qui kSele t
76
5.2.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . :9
78
). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :(Max-Heap
80
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
80
6.1.1
. . . . . . . . . . . . . . . . . . . . . . :
81
6.1.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . :Extra tMax
82
6.1.3
. . . . . . . . . . . . . . . . . . . . :In rease_Key
83
6.1.4
. . . . . . . . . . . . . . . . . . . . . . :Insert_Key
85
6.1.5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
85
6.1.6
. . . . . . . . . . . . . . . . . . . . . . . . . . . . :
85
6.1.7
. . . . . . . . . . . . . . . . . . . . . . . :HeapSort
89
6.1.8
. . . . . . . . . . . . :11
89
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
93
7.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
93
7.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . :DFS
95
98
4.1
6.1
7.2.1
7.3
7.4
100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . :DFS
7.3.1
Depth-First-Forest . . . . . . . . . . . . . . . . . . . :
101
7.3.2
. . . . . . . . . . . . . . . . . . . .
107
7.3.3
. . . . . . . :
110
7.3.4
) . . . . . . . . . . . . . . . . . . :(12
113
114 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
7.4.1
) . :(12
3
116
7.4.2
) . . . . . . . . . . . . . . . . . . . . :(12
117
7.4.3
) . . . . . . . . . . . . . . . . . . . . . . :(12
118
7.4.4
) DAG . . :(12
119
7.5
119 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :BFS
7.6
123 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
7.6.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . :Dijkstra
123
7.6.2
) Bellman-Ford (. . . . . . . . . . . . . . . :
126
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :Union Find
127
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
131
10
9.1
131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
9.2
131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :MST
9.3
9.4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
10.1
10.2
137
137 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
10.1.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . :Counting Sort
137
10.1.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :Radix Sort
139
10.1.3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . :Insertion Sort
139
10.1.4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :Bu ketSort
140
10.1.5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . :Sele tionSort
141
10.1.6
. . . . . . . . . . . . . . . :
142
143 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
10.2.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . :
147
1 :
1
1.1
) (n n .
.
.
1.1 : f, g : N+ R :
f O (g) .1 C > 0 N0 N+ n > N0 ).f (n) C g (n
f (g) .2 C > 0 N0 N+ n > N0 ).f (n) C g (n
+
|) .|f (n)| < |g (n
f o (g) .3 > 0 N0 N N0
> n
n
) (n
). fg(n
g (n) 6= 0" 0
+
|) .|f (n)| > |g (n
f (g) .4 > 0 N0 N n> N0
f (n) n
g (n) 6= 0" . g(n)
1.2:
.1 ) O (g ,:
)O (g) = f : N+ R | C, N0 s.t n > N0 : f (n) C g (n
.2 ) f = O (g ) O (g
f .
.3 :
) f O (g f " g .
) f o (g f " .g
) f (g f " g .
) f (g f .g
) f (g f " g .
1.3:
.1 f (n) = n g (n) = n ) f O (g C = 1 N0 = 1 n > 1
) .f (n) = n 3n = 1 g (n ) g O (f g = 3 N0 = 1 n > 1
).g (n) = 3n 3n = 3 f (n
1.1
1 :
)( ) f O (g ) g O (f
)( ) f (g ) .g (f
)( ) .g (f
.4 ) f O (g h f ).h O (g
.5 ) f (g h f ).h (g
.6 ) f o (g ) f O (g ) f (g ).f (g
.7 ) f (g + h ) h o (g ).f (g
.8 )) f O (g (o, , c R+ )) cf O (g . (o, ,
:
.1 :
)( ) f O (g ) ,g O (h C1 , C2 > 0 N1 , N2 N+ > n
} max {N1 , N2:
)f (n) C1 g (n) C1 C2 h (n) = f O (h
)( > 0 ) f o (g ) g o (h N1 , N2 N+ } n > max {N1 , N2
:
1 :
1.1 :
)( ) f (g ) g (h ) f O (g ) f (g ) g O (h ),g (h
) f O (h ) f (h ).f (h
.2 ) f O (g C > 0 N0 N+ n > N0:
1
) f (n) = g (f
C
)f (n) Cg (n) = g (n
)g (n) C f (n) = f (n
.3 ) f O (g) g O (f .
.4 C > 0 N N n > N:
)h (n) f (n) Cg (n) = h O (g
.5 C > 0 N N n > N:
)h (n) f (n) Cg (n) = h (g
.6 .
.7 ) f (g + h C1 , C2 > 0 N1 N+ n > N1:
))C1 (g (n) + h (n)) f (n) C2 (g (n) + h (n
1
2
< |) .|h (n )f (h
) h o (g N0 n > N0 |)|g (n
} n > max {N0 , N1:
1
1
1
C1 g (n) f (n) 1
)C2 g (n
2
2
) f (h } n > max {N0 , N1:
1.2
1 :
1.6 n :
Bubblesort(A):
for i=1 to n-1
for j=1 to n-i
if A [j] > A [j + 1] then:
)]swap(A [j] , A [j + 1
) T (n ,n :
n1
n1
ni
n1
X
X
X
X
1 +
i
(1 + 5 (n i)) = (n 1) + 5n (n 1) 5
= 5
)T (n
i=1
i=1
j=1
i=1
)n (n 1
= (n 1) + 5n (n 1) 5
= (n 1) + 2.5n (n 1) = 2.5n2 1.5n 1
2
. , n2
) (1.5n + 1 .
. T n2
(1.5n 1) o 2.5n2 .2.5n2 n2
1.7 :
. " ,(n, n2 , n3 , ... ) n n
2
.n
) .(,
O
)(n
,
O
(n
log
)n
,
O
n
.O (n) , O (n log n) , O n2
1.2 :
" :
.1 : " .
.2 : " .
.3 : " "
.
:
1.8 : :
.1 Worst-Case :\
. "
.Worst-Case
.2 Best-Case :\
. "
.Best-Case
1.9 Best-Case .Worst-Case
8
1.3
Worst-Case
1 :
Worst-Case
. )) (f (n f
:
.1 ) (
)) (f (n f.
.2
" )
( )) O (f (n f.
)) (f (n
)) . (f (n "
) (n ) (log n
.
1.10 :
k n n )O (n
k
)) O (k n k n )O (n
k n O n2'( . k
). (k n
1.3
"
. ,
, .n
:
.1 " )
n (n ) Worst-Case
.(S
enerio
.2 "
) ".
:
1.11
). (n
,T C n N
: A )/ (n
.T (n) < c n C = 1 n0 N . T (n) < n0
n0 n0 . } j {1, ..., n0
A } j {1, ...,0 j . j
B A" ,B [j] 6= min B A
] B [j j ] B [j j > 1
B .1 B B B [j] = min B A
.B A j ] B [j j
9
1.3
1 :
.j > 1 ] B [j B .1 A
B .
1.12
). (n
.T n0 N
: A" )/ (n
.T (n) < n0 n0
} j {1, ..., n0 . n0 j
"
" .
1.13
) (n .
: " , :
FindMin(A):
for i = 2, ..., n
]if A [i] < A [1
]swap A [i]with A [1
]return A [1
: j j ] A [j] < A [1
] A [j ] .A [1 ] A [j j < i n ] A [i] > A [j
] A [1.
: n ) (1 ). (n
10
1.4 :
1.4
1 :
, " :
Bubble :
) ( Bubble 1) 5n 1 , 3(
) ( .2n Bubble ) h (n )h (n
2n h (n) 5n" .n N Bubblesort ) T (n"
, Bubble ) Bubblesort(n-1 :
)T (n 1
)= T (n 1) + (n
} | {z
)bubblesort(n 1
Bubble
) . T (1) = (1 :
1.14 :
.1 ) T (n) O (n : T ) O (n
n ) T (n ) T (
) T (n ) .O (n
)) T (n) O (n ) (T (n) = O (n N, C > 0 n > N
.T (n) Cn , .
.2 ) T (1) (1 :
. T n
) n" n ( 1
) .(n
1 .
.3 )) T (n) = O (1) + O (n ) (T (n) O (1) + O (n :
) ,O (1) + O (n
.
. C1 , C2 > 0
N N n > N .T (n) C1 + C2 n
.4 ) T (n) = T (n 1) + O (n :
) ,T (n 1) + O (n )
) g f + O (n ) f + O (n f + h
) .(h O (n n
n 1 .n C > 0
N N n > N .T (n) T (n 1) + Cn n ) T (n
) T (n 1 .
11
1 :
1.4 :
O , '
. , " " , "Abuse of
"notation , .
.
,
.
:
1.15 :
O (n) + O n2 = O n2 .1 ) f O (n g O n2 .f + g O n2
.2 f, g C1 , C2 > 0 N N n > N:
f (n) + g (n) C1 n + C2 log n C1 n + C2 n = (C1 + C2 ) n
log n n .n N ) f + g O (n.
.3 f1 , ..., fk , C1 , ..., Ck > 0 N N :n > N
f1 (n) + ... + fk (n) C1 n + .... + Ck n == (C1 + ... + Ck ) n
O n2 .O n2
.4 f, g C1 , C2 > 0 N N :n > N
f (n) g (n) C1 n C2 log n = C1 C2 n log n
) O (n
n , ) ?O (n
) ,f1 , ..., fn O (n :
Ci
n
X
i=1
Ci n =n
n
X
i=1
)fi (n
12
n
X
i=1
= )T (n
1.4 :
1 :
Ci
n
X
i=1
) .T O (n
.n :
1 =n max Ci n = max Ci n2
1in
1in
O n2 ).O (n
1.4.1
n
X
i=1
max Ci = n max Ci
1in
1in
n
X
i=1
Ci n
n
X
i=1
T (n) n
:Bubblesort
)T (n) = (n) + T (n 1
C1 , C2 > 0 n N:
)C2 n + T (n 1) T (n) C1 n + T (n 1
.C2 T (1) C1
1.16 " n N Bubble ) (n .n = 1
" ) n n 2 ,n 1 ( "
, :
)T (n) C1 n + T (n 1) C1 n + C1 (n 1) + T (n 2
n
X
)n (n + 1
i = C1
... C1 n + C1 (n 1) + ... + C1 1 = C1
2
i=1
) ,T (n) C2 n(n+1 n N:
2
)T1 (n
)T2 (n
z
|}
{
|}
{
z
C2 2 C2
C1 2 C1
n +
)n T (n
n +
n
2
2
2
2
) T2 (n) T (n) T1 (n
n N
T1 O n2 T2 n2
T O n2 ,T n2 .T n2
n
X
)fi (n
= ) T (n ).fi O (n
i=1
1.4.2 :
:
1.17
Bubblesort
).T O (n
1.18" T n2 .T n2 ) T O (n
C1 , C2 > 0 N N n > N C1 n2 T (n) C2 n
" .
13
1.4 :
1 :
: : n = 1 )) T (1) O (1 (.
: ) T (n 1) O (n 1 )) T (n) O (n (.
: :
more abuse
)O (n 1) + O (n) = T (n) = O (n
{|}z
=
)T (n
more abuse
)T (n 1) + O (n
{|}z
=
)T (n
)) O (n 1) + O (n) = O (n ( ) f O (n
) g O (n 1 C1 , C2 > 0 N N n > N:
(f + g) (n) C1 n + C2 (n 1) = (C1 + C2 ) n C2 (C1 + C2 ) n
) O (n ) O (n 1 ).O (n
) ,T O (n . T (n 1) + O (n) = O (n 1) +
) ,O (n "
.
1.19 O
. . ) T O (n
C > 0 n .T (n) Cn
: .T (1) C C
: ).T (n 1) C (n 1
: C" :n
T (n) 2Cn
) T (n) Cn ( . .
.
1.20
BubbleSort
,T n .
14
1.4 :
1 :
.T (1) C 12 C 12
2
) T (n 1) C (n 1 :
2
2
T (n) T (n 1) + C n C (n 1) + C n C (n 1) + Cn = C n2 1n + 1 Cn2
C" T (n) Cn2
D > 0 n N ).Dn2 T (n
) T (1) (1 D .T (1) D
) T (n) = T (n 1) + (n D .T (n) T (n 1) + D n
o
n
.D = 21 min D , D T (n) n2:
.T (1) D 12 D 12
2
) T (n 1) D (n 1 :
0
|}
{
2
T (n) T (n 1) + D n D (n 1) + D n = Dn2 + D 2D n + D Dn2
T O n2 T n2 .T n2
1.21 :
+ n2
2n
3
+T
n
3
T (n) = T
T (n) T
3
3
3 3
3 3
3
!
2
1 2n
5n2
2 2n
2n
4n
+ T
+T
+C
+ Cn2 4 T
+ C n2 +
3 3
3 3
3
9
9
!
!
k
k i
X
5
2
n + C n2 +
n2
... 2k T
3
9
i=1
15
1.4 :
k log 32 n < 3
5
= Cn 1 +
= C n2
4
2
1 :
n = 1
2k
n
3k
i
X
5
2 k
3
2
1+
i=1
.T :
Cn
k i
X
5
n +
i=1
,T O n2 D > 0 n:
n 2
n
2n
1 n
2 n
2
+T
+ Dn T
+T
+D
T (n) T
3
3
3 3
3 3
3
!
2
1 2n
n2
2 2n
2n
n
+ T
+T
+D
+ Dn2 T
+ Dn2 +
3 3
3 3
3
9
9
n
n2
n
... T
+ Dn2 + D
+ ... + D k
k
3
9
9
k
k log 13 n 3nk < 3 T 32 n = 1 k":
n2
n
+ ... + D k Dn2
9
9
T (n) 1 + Dn2 + D
T n2 " .T n2
" :
2
T (n) = T n3 + T 2n C1 , C2 > 0 n N:
3 + n
n
n
2n
2n
2
T
+T
+ C2 n T (n) T
+T
+ C1 n2
3
3
3
3
IH
2
z}|{ n 2
2n
c1
6
+ C1 n c1
+ c1
+ n2 = c1 n2 < cn2
3
3
9
9
2
c1 9C1
5
+ 1 c2 n 2 > c2 n 2
9
c1
9
= + c2 n 2
2n
3
+T
n
3
T (n) T
.C1 :
2
2n
3
+ c2
n 2
3
+ C2 n2 c2
2n
3
+T
n
3
T (n) T
c2 n2 T (n) c1 n2 T n2 .
16
1 :
1.5
" " :
1.22 MergeSort A :n
MergeSort(A):
if n > 1 do:
) Mergesort(A 1, ..., n2
) Mergesort(A n2 + 1, ..., n
Merge :
In
rement Cp
In
rement Bp
In rement Cp
In
rement Ap
]Return C [1, ..., k + m
:
.1 .
.2 log2 n
1 . Merge
.
Merge :Merge k, m .k + m
k + m C ). (k + m
.k + m
:MergeSort n Merge ) (n
. Mergesort ) T (n :
n
)+ (n
T (n) = 2T
2
17
1 :
) .T (1) = (1
. C1 , C2 > 0 n:
n
n
+ C1 n T (n) 2T
+ C2 n
2T
2
2
1, ..., n2 , n2 + 1, ..., n :
h
n i h n
n i
n
3n + 2
3n + 2
1, ... , + 1, ...., , + 1, ...,
,
+ 1, n
4
4
2
2
4
4
nk
k ) (merge
C1 , C2 0 k .C1 nk T nk C2 nk
k k :
n
n
n
kC2 = C2 n
C1 n = kC1 kT
k
k
k
1 ) log2 (n :
)T (n
C2 log2 (n) n
{
n
k
|}
kT
)log2 (n
k=1
C1 log2 (n) n
).T (n log n
: " "n a
. nb . nk
:
n
+ nk
T (n) = a T
b
1.23 )(:
+ nk
. q = bqk:
.1 q = 1 .T nk log n
.2 q < 1 .T nk
.3 q > 1 .T nlogb a
n
b
: T (n) = at nb + nk C, C 0 :
n
n
+ Cnk T (n) a T
+ C nk
aT
b
b
m
k
bnm am
bnm
m:
a m
n k
n
k
m
n
a
C k
nk = am C m
am T m am C
=C
nk
b
b
b
bm
bk
18
: 1
: " "
1.5
: 1 logb (n)
T (n)
}|
{
z
logb (n)
logb (n)
logX
b (n)
X
X
m
m
a
n
a
m
k
a
t
C
n
nk
C
bk
bm
bk
m=1
m=1
m=1
logb (n)
m=1
: T nk log (n)
a m
=
bk
log b (n)
m=1
a
bk
= 1 .1
1 = logb (n)
T nk logb (n)
: logb (n)nk nk log n
1
log (n) nk = logb (n)nk O nk log n
log (b)
: T nk 0 < bak < 1 .2
(
)
logb (n)
1
a
X
X
m
m
a
a
k
k
k= C
n
=
C
n
C
nk T (n)
Cn
bk
bk
bk
m=1
m=1
!
)
(
b (n)
logX
m
X
a
a m
C
k
k
k
nk = Cn
C
n =
n C
a
k
k
b
b
1
bk
m=1
m=1
C > 0
.C,
: T nlogb a bak > 1 .3
C
b (n)
logX
m
a
nk = C
T (n) C
bk
m=1
a log b (n)+1
bk
a
1
bk
nk =
}|
!{
a logb (n)+1
C
1 nk
a
bk
1
bk
a logb (n)+1
alogb (n)+1
alogb (n)+1
alogb (n) a
C k
nk = C klog (n)+1 nk C k log (n)+1 nk = C k log (n) nk
b
b
b
b
b
b
b
b
log (a)
log (n)
b
n
C
a
C
a
C a a b
logb (a)
nlogb (a) = Cn
nk =
nk =
=
b
b
nk
b
blogb (nk )
19
).Insert(k
).Delete(k
.
2.1
2.1 :
m 1 .m e G )} G = (V, E\ {e
m 1 n m + 1 , G
:
e G G n m + 1 .
e G G n m .
n m ,G.
.2 G n m 1 .m n 1
.3 m = n
. .n m = n = 3 ""
. n 1 n n
. :
G :1
G n 1 3 n 1 G
.G
2 v V
. 2
. v .
.4 , 2 .m n 1 n = 1, 2
0, 1 . n 3
3 ) m < n ( . n 1 m < n ,m = n 1
.
21
2.1 :
2.16
) G = (V, E " .|E| = |V | 1
= : |E| = |V | 1 .
= |E| = |V | 1 . "
. G G
|V | 2 | |V | |V
|V | 1.
2.17 )Tree
:(Rooted ) G = (V, E
.
2.18 .
.
.
2.19 :
) G = (V, E )( .
: v0 .v0 6= V v0
. } m = {v0 , v1 , ..., vr ,
} .m = {v0 , u1 , ..., us , w m m ,
w = v0 w .
i, j ,w = vi = uj :
w = uj 7 uj+1 7 ... 7 7 vr1 7 ... 7 vi+1 7 vi = w
G .
2.20
.
2.21 : ) G = (V, E ,:
.1 : .
.2 : ) .(1
.3 : v V w V .
.4 : .
.5 : ) .(0
22
2.1 :
2.22 : ) G = (V, E:
.1 : .
.2 : )
(.
.3 :
.
.4 : 2 0.
2.23:
.1 .
.2 .
2.24 ) h(:
h 2h.
: :h
0
: h = 0 .2 = 1
: h 1 .h
: h
.h 1 .2h1
,2h1 + 2h1 = 2h.
2.25 ) (:
T ,h:
.1 k 2k 2h.
.2 .2h 1
.3 .2h+1 1
.4 2h .h
:
.1 :k
0
: k = 0 .2 = 1
: k 1 .k
: k 1 2k1 . k
k 1 k 1 2 . k
,2 2k1 = 2k.
23
2.1 :
.2 :h
0
: n = 0 , .2 1 = 0
: n < h .n + 1
: n + 1 n
.n n .2n 1
n 2n
. .2n 1 + 2n = 2 2n 1 = 2n+1 1
.3 .2h + 2h 1 = 2h+1 1
.4 1 d 2d
) .2height(T 2h ,h.
2.26 )(:
h " .2h
: ) l (T .T
h
= h .2
= T h 2h , h .
: T h = 0 .
: h 1 .h
: T h .l (T ) = 2h :
.v1" T .h 1
T T l T = 2h h 1 .l T 2h1
vl , vr Tl , Tr
.h 1 ) 2h = l (T ) = l (Tr ) + l (Tl .l (Tl ) , L (Tr ) 2h1
,L (Tr ) < 2h1 :
l (Tl ) = 2h L (Tr ) > 2h 2h1 = 2h1 (2 1) = 2h1
l (Tl ) 2h1 ,l (Tr ) = 2h1 .l (Tl ) = 2h1
Tl , Tr 2h1 . ) h 1
Tl ) 2h1 2depth(Tl .(depth (Tl ) h 1 Tl , Tr
h 1 2h1 T.
2.27 : d
d.
2.28 .2
24
2.1
2.29 )(:
.1 d h dh.
.2 d n .logd n
:
.1 :h
0
: h = 0 .d = 1
: d .h 1
: d h d
.h 1
.dh1 ,d dh1 = dh.
.2 .
k dk )
( . ) (h dh , n dh
) ,h logd (n.
2.30 : ) T = (V, E .
2.31 :6
) D (T ,T :
.1 | D (T ) = | .
.2 .
:
.1 , :
)(1
)(2
)(6
)(4
)(3
)(8
)(9
)(5
)(10
9 6 4 3 5 8 10 .
.2 ) ( :
25
2.1 :
Diam(x):
if x=null:
)return (1, 1
)(diam_r,height_l) Diam (x.left
}b = max {diam_l,diam_r,height_l+height_r + 2
)return (a, b
:
2.32
T ,x:
.1 .h (T ) = max {h (T (x.left)) , h (T (x.right))} + 1
.2 }.D (T ) = max {D (T (x.left)) , D (T (x.right)) , h (T (x.left)) + h (T (x.right)) + 2
: .1
.1 : n = 1 0 :
h (T ) = max {1, 1} + 1 = 0
: k < n .n T n .x
. "
.
h (T ) = h (T (x.right)) + 1
.
.2 : n = 1 0 :
D (T ) = max {1, 1, (1) + (1) + 2} = 0
: k < n .n T n ,x
:
"
" .
) D (T ) = D (T.right .
,x.right ) ,(x, x.right ) (x, x.left
.x.left )) H (T (x.right
)) H (T (x.left :
D (T ) = h (T (x.left)) + h (T (x.right)) + 2
26
2.1
n :
: n = 0 ) (1, 1 .
k < n .n
:
. .
1
. ,
.
: ) (1
)) (n n (
2.1.1
) (n ,
). (n log n
2.33 : A X )"
( ]is X [i] < X [j
i, j . :
yes
) (Xj < Xk
..
.
) (Xi < Xj
no
)(....
..
.
" .X
X ) (
.
2.34
.
2.35
)). (n log (n
:
.1
. h ).h (n log n
.2
n ! n .
n !.n
27
2.1 :
: L , ! L n
.L 2h ,n! 2h .log2 (n!) h :
n
n
z}|{ X
)log2 (i
log2
2
n
i= 2
n
X
> )log2 (i
i= n
2
n
X
i=1
n
))= (log2 (n) 1) (n log (n
2
= )!h log2 (n
n
n
= log2
2
2
n i n2 )log2 (i
.log2 n2 ) h n2 (log2 (n) 1 n N .
2.36 ) ,log (n!) (n log n , :
)log (n) = n log (n
n
X
< )log (i
i=1
n
X
= )!log (n
i=1
.
2.37
). (log n
2.38 """ , " " ".
:
.
x) x : y ( :
x < y
.x < y
x > y
.x > y
x = y
.x = y
. n K n
K n . ) h (n ,n"
" .
2h ) .3h(n ) n 3h(n )h (n) log3 (n
n N )) .h (log3 (n ) log3 (n) (log n )) ,h (log (n.
28
2.2 ):(BST
2.39
) log (n
:
n ) h (n ."
)
( .
n , ) 2h(n , ) n 2h(n
) h (n) log2 (n .n N ) log2 (n) (log n )) ,h (log (n.
2.40 " ). (n
2.2
)BST
(:
:
.1 y V x V ).key (y) key (x
)(350
)(12
)(12
)(22
29
)(1
2.2 ):(BST
12 .17 :
)(17
)(300
)(350
)(20
)(12
)(1
)(22
2.2.1 :BST
k :x
TreeSear
h(x,k):
"if x = null return "not found
else if key (x) = k return x
else
)if k < key (x
)return TreeSear
h(x.left,k
else
)return TreeSear
h(x.right,k
: Worst Case ) (h
h
. , ): (h
)IterativeTreeSear
h(x,k
while x 6= null and key (x) 6= k
)if k < key(x
x x.left
else
xx.right
return x.
2.2.2
:BST
x :
TreeMin(x):
while x.left 6= null
xx.left
return x
30
2.2 ):(BST
TreeMax(x):
while x.right 6= null
xx.right
return x
: ) (h
x\ " .
2.2.3
:BST
:
2.46 :
x ) s (x ) ( .
x .1 .
.2 x ) s (x .x
.3 ) s (x )( x x .x
y V 2.47 x V y x.
: ) :(2 ) T (x .x ) T (x x
) x ( , )).w = min (T (x.right
) w = s (x )/ T (x
z ).key (x) < key (z) < key (w
2.48 :
BST
min (T
" ).z T (x
2.2 ):(BST
))min (T (x)) key (x) < key (z) < key (w) max (T (x
) z T (x ) key (x) < key (z ) z T (x.right < )key (z
) key (w )) ,w = min (T (x.right z".
) :(3 ,w x w
. x w
w ) ) (key (x) < key (w ) ( x
x . w w
x x, w ) (w "
.
Su
(x):
if x.right 6= null
)return TreeMin(x.right
else
parent=x.parent
)while (parent 6= null and parent.right = x
x parent
parent x.parent
return parent
:
.
). (2h) = (h
2.2.4
:BST
Pred(x):
if x.left 6= null
)return TreeMax(x.left
else
parent=x.parent
)while (parent 6= null and parent.left = x
xparent
32
2.2 ):(BST
parentx.parent
return parent
":
2.49 ::
BST T x T z T )) min (T (x)) key (z) max (T (x" ).z T (x
2.50 :
x ) p (x ) ( .
x .1 .
.2 x ) p (x .x
p (x) .3 ) ( x x .x
: ) :(2 ) T (x .x ) T (x
x ,x ) .w = max (x.left ) w = p (x
z ) key (w) < key (z) < key (x "
)/ T (x
z ) key (w) < key (z) < key (x ) w T (x :
))min (T (x)) key (w) < key (z) < key (x) max (T (x
) z T (x ) key (z) < key (x ) z T (x.left )key (w) < key (z
)) ,w = max (left (x z".
) :(3 ,w x w
. x w
w ) ) (key (w) < key (x ) ( x
x . w w
x x, w ) (w
" .
:
.
). (2h) = (h
2.2.5 :BST
) delete(T,x x ,T :
.1 x .
.2 x x .x.parent BST
x x
" .BST
.3 x .
33
2.2 ):(BST
2.51
T x T x ) s (x .
: x ) s (x ).T (x.right
) ( .
2.52 :
2.53
T x T x ) p (x .
: x ) p (x
) .T (x.left ) ( .
x :
) s(x ) 2 (.
x .
" BST
) :s(x ) s (x .
:x x
x ) .s (x ) s (x
x x ).s (x
: x )s (x
) , (h .
2.2.6
:BST
T k :
TreeInsert(T,k):
if T.root=Null:
T.root.key=k
else :
x = T.root
if k < x.key:
if x.left=Null:
x.left.key=k
else:
)TreeInsert (x.left, k
else:
34
2.2 ):(BST
if x.right=Null:
x.right.key=k
else:
)TreeInsert (x.right, k
k x :
.1 k < x.key x.left.
.2 k > x.key x.right.
BST k k .x
: .h Worst Case
k . InsertTree
Insert 3 )
( . Worst Case ). (h
2.54 : BST , :
)(2
)(4
)(1
)(3
2 1 :
)(3
)(4
)(3
= )(4
)(2
)(4) = (1
)(1
)(3
1 2 :
)(2
)(4
)(3
= )(4
)(2
= )(4
)(3
)(1
)(3
:
.
x y z x y ) x
x y ( z .y
35
2.2 ):(BST
: " x y
. BST ) y (
.BST BST z < x < y :
for i = 2, ..., n :
)]TreeInsert(T,A [i
.TreeInsert A
] A [i ] A [i + 1 TreeInsert
i ) (i C > 0 :
O n2
n
n2
+
2
2
)n (n + 1
=C
2
Ci = C
n
X
= )T (n
i=1
T O n2 T n2 " T n2 .
2.55
BST
n ). (n log n
: A BST .n B ,n
A BST )( InOrder
. )( InOrder B
, B . ) (n log n
36
2.3
Traversal
:BST
" B A B " .
TA A TB B ) . (n log n
)( InOrder ) (n :
)TB (n) = (n) + TA (n
)TB (n) = (n log n
TA n0 N
C > 0 TB (n) Cn log n . n )/ (n log n
,TA (n0 ) > Cn0 log n0 n0 TB (n0 ) > TA (n) = Cn0 log n0
) TB (n log n C .
2.3
Traversal BST
Traversal BST ,
:Traversal
InOrderTraversal. .1 .
PreOrderTraversal. .2 ,
.
PostOrderTraversal. .3 ,
.
2.3.1 :InOrderTraversal
: InOrderTraversal
InOrder(x):
if x.left6=Null
)InOrder(x.left
print x.key
if right(x) 6=null
)InOrder(x.right
: . n = 0 .
k < n n . n
x n " .
x x n
" . x
x " .
: ) n) (n (
) ( ) (1 .
:InOrderTraversal
InOrder(x):
37
2.3
Traversal
:BST
)x TreeMin (x
while x 6= null
)print(x.key
)x Su
(x
: .
x x
.
) O (h
: n
n ) O (n O n2 )
( . n ). (n
2.56
" ). (n
: ) (n ) .O (n
, ) O (1
. ) (u, v ) u (v :
.1 v :(v.key < u.key) u u
) (v ) (u, v .
u u .
u u ).(u, v
PreOrderTraversal
:BST
:PretOrderTraversal
PreOrder(x):
print x.key
if x.left6=Null
)InOrder(x.left
38
2.4 :AVL
if right(x) 6=null
)InOrder(x.right
: InOrder ,x
) (
) ( .
: InOrder ). (n
2.3.3
PostOrderTraversal
:BST
:PostOrderTraversal
PostOrder(x):
if x.left6=Null
)InOrder(x.left
if right(x) 6=null
)InOrder(x.right
print x.key
: InOrder
, x
.
: InOrder ). (n
2.4
AVL
)(14
)(10
)(8
)(4
)(6
39
)(2
2.4 :AVL
2.61 x x.h .
AVL
: nk AVL .k ) k O (log nk
AVL n n nk ) k O (log n log nk log n.
2.63
:nk
nk1 >nk2
k
{|}z
>
nk = 1 + nk1 + nk2
k2 :
(
0 k is even
k
= k 2
2
1 k is odd
:
(
2 2
k is even
k is even
=
k
+1
k is odd
2 2
k is odd
k
2 2 n0
k
2 2 n1
k
log2 (nk ) > log2 2 2 +1 = k2 + 1
= nk2 k
2
k
2
k
k
) + 1 < log2 (nk ) = k < 2 log2 (nk ) = k O (log nk
2
2
40
2.4 :AVL
2.64
T
AVL
n k ).k O (log n
= Fn
1+ 5
2
= ) (
1 5
2
= .
: , x2 = x + 1 xn = xn1 + xn2:
x2 x 1 = 0 = xn2 x2 x 1 = 0 = xn = xn1 + xn2
, ':
n = n1 + n2
n = n1 + n2
a, b :
Un = an + b n
:
Un = an1 + b n1 + an2 + b n2 = Un1 + Un2
a, b :
a+b=0
a + b = 1
Un = Fn " :
U0 = a0 + b 0 = 0
U1 = a1 + b 1 = 1
:
1
1
= = b =
5
5
1 5
2
1+ 5
2
1
=
= a + (a) = 1 = a
a, b Fn:
1 n
n n
1
Fn = +
= n
5
5
5
41
2.4 :AVL
' .AVL nk
AVL k nk = nk1 + nk2 + 1 n0 = 0 .n1 = 1
mk = nk + 1 :
mk = nk + 1 = nk1 + nk2 + 1 + 1 = nk1 + 1 + nk2 + 1 = mk1 + mk2
m0 = 1 = F3 ,m1 = 2 = F4 mk = Fk+3 k:
k+3 k+3
= nk = Fk+3 1
nk :
k+3
k+3
k+3 k+3
= (k + 3) log
>
= log nk > log
= nk
5
5
5
5
log nk
+ C 1.44 log nk + C
= k < log nk + log
= 5 3 = k < log nk + C
log
{z
}
|
=C
) ,k O (log nk .
2.4.1 :AVL
T .
2.4.2
:AVL
: AVL BST .
AVL "
. "" .
: BST
.
.AVL
2.68 :
T x :
x.right .1 x.left x.
.2 ) T (x .x
xR .3 xL x.
42
2.4 :AVL
\ /bR
)(a
)a(L
)(a
\ /bL
)(b
\ /bR
\ /aL
\ /bL
\ /aL
a ) a (R :
)(b
)(a
\ /aR
\ /bR
)(a
)a(R
\ /aR \ = /bL
)(b
\ /bR
\ /bL
2.70" ). (1
2.71 .
2.4.3
AVL
2.72 LL :AVL LL a T
a a (a.left)L
) ,(b = a.left " :
)(a
) (aR
(bR )h1
)(b
(bL )h
h BL :
.1 a ) T (b AVL.
.2 ) T (b AVL bL h bR
.h, h 1, h + 1 a bL
bR h + 1 ) h .(bR bR
h 1 ) T (b .h + 1
.3 ) aL = T (b h + 1 aR h, h 1, h + 1
) T (a AVL
.1 aR h + 1 " h
aR .h 1
43
2.4 :AVL
" LL :
/aR \h h1
(a)h+2
(b)h+1
/bR \h1
/bL \h
2.73 LL
LL
a ) a (R .
: :a
/aR \h1
(a)h
(b)h+1
/bR \h1
)a(R
(a)h+2
/bR \h1
(b)h+1
/bL \h
, BST " :
b .1 a b a a b .
bL .2 b .
bR .3 b a .
aR .4 a .
aR .5 a b .b
.LL
2.74 RR : AVL RR a
a a ) (a.right)R
,(b = a.right " :
)(b
/bR \h
)(a
/bL \h1
\ /aL
h bR bL aL h 1.
2.75 RR
RR
a ) a (L .
44
2.4 :AVL
: :a
/bR \h
(b)h+1
/bL \h1
)a(L
(a)h
/aL \h1
/bR \h
(B)h+1
(a)h+2
/bL \h1
/aL \h1
AVL BST :
b .1 a b a a b .
bR .2 b .
bL .3 b a .
aL .4 a .
aL .5 a b .b
2.76 LR :AVL
LR a a a
) (a.left)R ,(b = a.left " :
)(a
/aR \h
/bR \h+1
(b)h+2
/bL \h
a .bR
2.77 LR
.
LR
A ) B (L ) A (R
: bR
" . "
.bR ):b (L
/aR \h
(A)h+3
/cR \h
(c)h+2
/cL \h1
(b)h+1
)b(L
/bL \h
45
/aR \h
(a)h+3
/cR \h
(c)h+1
(b)h+2
/cL \h1
/bL \h
2.4 :AVL
) a (R:
/aR \h
(a)h+1
(c)h+2
/cR \h
(b)h+1
/cL \h1
)a(R
/aR \h
/bL \h
(A)h+3
/cR \h
(c)h+2
/cL \h1
(b)h+1
/bL \h
, BST " :
.1 c a b b < c < a a c b c.
aR .2 a c c < a < everything in aR
cR .3 c a .
cL .4 c b .
bL .5 c b .everything in bL < b < c
2.78 RL :AVL
RL a a a
) (a.right)L ,(b = a.right " :
/bR \h
(b)h+2
/bL \h+1
(a)h
/aL \h
A .bL
2.79 bL
bL" .
2.80 RL
.
RL
A ) b (R ) a (L
: .
2.4.4 :AVL
2.81 RR
RR
a ) a (L .
46
2.4 :AVL
: ) aL (a h + 1 ,
" aL h .
AVL aR h + 1 h + 2 .h
h + 1 h aR .h + 2
RR b = a.right bR h + 1 AVL
bL h h + 2) h + 1 (aR
) a (L :
/bR \h+1
(b)h+2
)a(L
(a)h+1/h+2
/bL \h/h+1
/aL \h
/bR \h+1
(b)h+2
(a)h+3
/bL \h/h+1
/aL \h
bR ,h + 1 bL h h + 1 aL h
A h + 1 h + 2 " .
2.82 RR
2.83 LL,LR,RL
.
2.4.5 AVL :
n .AVL
AVL .
) (n log n :
2.84
n
AVL
). (n log n
: n2 AVL
n2 .n .
. :
: n = 0 n = 1 .
: n n + 1 . n
. n + 1
,
:
.1 AVL
.
.2 AVL RR
." ) (
.
) (log n
n2 " ) . (n log n
" ). (n log n
47
2.4 :AVL
.
. :
)]tree newNode (A [r
if N > 1:
return tree
:
.1 NIL
.2 r .
.3 ".
.4 , .
.5
.
: BST
. ,AVL
.n
: n = 1 AVL .
: k < n .n
n
n1 AVL
.AVL n 2
. n
n2 1 . n2 H Hl , Hr
. Hl Hr .H = Hr + 1
Hr Hl + 1 .AVL
2.85 7 . .
: ) ,N
,r Node ( " ) (n n .
48
2.4 :AVL
2.4.6
:AVL
AVL T1 , T2 .
AVL T .
.
n " ) (n log n log n
AVL n ). (n log n
: |Ti | = ni } .m = max {ni
.1 InOrderTraversal
A1 , A2 "
). (m
.2 ) (m
.
.3 AVL 2m " ) (m
.
" ) (m " .
2.4.7
Cut
:AVL
Cut AVL
.AVL n , :
k , AVL n "
) . (log n .
A ,InOrderTraversal"
). (n
k ) (log n .i
BuildAVL ] A [1, ..., i 1 T1 ). (n
BuildAVL ] A [i + 1, ..., n T2 ). (n
T1 , T2 , k .
" .
Cut BST : ,AVL
Cut .AVL n ,
:
49
2.4 :AVL
k ) , (log n .
k ,
n ) (log n ) (1
). (log n
BST k ) (x
.
) T (x.right) ,T (x.left .x
" ). (log n
2.4.8
:AVL
k :
AVL n , k .
:1 )) O (log n ( k 1
. k k 1
. ) O (n
n ).O (n
:2 InOrderTraversal k .
InOrder .
:3 ) O (log n :
" . AVL
x x.num x ) .(x
x.num = x.left.num + x.right.num + 1 " l
l.left.num = l.right.num = 0 .l.num = 1
. num
\ . n
).O (log n
k :
FindKSmallest(x,k):
if x.num-x.right.num == k :
return x
if x.left.num k :
)return FindKSmallest(x.left, k
else:
)return FindKSmallest(x.right, k x.left.num 1
k " .
: ) O (log n
.AVL
: .
: n = 1 1 k n = 1 k = 1 r
r.num r.right.num = 1 0 = 1 = k .
: n n:
50
2.4 :AVL
2.4.9
t-AVL
k n ,:
.1 nt,k
t-AVL
k nt,k .k
.2 t )) k O (log (nt,k
.3 t ).k O (log n
:
.1 x T t-AVL k nt,k ) k = 0
nt,0 = 1 k = 1 .(nt,1 = 2 T k
k 1 T
" .nt,k1 T t-AVL
)) k (t + 1 )) h (T (x.left)) h (T (x.right t"
k 1 ) .(k (t + 1
T ) k (t + 1 "
) .nt,k(t+1 :
nt,k = nt,k1 + nt,k(t+1) + 1 > nt,k1
1 .
.2 t, k :
)> 2nt,k(t+1) > 2 nt,k(t+1)1 + nt,k2(t+1
k
)t+1 (t+1
k is even
k is odd
0
1
k
= ) (t + 1
t+1
51
2.4 :AVL
nt,0 = 1 nt,1 = 2 :
( k
k is even
k is even
2 t+1
=
k
t+1
+1
k is odd
2
k is odd
2 t+1 nt,0
k
2 t+1 nt,1
k
)t+1 (t+1
nt,k
t+1
52
3.1 : X X ) P (X 2X
:
}P (X) = {A | A X
) P (X .X
3.2 :
X |.|P (X)| = 2|X
3.3 X , X
"
.
: :
3.4
X :
} ,P (X) {0, 1
: } ,f {0, 1 X0 X a X0 ,f (a) = 1
f = XX0 , (X0 ) = f .
:
||P (X)| = {0, 1}X = |{0, 1}||X| = 2|X
: :
: X X .P (X) = 21
: X n 1 X n . :
C
z
|}
{
}} P ({x1 , ..., xn }) = P ({x1 , ..., xn1 }) {A {xn } | A P {x1 , ..., xn1
, )} B P ({x1 , ..., xn :
xn )} .B P ({x1 , ..., xn1
.1 / B
53
3.5 : ) (, F , P:
.1 .
F .2 F ).P (
P .3 P : F R :
X
= ).P (
P () = 1
A, B F = A B ).P (A B) = P (A) + P (B
3.6 , ) (, P
X
.
= ) P (A .
F = 2 A )P (
A
3.7 : A F )P (
= ).P (A
3.8 F .
3.9 : A, B F = ,A B
.P (A B) = 0
3.10 A, B ).P (A B) = P (A) + P (B
3.11 : ) (, F , P A F ,
A ) Ac = \A (.
3.12 : ) (, F , P A, B F ,P (B) 6= 0
).P (A|B) = P P(AB
A B )(B
3.13 ) (:
) (, F , P A, B F ,:
.1 .P (Ac ) = 1 P (A) :
.2 .P (A B) = P (A) + P (B) P (A B) :
54
3.1
n
X
i=1
= ) P (A Bi
n
X
= )P (A
i=1
3.15 : ) (, F , P
1
|.P () = |
3.1 :
3.16 : ) (, F , P .X : R
3.17 " ) R (
.
3.18 :: X ) (, F , P X
:
X
= ] = E [X
)X () P (
A
3.19 " :
X ) (, F , P:
]x P [X = x
= ]E [X
)xIm(X
.
: :
X
P ()
x
)X 1 (x
)xIm(X
2
= )}x P ({ | X () = x
z}|{ X
= )X () P (
)X () P ({}) = E (X
)1 (x
)xIm(X
xIm(X) X
:
.1" ) X 1 (x . X () = x
55
= ]x P [X = x
{|}z
= )x P (
)1 (x
)xIm(X
xIm(X) X
3.1
.2 {} =
)X 1 (x
)xIm(X
1000000
1005000
5000
number of households that earn 1000000
=
= )P (X = 1000000
||
1005000
=
||
= )P (X = 5000
:
5000
1000000
+ 1000000
10, 000
1005000
1005000
E [X] = 5000
3.21 ) (:
) (, F , P X, Y : R ,:
.1 a, b R ) E [aX + b] = aE [X] + b(.
.2 c R ) E [c] = c (.
.3 ] .E [X + Y ] = E [X] + E [Y
3.22 ) (:
X ) (, F , P } {B1 , B2 ..., Bn :
) E [X|Ai ] P (Ai
n
X
= ]E [X
i=1
] E [X|A X :A F
X
X
= ]E [X|A
= )X () P (
)xP (X = x
A
) xIm(X|A
3.23
.
3.24 :
X a > 0:
]E [X
=
a
a
)P (X a
56
3.1
> 1:
1
)P (X
: :
)x P (X = x
x s.t xa
)a P (X = x
x P (X = x) +
x s.t xa
)P (X = x
x s.t xa
= ] = E [X
x s.t x<a
x P (X = x) +
x P (X = x) + a
x s.t x<a
x s.t x<a
0
|}
{
)x P (X = x) +a P (X a) a P (X a
z X
x s.t x<a
) a P (X a) = P (X a
3.25 :: ) (, F , P A F , 1A
A :
(
A
1
= )1A (
otherwise 0
3.26 :
) (, F , P A F ].E [1A ] = P [A
: :
)1A () P (
1A () P () +
= )1A () P (
A
/
]1 P () = P [A
= )0 () P (
A
/
57
= ] E [1A
1 P () +
)Fun tions
:(Hash
)Fun tions
:(Hash
) (ADT .Insert,Delete,Sear
h
.
.
).O (1
4.1 N ) 8( .
) O (1 108 .
BST )) .O (log (N
) O (1 .
"" ) (
) O (1.
4.2 ) '( U " "
.
4.3 : h U
.
4.4" N U m
N . U
N .
N .
4.5 :
.1 : k h (k) = k mod m m .
.
.2 : k ) h (k) = m (Ak Ak A m
.
.
:
.1 h ) ).(O (1
.2 ) .m O (N
.3 .
4.6 ) O (1
U . "
.
4.7 : h x, y U ).h (x) = h (y
58
)Fun tions
:(Hash
4.8
U N m .|U| N m
} h : U {0, ..., m 1 U U N h U .
: h U" . Ui U
i {0, ..., m 1}) h (k) = i h( . i
|Ui | < N :
N =N m
m1
X
i=0
< | |Ui
m1
X
i=0
= ||U
U i .|Ui | N N Ui
h i .h
) (:
. U
} h1 , h2 : U {0, ..., m 1
.
U .
4.9
U N m .|U| N m
} h1 , h2 : U {0, ..., m 1 U U N h1 h2 U .
2
.|U| N m
: }.h1 , h2 : U {0, ..., m 1
=
N = N m N m
U U U = N = N m N h1
" .h2
.
U N m U N h2 .
U" h1 h2 " .
59
4.1 ) (:
)Fun tions
:(Hash
N
m
N
N
X
X
X
X
1
N
=
= )P (1i,j = 1
= ] E [1i,j
E [Wi ] = E
= 1i,j
m
m
j=1
j=1
j=1
j=1
4.15 h .
4.1 ) (:
4.1.1
:Chaining
} h : U {0, ..., m 1
, .
, .Chaining
) O (1
) O (1 .
4.16 N Chaining
N )) O (1 (h " ) .O (N
4.17 Chaining
h
Chaining ). (1 +
: k ) ,h (k
" ) .nh(k ) (1 :
.1 k:
N
N
E [Sear
h Time] = (1) + E nh(k) = (1) +
1+
m
m
E nh(k) = .
.2 ) nh(k
. k
:
)nh(k
)nh(k
X
X 1
nh(k) 1
1 nh(k) nh(k) 1
= P [k is in lo
ation i] i
= i
=
n
n
2
2
)h(k
)h(k
i=1
i=1
:
1
nh(k) 1
1
= (1) + E nh(k)
2
2
2
1
1
)= (1) + (1 +
2
2
60
4.1 ) (:
)Fun tions
:(Hash
4.18 h .
4.1.2
)Hashing
:(Open
. 1
.
m1
h } h : U {0, ..., m 1} {0, ..., m 1 ) h (k, i {h (k, i)}i=0
} {0, ..., m 1 .k
: k ) h (k, i .
: k ) h (k, 0 "
) h (k, 1 , .
4.19 :Linear Probing h" ,linear probing
h .h (k, 1) = h (k) + i mod m
) r+1 r + 1 h
r " m
"( . .
4.20 :Quadrati
Probing ,Quadrati
Probing
h h (k, i) = h (k) + c1 i + c2 i2 mod m
c1 , c2 , m .
lusters
h .
4.21
Hashing
:Double ,:
h (k, i) = h1 (k) + i h2 (k) mod m
h1 , h2 ) ( .
h2 ) h2 (k m ,k
m h2 h2 (k) < m k m 2 h2
h2 (k) 1 mod 2 .k
4.22 m m
m
} .{0, ..., m 1
.
4.23 :
k U } h1 , h2 : U {0, ..., m 1 . = d
mod m
))g d (m, h2 (k
)h (k, i) = h1 (k) + i h2 (k
m
d
).h1 (k
61
)Fun tions
:(Hash
4.2 :
mod m
m
{|}z
m
dl
= h1 (k) +
) h2 (k) = h1 (k) + m = h1 (k) + ml h1 (k
h k,
d
d
d
m k
d
,.
m
d
4.24 Chaining
N } {k1 , ..., kN ) .O (N ) h (k, i
i 2 i N i ki
:
)N (N + 1
1
N2 + N O N2
=
2
2
4.2
=i
N
X
i=1
.
.
4.25 : }} H := {h : U {0, ..., m 1
x 6= y U:
1
|})|{h H | h (x) = h (y
||H
m
= ])PhH [h (x) = h (y
h H .
4.26" x 6= y U
).h (y
||H
m
H = )h (x
4.27 :
H U .m U U
,|U | = N U x U H
1
N
| .( |H x U x
)
.1 + m
N
.m
4.28 U" i
X
: x, y U 1x,y ")) "h (x) = h (y h
= Wx
( . x U 1x,y
yU
62
4.2 :
)Fun tions
:(Hash
:
]P [1x,y = 1
= ] E [1x,y
= 1x,y
yU
yU
N 1
N
1
=1+
1+
m
m
m
E [Wx ] = E
yU
=1
|}
{
X
z}|{ z
P [1x,x = 1] +
x6=yU
4.29 m
H .U U H "
.
x 6= y:
1
m
4.30 :
H U .m U U
.H
,|U | = N U x U
N
k U
. 1 + m
4.31 .Chaining
: k h ),h (k
) h (k ) .nh(k
) (1 :
.1 k:
N
N
E [Sear
h Time] = (1) + E nh(k) = (1) +
1+
m
m
E nh(k) = .
.2 ) nh(k
. k
:
)nh(k
)nh(k
X 1
X
nh(k) 1
1 nh(k) nh(k) 1
= i
=
= P [k is in lo
ation i] i
)nh(k
)nh(k
2
2
i=1
i=1
:
1
nh(k) 1
1
= (1) + E nh(k)
2
2
2
1
1
)= (1) + (1 +
2
2
63
)Fun tions
:(Hash
4.2 :
4.32 k N N ). (1
4.33 :
r
" :
Mi
Mi = Mj +
j6=i | zi =1
= Mz
i | zi =1
]Mi = P [Mj =
|}
X
j6=i | zi =1
Mi = 0 = P Mj =
j6=i | zi =1
P [M z = 0] = P Mj +
r ) 21r " .(2r :
1
1
=
2r
m
4.35 :
U m p .|U| p a, b :
ha,b (k) = (ak + b mod p) mod m
:
H = ha,b | a Zp , b Zp
. k1 6= k2 U |U| p
.k1 , k2 Zp a Zp b Zp ) .ri = (ak + b k1 6= k2
r1 6= r2 Zp:
r1 r2 (ak1 + b) (ak2 + b) a (k1 k2 ) 6 0 mod p
64
)Fun tions
:(Hash
4.3 :
k1 6= k2 ha,b H
4.3
1
m
= ]P [r1 r2 mod m
""
) ( . "
)
(.
" " , .
"
.
4.3.1 :
,2N 2 m N 2 :
.1 h H ) " ).(O (1
.2 ) O (N m ) m O (N.
.3 .
4.36 m N 2 , 2N 2 m ) 2 "
(2 m
. 2
4.37 :
h H
).h (x) = h (y
1
2
<
]is bad
4.38
1
2
P [h h "" x 6= y
: N N2 . H
| |H h .
x, y m
| N2 |H H . :
m
||H
N
|N (N 1) |H
N2
1
=
<
||H| |H
2
m
2
m
2m
2
65
4.3 :
N2
m
)Fun tions
:(Hash
= .m N 2 :
1
||H
1
#bad fun
tions in H
< 2
=
||H
||H
2
= ]P [h is bad
4.39 )(:
) T (N ,N ) .E [T ] O (N
: h1 H )
) (O (1 h1 ) 12 h1
.( 21 :
12
|}
{
|}
{
z
z
]E [T (N )] = E [T (N ) | h1 is good] P [h1 is good] +E [T (N ) | h1 is bad] P [h1 is bad
1
] E [T (N ) | h1 is good] + E [T (N ) | h1 is bad
2
h1 ) O (N , C > 0
.E [T (N ) | h1 is good] < CN h1 ,
:
1
]E [T (N )] CN + E [T (N ) | h1 is bad
2
h1 h2 H , :
1
1
)]E [T (N ) | h1 is bad] = (E [T (N ) | h2 is good] P [h2 is good] + E [T (N ) | h2 is bad] P [h2 is bad
2
2
1
1
1
1
] E [T (N ) | h2 is good] + E [T (N ) | h2 is bad] CN + E [T (N ) | h2 is bad
2
4
2
4
" :
1
1
]E [T (N )] CN + CN + E [T (N ) | h2 is bad
2
4
M N :
1
1
]CN + M E [T (N ) | hm is bad
2k
2
M1
X
k=1
E [T (N )] CN +
M:
1
M
E [T (N ) | hm is bad] 0
2M
:
1
) + O (1) = CN + 2CN = 3C N O (N
2k
k=1
E [T (N )] CN + CN
4.40
.
66
)Fun tions
:(Hash
4.3 :
4.3.2 :
) m (N :
.1 h H H
) " ).(O (1
.2 0 j m 1 nj ) j .(h (k) = j
.3 0 j m 1 .2n2j mj n2j hj
".
.4 .
4.41:
.1
| N |H" .
"" ) m (N
2
h ) m (N N 2
) (
.
.2 m
nj ) mj n2j ( , .
.
4.42 :
.N
h
:
m1
m1
X
X
2
mj
,m + ) mj O (N
.E m + j 2nj mj
j=0
j=0
=m
m1
m1
m1
{ |} z
X
X
X
mj = E [m] +E
2n2j = m + 2E
mj m + E
n2j
j=0
j=0
) n2j O (N
j=0
m1
X
j=0
E m +
m1
X
j=0
E ) m O (N:
) n2j = O (N
m1
X
j=0
mj m + 2E
m1
X
j=0
E m +
1x,y ) ,h (x) = h (y :
#number of ordered pairs that
ollide in the j'th
ell
m1
X
j=0
n2j
n
X
XX
= )#number of pairs in the j'th ell (in luding pairs of the same key
j=1
m1
X
j=0
67
4.3 :
:
#
1x,y
XX
x x=y
"
1x,y + E
XX
x x6=y
1x,y = E
=1
XX
y
"
=E
X z }| { X X
= ] E [1x,x
P [1x,y = 1] + N
E [1x,y ] +
x x6=y
mN
n2j
)Fun tions
m1
X
j=0
XX
x x6=y
XX 1
{|}z
1 XX
{|}N (N 1) z
P [h (x) = h (y)] + N N +
2N
=N+
1=N+
m
m x
m
x
x6=y
x6=y
:(Hash
XX
x x6=y
h .
m1
X
E .
) n2j O (N
j=0
.1 h .2N > m N
m1
m1
X
X
n2j > 2E
.2 n2j
h , j
j=0
j=0
.mj n2j
.3 n2j
m1
X
j=0
E n2j > 4 N
m1
X
j=0
m1
X
n2j
E
m1
m1
X
X
j=0
1
=
n2j > 2E
n2j
P [h is bad] = P
2
m1
X
j=0
j=0
2E
n2j
j=0
" " :
m1
X
E
n2j
m1
X
z}|{ 2N
j=0
1
P [h is bad] = P
n2j > 4N
=
4N
4N
2
j=0
h
m1
X
n2j 2N
.E 21 h
j=0
m1
X
.E
n2j = 2N
j=0
68
4.3 :
)Fun tions
:(Hash
4.43
H .
) mj < m
( H .m
4.44 :
.N
: :
P
.1 h n2i 4N
m ni , h } i {0, ..., m 1 N
.
, :
0im1
h , h ) O (1
N ) .O (N
) (
haining ,hash ) O (1
) O (N".
, " N
) .O (N
) O (1 4N ) O (1 "
) .O (N
.2 ) t (n
) h( ) .T (n
" , :
# m1
"m1
X
X
]) E [t (ni
= ) t (ni
E [T (N )] = E
i=0
i=0
) O (n C > 0
0 i m 1 E [t (ni )] Cni :
# m1
"m1
m1
m1
X
X
X
X
ni = CN
Cni = C
]) E [t (ni
= ) t (ni
E [T (N )] = E
i=0
i=0
i=0
i=0
) E [T ] O (N .
.3 21 h .
X
" 12 < p 1 .E [X] = 1p < 11 = 2
2
).O (1
" ) O (N .
69
5 :
5
5.1
qui ksort
qui
ksort .n
. :
.1 pivot.
.2 pivot
pivot )" .(partition
.3 partition .
" :
)]Qui
ksort(A [m + 1, r
Left,Right :
for j = l, ..., r :
B [r] A [j] , r r 1
]B [l] A [pivot
A B
return l
:
.1 Partition ]) A [l, r (.
.2 Pivot " .
.3 B l r pivot
pivot .
Pivot .Pivot
.4 .Pivot
.5 Partition Pivot .
70
5.1
5 :
qui ksort
5.1 Pivot
. B p Pivot
.B [p] = pivot
: Partition ) Pivot (
.
)] Qui
ksort(A [l, m 1 )] Qui
ksort(A [m + 1, r Partition
.
: Partition ) (n ) (
) ( . m Pivot
) (m n qui
ksort :
)T (n) = (n) + T (m 1) + T (n m + 1
:
]| )E [T (n)] = E [ (n) + T (m 1) + T (n m + 1)] = E [ (n)] + E [T (m 1) + T (n m + 1
n
X
)](E [T (m 1) + T (n m + 1) | m = k] P [m = k
= (n) +
k=1
n
n
X
X
1
1
= (n) +
= ])E [T (k 1) + T (n k + 1
)])(E [T (k 1)] + E [T (n k + 1
n
n
k=1
k=1
} k {1, ..., n
:
1
n
= ] P [m = k .k
n
n
n
X
X
X
1
1
1
= )])(E [T (k 1)] + E [T (n k + 1
E [T (k 1)] +
])E [T (n k + 1
n
n
n
k=1
k=1
1
])E [T (k
n
n1
X
k=0
k=1
1
E [T (k)] = 2
n
n1
X
k=0
1
E [T (k)] +
n
n1
X
k=0
, :
1
)E [T (k)] + (n
n
n1
X
E [T (n)] = 2
k=0
C1 , C2 ) C1 n (n) C2 (n ,n N n N
:
n1
X 1
1
E [T (m)] + C1 n E [T (n)] 2
E [T (m)] + C2 n
n
n
m=0
m=0
n1
X
:
n1
X
1
(UC (m)) + Cn
n
m=0
UC (n) = 2
n N:
)UC2 (n) E [T (n)] UC1 (n
71
5.1
5 :
qui ksort
) UC (n , n:
UC (m) + Cn2
n1
X
nUC (n) = 2
m=0
) UC (n + 1 n + 1 :
2
)UC (m) + C (n + 1
n
X
(n + 1) UC (n + 1) = 2
m=0
:
(n + 1) UC (n + 1) nUC (n) = 2UC (n) + 2Cn + C
(n + 1) UC (n + 1) = (n + 2) UC (n) + 2Cn + C
2Cn + C
n+2
UC (n) +
= )UC (n + 1
n+1
n+1
)C (n + 1
Cn + C
2Cn + C
2Cn + 2C
)2C (n + 1
=
=
= 2C
n+1
n+1
n+1
n+1
n+1
=C
:
n+2
UC (n) + 2C
n+1
)UC (n + 1
" :
n+2 n+1
n+2
UC (n) + 2C
UC (n 1) + 2C + 2C
)UC (n + 1
n+1
n+1
n
n
+
1
n
n+2
UC (n 2) + 2C + 2C + 2C
n+1 n
n1
..
.
=0
n+2
X1
n+2
{ |} n + 2 z
n+2
2C +
2C + 2C = (n + 2) 2C
) ( ,
:
1
1 1 1 1 1 1
+ + + + + +...+
2
3
4
5
6
7
n
{z
}
| } | {z
S2
S1
}= |{z
1 +
S0
n
X
1
k , 21k
:
= )H (n
j=1
1
2k+1 1
2k , k
Sk has2k values
z
|}
{
1
1
1
1
1
1
k + k
+ ... + k+1
k + ... + k = 2k k = 1
2
2 +1
2
1
2
2
2
72
1
1
= 2k k+1
2
2
5.1
qui ksort
5 :
n = 2k 1 ) k = log2 (n + 1 :
)H(n
{ |} z
k
X
1
1
)Sk k = log2 (n + 1
log2 (n + 1) = k
2
2
i=1
:
)H (n) (log2 (n + 1)) = (log n
5.2 :
)log (n + 1
)log (2n
log 2 + log n
)log (n
)log (n
= )= log2 (n) log2 (n + 1
=
=1+
log 2
log 2
log 2
log 2
log 2
":
)log (n
1
log (n) log2 (n + 1) 1 +
log 2
log 2
" :
{|}z
1
))= (n + 2) 2C H (2 + n) ((n + 2) log (n + 2)) = (n log (n
j
n+2
X
j=1
UC (n + 1) (n + 2) 2C
n N:
))n log n (n + 2) log (n + 2) 2n log (2n) = 2n log 2 + log (n) = 2 log 2 (n log (n
) (n + 2) log (n + 2) (n log n ).UC (n + 1) (n log n
:
)UC2 (n) E [T (n)] UC1 (n
)) UC1 (n) , UC2 (n) (n log (n )).E [T ] (n log (n
73
5 :
5.4 ) Hn (log n
f (x) = x1 n N:
)H(n
1
)dx = 1 + log (n
x
n
1
f (1) +
{ |} z
n
X
1
j
j=1
1
dx
x
= )log (n
]ex
hange A [i + 1] A [r
return i + 1
) (n Qui
ksort . n2
5.2
Qui kSele t
A n 1 k n k
) k 1 ( . k = 1 k = n .
) ( k ,
" ) (n log n .Qui
ksort
:Qui
kSele
t
Partition RPartition , Qui
kSele
t
:
5 :
if r = k :
]return A [k
if k < r:
else:
n
2
#good pivots
pivot
) T (n .
21 pivot . 12
12 . 43 n pivot
.n ) t (n RPartition
) (n pivot " :
3
4n
])E [T (n)] = E [T (n) | good pivot] P [Good Pivot] + E [T (n) | bad pivot] P [bad Pivot] + E [t (n
1
1
3
1
1
)n + E [T (n)] + t (n
= E [T (n) | good pivot] + E [T (n) | bad pivot] + t (n) E T
2
2
2
4
2
1
1
3
E T
n + E [T (n)] + Cn
2
4
2
) t (n C".
75
5 :
:
1
1
1
3
3
1
n + E [T (n)] + Cn = E [T (n)] E T
n + Cn
E [T (n)] E T
2
4
2
2
2
4
!#
"
2
3
3
3
= E [T (n)] E T
n
+ 2C n + 2Cn
n + 2Cn E T
4
4
4
"
!#
"
k !#
k1
j
k
X 3 j
X
3
3
3
n
+ 2Cn
E T
n
+ 2Cn
... E T
4
4
4
4
j=0
j=0
"
"
k !#
k !#
3
3
1
=E T
=E T
n
+ 2C
n
+ 8Cn
3
4
4
1 4
n k n = 1
3 k
4
k" :
" .
5.2.1 :Qui
kSele
t
Qui
kSele
t
Partition . .
, ) (n log n
) log2 (n Pivot "
. Qui
kSele
t Partition ) (n
log2 n ) (n ). (n log n
5.6 A i A ) (
. ) ( .
.
Qui kSele t
.1 A n n5 5 n
5 .n mod 5
.2 InsertionSort n5
) ( ,
.m1 , ..., m n
5
.3 m1 , ..., m n .q
5
.4 Partition .q
.5 m ) ] .(A [1, ..., q k m
k ] A [1, ..., q k > m
) (k m ].A [q, ..., n
: .
: ). (n
76
5 :
5.7
. 3n
A q 10 6
: n 5 n5 5 A1 , ..., A n5
m1 , ..., m n5 . q ) m1 , ..., m n5
q ( . 12 n5 1
.q q
q " 3
3 21 n5 1 + 2 = 3n .q n 5
10 1
21 n5 2 5 ) q
n mod 5 (q 3 x "
:
l m
l
m
3 n
3n
3n
1 n
= 2
6
=6
6
3
2 5
2 5
25
10
.q "
1 3 x .
"" ""
3n q .
10 6
) T (n ,n :
n
5
) O (n .
5
)) O (1
( . ). n5 O (1) = O (n
n5 .T n5
modied-partition O n5 ).O (n
pivot k pivot
n k .
7n
n 3n
10 6 = 10 + 6
.T 7n
10 + 6
" n:
7n
)+ 6 + O (n
10
+T
l n m
5
T (n) T
):T O (n
: n = 1 .
: ,k < n .n
: C1 > 0 :
l n m
7n
+T
+ 6 + C1 n
T (n) T
5
10
77
5 :
7n n5 < n C > 0 :
10 + 6 < n
lnm
7n
7n
1.5n
+C
+C
+ 6 + C1 n C
+ 6 + C1 n
T (n) C
5
10
5
10
1.5n 7n
C
+ 6C + C1 n = Cn + C1 n + 6C = (C + C1 ) n + 6C
+
5
10
) (C + C1 ) n + 6C O (n .
5.2.2 :9
:5 n
n
2
n2
Sele
t .
) O (n ) O (n "
).O (n
n
2
) O (1 ," ).O (n
:6 A n ]) [0, 1 x A
] (a, b) [0, 1 .(P (x [a, b]) = b a "
" : } k {1, ..., n k "A
) O (n
).O ( n
: A :
m = n ) .h (x) = mx k
k
k1 .1 k m
m , m
k1 k
x m , m ) xm [k 1, k .(h (x) = xm = k
) (1 k m)
ount (k ".
78
5 :
n ).O (n
: A n 0 1 ].[0, 1
Xi
A A ) X1 (A) ..., Xm (A
i
,
A h ) k A
,( i1 1 k m
m m
:
Uniform Dist X
n
n
X
k1 k
k
k1
{|}z
)P A (i
= }]) I{[A(i)[ k1 , k
=
,
m
m
m m
m
m
i=1
i=1
i=1
n
k
k1
n
n
=n
=
= = n
m
m
m
n
n
) .O ( n
l A l ,
:
)
(
j1
j1
X
X
ount (i) l
ount (i) > l
| }j (l) = min j {1, ..., m
n
X
i=1
= ])E [Xk (A
i=1
l ) j (l .
sele
t ) . j (l l
!
j1
X
m = l ) .j (l sele
t
)
ount (i
i=1
) .O ( n
) O ( n ) j (l
) .m = n O ( n
) j (l
" ) ,O ( n.
79
6 ):(Max-Heap
):(Max-Heap
6
6.1
.1 T x T .T x
. x T
T T
T ) ( .
T T )
T( T .
80
6 ):(Max-Heap
6.1 :
.2 h 1 ) h 1
( h 1
,2h 1 h
h " 2h . , 2h
2h 1 + 2h = 2h+1 1.
.3 h:
2h n 2h+1 1 < 2h+1
h log2 n < h + 1 log2 n 1 < h log2 n h .h = log2 n
.4 x ,H H x
. 1
H . " H H
" .
.5 . h = 0 .
h .h + 1 h + 1 a
.
.h a
a
,.
6.1.1 :
. .
,
:
)A = val(1) val(2) val(3) val(4) val(5
) (:
)(1
)(3
)(7
)(6
)(5
)(2
i :
.1 i .i.left = 2i
.2 i .i.right = 2i + 1
.3 i .i.parent = 2i
.4 ).Heapsize (A
81
)(4
6 ):(Max-Heap
6.1 :
6.5 1 3 .i
"
.
. , A ] A) A [i (i
i .
6.6 , .
6.7 :
.
Max-Heapify Min-Heapify
.Max-Heapify
6.1.2
:Extra tMax
) Extra
tMax (A .
) Heapsize (A .
) ( . :Max-Heapify
MaxHeapify(A, i):
L i.left = 2i
R i.right = 2i + 1
Largest i
if Largest 6= i then:
Max_Heapify(A, Largest).
:
6.8 MaxHeapify
6 ):(Max-Heap
6.1 :
Extra tMax
Extra
tMax(A):
]m A [1
: A ) Extra
tMax(A
. .
MaxHeapify
6.8 MaxHeapify
: )) (log n ) (n =Heapsize(A Extra
tMax
MaxHeapify .
6.1.3 :In
rease_Key
:
In
reaseKey(A, i, key) :
"If key<A [i] return "error
else:
A [i] key
)i parent (i
83
6 ):(Max-Heap
6.1 :
,
.
:
.i "
.i A
. :
,
.
" . .
] A [i :
.1 ) i = 1 ( .
.2 ] ,A [i] A [i.parent
.
" .
6.9
In reaseKey
: } d {0, ..., h .
: d = 0
.
: d .d + 1
: ) In
reaseKey(A, i, key i ,d + 1 :
84
6 ):(Max-Heap
6.1 :
In reaseKey .
: ). (log n
6.10 De
reaseKey :
) (.
MaxHeapify .
MaxHeapify "
.
6.1.4 :Insert_Key
:
)InsertKey(A, key
)In
rement Heapsize(A
A [Heapsize (A)]
: )
( )
( ,
. In
reaseKey " .
In
reaseKey Insert
.In
reaseKey
: " In
reaseKey ) (log n
6.1.5
6.1.6
:n
.1 " )). (n log (n
.2 Insert .InsertKey
6.11
). (n log n
85
6 ):(Max-Heap
6.1 :
: InsertKey n
n ) O (log n
) .O (n log n ] .[1, ..., n
i ) .log2 (i 1
"
) (log i . n2 :
n
lnm
n
log
log = C
2
2
2
n
X
C log i > C
i= n
2
n
X
i= n
2
)T (n
n log n ). (n log n
:
BuildHeap n :
BuildHeap(A):
)n Length (A
for i = n downto 1:
)MaxHeapify(A, i
Return A.
: BuildHeap .
6.12 ) :(Loop Invariant
.
6.13 .
6.14 BuildHeap
1 i n i ] A [i] , A [i + 1] , ..., A [n
.
: n :1
: i = n ) MaxHeapify (A, n n
.
: i > 2 .i 1
: ) MaxHeapify(A, i 1 i 1
) 2 (i 1 2 (i 1) + 1 i 1 .
6.8 ) MaxHeapify(A, i 1 ,i 1.
: BuildHeap
)
(.
:
6.15 :
86
6 ):(Max-Heap
6.1 :
)BuildHeap(A
). (n
: ) T (n ,BuildHeap ) d (i ) i i
( D " )) .(D = log2 (n i
MaxHeapify:
)O (Height of Subtree rooted at i) = O (D d (i) + 1
6.16 d (T.root) = 0 ) ( D .D + 1
.1 )D + 1 O (D
1 .
C > 0 i ) C (D d (i) + 1:
)C (D d (i) + 1
n
X
i=1
)T (n
d ,2d
D
X
MaxHeapify :
2d
d=0
D+1
z}|{ X Dk+1
2d (D d (i) + 1) = C
2
k
k=1
k
2k
D+1
X
D
X
d=0
C (D d (i) + 1) C
2D+1 2k k = C2D+1
k=1
D+1
X
n
X
i=1
)T (n
=C
k=1
k = D d + 1 .d = D k + 1 ) D log2 (n
D+1
X k
C > 0 n N
) ,2D+1 O (n ) O (1
2k
k=1
k
C
k
2
6.17
D+1
X
k=1
k
) O (1
2k
D+1
X
k=1
: :
2
n
n
n
n
n
e 2 n2 1
e 2 n log e 2 e 2
e2
=
=
n
n2
n2
n
2
d e2
n
= sgn
1 = +n 2
= sgn
dn n
2
n
e2
n
d
dn
n 2 n = 2 . 2e > 1 n 2 e 2 > n:
k
n
n k
n
X
1 X e2
1 X
e
k
= Sn
+
= +
k
k
2
2
2
2
2
k=2
k=2
87
k=1
6 ):(Max-Heap
6.1 :
Sn :
k
1
e
e
e
= +
3.9
2
2 2 e
2
1 X
+
2
k=2
n
n
X
X
k
k
.
O
)(1
n N Sn 3.9
2k
2k
k=1
k=1
) .T (n) O (n ) T (n) (n n
) . (1 ) ,T (n) (n.
) :( 11
:A
.
BuildHeap2(A):
For i=1 to n=length(A):
if A [i] > A [i.parent] then j i.
j j.parent
Return A.
:
6.18
A A .
: , 1 i n
i ] A [1, ..., i 1 .
: i = 1 .
:i 1 A [1, ..., i 1] ,i 1 .
:i i A [i] < A [i.parent] = A 2i
i.parent
] A [1, ..., i ) i 2i, 2i + 1
] A [i (.
, " ] A [i )
( 2i , 4i , ... .
)] .InsertKey(A [1, ..., i 1] , A [i Insert
] A [1, ..., i .
: ] A [1, ..., n ,.
88
6 ):(Max-Heap
6.1 :
: While ,
) log2 n ( While
) .O (log n for n ) .O (n log n
] , A = [1, ..., n
.
n2 , ..., n
log2 n2
n
n
) . 2 log2 2 (n log n " ). (n log n
6.19 InsertKey
.
6.1.7
:HeapSort
. A
) (
. :
for i = n, ..., 1:
return A.
: Extra
tMax .
: n Extra
tMax ) (log n ). (n log n
6.20 12 "
In-Pla
e , .
Extra
tMax Extra
t
i A ] A [i + 1, ..., n
] A [1, ..., i . " .12
6.1.8 :11
3 :11
6.21
. k )) (k
) O (1 (
k " n .
) .O (n log k
k .
.1 .Newlist
.2 H k .
.3 n ) n ( :
89
6 ):(Max-Heap
6.1 :
x .NewList
.x.next
MinHeapify .
.4 .Newlist
: .
6.22
:
.1
NewList
.2
NewList
.3 .
: : NewList ) (1 ) (2 (3) . .
: . ) (2
NewList NewList ) (1.
) (2 .
x x 6= x .x x x x
x .x x x x
y ,x y x
x x y x x . ) (3 .MinHeapify
: ) (1 n Newlist n .
: ) .O (k MinHeapify
k ) ,O (log k n ) O (n log k .
4 :11
M :
) Build(A M n ).O (n
90
6 ):(Max-Heap
6.1 :
: n
log n2 ) Extra
t\( log n2 .Insert
) , (log n:
= log n
2n
2
n2
n
lnm
{|} z
n
log n log 2 = log log
log
+ 1 log
2
2
2
). (log n
) :Build(A A ) ( Sele
t
Partition " . , A
. .
n
n 2
n n2 . n2
: Partition ) O (n
) O (n " ).O (n
HeapDelete(A,i):
x A.root.key
)In
reaseKey(A, i, x + 1
)Extra
tMax(A
91
6 ):(Max-Heap
6.1 :
) ( ,
In
reaseKey" i Extra
tMax
. In
reaseKey Extra
tMax ) (log n
" ) . (log n :
HeapDelete(A,i):
x A.root.key
)De
reaseKey(A, i, x + 1
)Extra
tMin(A
92
7 :
7 :
7.1
7.1 ) G = (V, E V E
. " " ) (
" " ) (.
7.2:
.1 u, v )) (u, v
) ((v, u .
.2 G n n2
n2 n .
7.3 : ) G = (V, E ,u V v V u
.(u, v) E
7.4 )Tree
:(Dire ted
.
7.5 n n 1 ) (.
7.6 : ) G = (V, E n } {v1 , ..., vn
A n n Ai,j = 1 (vi , vj ) E Ai,j = 0.
7.7 ) O |V |2
(.
7.8 : ) G = (V, E n } {v1 , ..., vn m
n " " ) (Adja
en
y List j
.vj
7.9 m m
.m n .n + m
)|.O (|V | + |E
7.10 : ) G = (V, E , G
C V .
7.11
.
7.12 ) , ( .
, .
v V " "v v
v.
93
7 :
7.1 :
7.13 .
7.14 ) (:
) G = (V, E n k ,:
.1 .n k
.2
)(nk)(nk+1
2
nk
:
.1 .k k = 1 2.15 n 1 , .
k 1 .k ) G = (V, E k , C1 , C2
.
k 1 ,n k + 1
,n k.
.2 )
2
( .
)n(n1
n
n
= 2 n 2 .
n
2
C1 , ..., Ck n1 , ..., nk ) (n
:
nk
n1
+ ... +
2
2
:
!
k
X
2
ni n
i=1
1
2
k
k
k
k
X
1 X
1X 2
1X
ni
n2i
= )ni (ni 1
= ni ni
=
2 i=1
2 i=1
2 i=1
i=1
k
X
ni
i=1
:
2
= (n k) = n2 2nk + k 2
!2
ni k
k
X
i=1
!2
)(ni 1
k
k
k
X
X
X
n2i 2n + k
= ni + k
n2i 2
= n2i 2ni + 1
i=1
i=1
i=1
k
X
i=1
k
X
i=1
= )(ni 1
k
X
i=1
:
= n2 2nk + k 2
!2
)(ni 1
k
X
i=1
)(ni 1
k
X
i=1
= n2i 2n + k
94
k
X
i=1
k
X
i=1
7.2 :DFS
7 :
:
1
1 2
n (k 1) (2n k) n
2
2
n2i n
k
X
i=1
1
2
k
X
ni
i=1
1
1 2
)n (k 1) (2n k) n = (n k) (n k + 1
=
2
2
7.15 :
] = [x1 + ... + xn ] [x1 + ... + xn ] = x1 [x1 + ... + xn ] + ... + xn [x1 + ... + xn
!2
xi
n
X
i=1
] +x1 [x1 + ... + xn1 ] + x1 xn + .... + xn1 [x1 + ... + xn1 ] + xn1 xn + xn [x1 + ... + xn
!2
!2
n1
n1
n1
n1
n1
X
X
X
X
X
2
xi + x2n
xi
+ 2xn
= xi + xn
xi +xn
xi
+ xn
=
i=1
i=1
i=1
i=1
i=1
: :
!2
xi
1
X
x21
x2i
i=1
1
X
i=1
: n 1 :n
!2
xi
n
X
i=1
= xi + x2n
n1
X
+ 2xn
i=1
!2
xi
n1
X
i=1
+ x2n
!2
xi
n1
X
i=1
x2i + x2n
n1
X
i=1
= x2i
n
X
i=1
, ,
2
2
x1 = 1 x2 = 1 ).(1 + (1)) = 0 < 2 = 12 + (1
, :
.1 .(Breadth First Sear
h) BFS
.2 .(Depth First Sear
h) DFS
7.2
DFS
Explore(v):
Visited (v) 1
w V s.t (v, w) E
95
7.2 :DFS
7 :
7.16 Explore
)Explore (v
w V v .Visited (w) = 1
: w V v ) w w (v
Visited (w) = 1 . u v w Visited (u) = 1
Visited .0 " u ) Explore (u
.
Explore v V Visited
v 0 .1 DFS :G
DFS(G):
v V Visited (v) 0
v V do:
if Visited (v) = 0:
)Explore(v
:
" , ,
Visited ) (
.
. .G
) CC (Conne
ted Component
) V
" ( . CC :
CC(G):
| CC= Init Array of size |V
CCNUM 0
)DFSCC(G
) CC (G CCNUM :
DFSCC(G):
v V do:
Visited (v) 0
v V do:
if Visited (v) = 0:
in
rease CCNUM.
)Explore(v
DFSCC Explore :
96
7.2 :DFS
7 :
Explore(v):
)Previsit(v
Visited (v) 1
w V s.t (v, w) E
if Visited (w) = 0:
)Explore(w
)Postvisit(v
Previsit :
Previsit(v):
CC (v) CCNUM
,Previsit CCNUM v ) CC
v (.
:
.1 ) CC (G , CCNUM ).DFSCC (G
.2 DFSCC .V
.3 DFSCC v V ) .(v1
97
7.2 :DFS
7 :
7.2.1
)(h
l
)(f ) (i
l
l
)(g) (j
Explore ,a ):Explore (a
i
Visited 0
0
0
0
0
0
0
0
0
0
CC
Prev NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
) CC (a 1 .a a"
)) Explore (b ( . prev (b) = a
) Explore (b:
j
Visited 1 0 0
0
0
0
0
0
0
0
CC
1
Prev NIL a NIL NIL NIL NIL NIL NIL NIL NIL
98
7.2 :DFS
7 :
Visited 1 1 0 0
0
0
0
0
0
0
CC
1
1
Prev NIL a b NIL NIL NIL NIL NIL NIL NIL
) CC (c 1 .c c
,b d ) Explore (d prev (d) = b
:
i
Visited 1 1 1 0 0
0
0
0
0
0
CC
1
1 1
Prev NIL a b b NIL NIL NIL NIL NIL NIL
) CC (d 1 .d d
,b b .a e
) Explore (e prev (e) = a :
i
Visited 1 1 1 1 0 0
0
0
0
0
CC
1
1 1 1
Prev NIL a b b a NIL NIL NIL NIL NIL
) CC (e 1 .e e
,a a ) Explore (a DFSCC
, , CCNUM 2" ) Explore (f
) Explore (f:
i
Visited 1 1 1 1 1 0
0
0
0
0
CC
1
1 1 1 1
Prev NIL a b b a NIL NIL NIL NIL NIL
, f " ,i ) Explore (i:
i
Visited 1 1 1 1 1 1
0
0
0
0
CC
1
1 1 1 1
2
Prev NIL a b b a NIL NIL NIL f NIL
i j ) ,Explore (j :
i
Visited 1 1 1 1 1 1
0
0
1 0
CC
1
1 1 1 1
2
2
Prev NIL a b b a NIL NIL NIL f i
j g ) ,Explore (g :
j
Visited 1 1 1 1 1 1 0 0 1 1
CC
1
1 1 1 1
2
2 2
Prev NIL a b b a NIL j NIL f i
99
7.3 :DFS
7 :
g , j ,
i , f ,h ),Explore (h
:
j
Visited 1 1 1 1 1 1 1 0 1 1
CC
1
1 1 1 1
2
2
2 2
Prev NIL a b b a NIL j f f i
h , f
) ,Explore (f DFSCC , :
j
Visited 1 1 1 1 1 1 1 1 1 1
CC
1
1 1 1 1
2
2 2 2 2
Prev NIL a b b a NIL j f f i
} {a, b, c, d, e } {f, g, h, i, j :
) (f
)(h
)(a
)(i
)(j
)(g
)(b
)(e
)(d
)(c
7.23 ,
f " .
7.24 , Prev .
7.3
DFS
7.25 : ) G = (V, E , U V
x, y U x y y .x
.
:
7.26 : ) G = (V, E , C V
.
7.27 .
7.28 .
7.29 :
100
7.3 :DFS
7 :
) G = (V, E C n n G
. C
: E E .C ,G = C, E
v C E .v n C E
n ,.
7.30" n n 1.
DFS
.
7.3.1
Depth-First-Forest
DFS DFS) G G
(Forest .
.
)
(
. :
DFS(G):
v V do:
Visited (v) 0
Clo
k 1
v V do:
if Visited (v) = 0:
)Explore(v
Explore :
Explore(v):
)Previsit(v
Visited (v) 1
w V s.t (v, w) E
)Explore(w
)Postvisit(v
Previsit,Postvisit :
Previsit(v):
Pre (v)
lo
k
101
7.3 :DFS
7 :
in rement lo k
Postvisit(v):
Post (v)
lo
k
in rement lo k
7.31:
ao
a
`
.1 Pre,Post | |V )
(.
.2 .
.3 DFS Previst,Postvisit )|.O (|V | + |E
.4 , prev .
:
.1 Pre .
.2 Post
.
. G
) G = (V, E } .E = {(prev (v) , v) E | prev (u) 6= NIL G
.
)
( . DFS )
( G :
.1
:(Tree ) G (.
)Edges
):(Ba
k Edges
) (u, v G v u
.2
)" ) (u, v u v u (v
.4 ) :(Cross Edges G
.
:
7.32 DFS
) G = (V, E ) (
DFS
)(:
u, v V :
Forest
.DFS
7.3 :DFS
7 :
Forest
.DFS
Forest
.DFS
: .
" ) pre (u) < pre (v) < post (u) < post (v ) pre (u) < pre (v
v u .u
. " ) pre (u) < pre (v :
.1 ) pre (v) < post (u v u u .
) post (v) < post (u v u
.u ]) [pre (v) , post (v ]).[pre (u) , post (u
.2 ) post (u) < pre (v ) pre (u) < post (u < )pre (u) < post (u) < pre (v
) post (v ]) [pre (u) , post (u ]) [pre (v) , post (v .
.
u, v ) pre (v) < pre (u :
pre (u) < post (v) .1 ]) [pre (u) , post (u ]) [pre (v) , post (v u v
post (v) < pre (u) .2 .
7.33 DFS
)) G = (V, E ( v V v 6= u V G"
)< pre (v) < post (v) < post (u
)pre (u
Pre/Post
7.34 DFS
) G = (V, E ) (
) (:
DFS
(u, v) E :
:
) (u, v :
.1 u, v ) (u, v .
.2 v u ) (u, v .
103
7.3 :DFS
7 :
.3 u v ) (u, v ) v (u .
DFS
"
ba kward-edges
.G
= : )( , v DFS )(u, v
.v ) pre (v u ) v
( v ) Visited .(pre u v
v u . u
v ) (u, v .ba
kward-edge
= .(u, v) ba
kward-edge v u
G v .u ) (u, v )( ,G.
7.39 DFS :
)(i
l
)(j
)(e) (d
)(h
) (a) (b) (f
)(k
)(c
)(g
104
7.3 :DFS
7 :
Explore ,a ):Explore (a
k
Visited 0
0
0
0
0
0
0
0
0
0
0
pre
post
Prev NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
,pre (a) = 1 ,Clo
k a" b ) (a, b
.b prev (b) = a ) ,Explore (b :
k
Visited 1 0 0
0
0
0
0
0
0
0
0
pre
1
post
Prev NIL a NIL NIL NIL NIL NIL NIL NIL NIL NIL
,pre (b) = 2 ,Clo
k b b ) (b, d
.d prev (d) = b ) ,Explore (d :
k
Visited 1 1 0 0 0
0
0
0
0
0
0
pre
1
2
post
Prev NIL a NIL b NIL NIL NIL NIL NIL NIL NIL
,pre (d) = 3 ,Clo
k d d ) (d, e
.e prev (e) = d ) ,Explore (e :
k
Visited 1 1 0 1 0 0
0
0
0
0
0
pre
1
2
3
post
Prev NIL a NIL b d NIL NIL NIL NIL NIL NIL
. e e a
a . e ,post (e) = 5
.d d ,post (d) = 6
.b b ,post (b) = 7
.a a k , prev (k) = a ) ,Explore (k
:
e
f
g
h
i
j
k
1
0
0
0
0
0
0
4
5
d NIL NIL NIL NIL NIL a
c
0
d
1
3
6
NIL b
b
1
2
7
a
Visited 1
pre
1
post
Prev NIL
105
c
0
d
1
3
6
NIL b
b
1
2
7
a
Visited 1
pre
1
post
10
Prev NIL
7.3 :DFS
7 :
pre (c) = 11 c b .
post (c) = 12 .DFS " f ) ,Explore (f
:
e
f
g
h
i
j
k
1
0
0
0
0
0
1
4
8
5
9
d NIL NIL NIL NIL NIL a
c
1
11
12
d
1
3
6
NIL b
b
1
2
7
a
Visited 1
pre
1
post
10
Prev NIL
k
1
8
9
a
g
0
h
0
f
1
13
b
1
2
7
a
c
1
11
12
d e
1 1
3 4
6 5
NIL b d
Visited 1
pre
1
post
10
Prev NIL
j i g i ) g ( . g
f f j
i f h
, ) Explore (h :
k
1
8
9
a
i
j
1 1
14 15
19 18
f
i
f
1
13
g h
1 0
16
17
NIL j f
c
1
11
12
d e
1 1
3 4
6 5
NIL b d
b
1
2
7
a
Visited 1
pre
1
post
10
Prev NIL
h f
.DFS DFS :
e
f
g h
i
j k
1
1
1 1 1 1 1
4 13 16 20 14 15 8
5 22 17 21 19 18 9
d NIL j
f
f
i a
c
1
11
12
d
1
3
6
NIL b
b
1
2
7
a
Visited 1
pre
1
post
10
Prev NIL
:
)(c
) (f
)(h
,
)(a
)(i
)(j
)(g
)(k
,
)(b
)(d
)(e
(c, b) E (f, b) E
) ) (f, b ) (c, b ( .
.
}.{a, b, d, e} , {f, i, j, g} , {c} , {k
106
7.3 :DFS
7 :
7.3.2
.
7.40
".
7.41 : ) G = (V, E G = V, E
} ,E = {(v, u) | (u, v) E
.G
7.42 G G u, v V
G" .G
7.43 : .
ReverseGraph(G):
in
rement
lo
return G = V, E
E )|.O (|V | + |E
7.44
:Gs
) G = (V, E G )
Gs
= (V s
, E s
} V s
= {v1 , ..., vk vi Ci
(vi , vj ) E s
G ) (x, y x Ci .y Cj
7.45
Gs .
7.46 vi Ci
V s ,Ci
.
7.47 DAG
) G = (V, E
Gs .
: ,C1 C2 C3 ... Cn C1 G
) (v1 , u2 ) , (v2 , u3 ) , ..., (vn , u1 ) .(vi , ui Ci vi , ui
) vi ( .
i G ui
v1 u2 :
v1
v3 ... vn u1
v2 u3
u2
v1 , u2 G C1 = C2 .
107
7.3 :DFS
7 :
StronglyConne
ted(G):
Perform DFS(G) and
ompute post times for every vertex u.
Number the the verti
es of G by order of post values.
Constru
t the reversed graph G
Perform DFS(G ) starting with the vertex with the highest post value // If DFS doesn't rea
h all
verti
es start the next sear
h from the vertex with the highest post value remaining
Constru
t the DFS Trees a
ording to the prev values
omputed in the previous step, these are the
SCCs of G.
: DFS )| O (|V | + |E " )|O (|V | + |E
: .
DFS Post
) ( .
DFS Pre ,Post
Pre/Post DFS.
7.48 , U V:
})d (U ) = min {pre (u
uU
) d (U U ) f (U .U
7.49
) .G = (V, E (u, v) E u C
C C
.C
: C C :DFS
d (C) < d C x ,C ) pre (x
C C G x C
. (u, v) E w C )pre (x
(x .
uv
) ( x ) w w
) d C < d (C y ,C ) pre (y
C C G x C
. C y DFS Forest
108
7.3 :DFS
7 :
) post (y C
C
.C ) post (y
C
C C ) .G = (V, E (u, v) E u C
v C .f (C) < f C C .C
G G
: (u, v) E .(v, u) E
G C C .f (C) < f C
.
DFS .G post
C1 ) f (C1 . x C1
C1
.C1
G
StronglyConne ted
.G
: DFS G
. k = 0
. k .
k + 1 , u
post
u G .Cu
7.49 post (u) = f (Cu ) > f C
C C . u
) Cu Cu
u .(u
Cu u .u
109
7.3 :DFS
7 :
7.3.3 :
:
)(B) (A
) (E) (F
)(G
)(C
)(D
) (H
" .SCC
from/to A B C D E F
G H
0 0
0 0
0 0
0 1
1 1
1 0
0 0
1 0
1
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
1
0
0
A
B
C
D
E
F
G
H
0
0
0
1
0
0
0
0
] [A B C F
][B E
][C D
][D A H
][E F G H
][F B G
][G
][H G
A
B
C
D
E
F
G
H
: A
) ( . ),Explore (A
A B ) ,Explore (B :
H
0
G
0
F
0
E
0
D
0
C
0
B
0
A
1
1
Visited
pre
post
Prev NIL A NIL NIL NIL NIL NIL NIL
B E ) ,Explore (E :
H
Visited 1
1
0
0
0
0
0
0
pre
1
2
post
Prev NIL A NIL NIL B NIL NIL NIL
110
7.3 :DFS
7 :
E F, G, H ) ,Explore (F :
G
Visited 1
1
0
0
1 0
0
0
pre
1
2
3
post
Prev NIL A NIL NIL B E NIL NIL
F G ) ,Explore (G :
H
0
NIL
Visited 1
1
0
0
1 1 0
pre
1
2
3 4
post
Prev NIL A NIL NIL B E F
G , Post F
Post E ,H ) Explore(H :
G H
0
Visited 1
1 0
0
1 1 1
pre
1
2
3 4 5
post
7 6
Prev NIL A A NIL B E F
H G , H E ,
E B , B A C
) ,Explore(C :
G H
1
8
9
E
Visited 1
1 0
0
1 1 1
pre
1
2
3 4 5
post
11
10 7 6
Prev NIL A A NIL B E F
C D ) Explore (D :
G H
1
8
9
E
Visited 1
1 1 0 1 1 1
pre
1
2 12
3 4 5
post
11
10 7 6
Prev NIL A A C B E F
D A, H ,C A
.DFS :
G H
1
8
9
E
Visited 1
1 1 1 1 1 1
pre
1
2 12 13 3 4 5
post
16 11 15 14 10 7 6
Prev NIL A A C B E F
111
7.3 :DFS
7 :
" :
)(A
)(B
)(E
)(C
)(D
) (F
)(G
)(H
:
(A, B) , (A, C) , (C, D) , (B, E) , (E, H) , (E, F ) , (F, G) .1 .
(D, H) , (H, G) .2 .
(D, A) , (F, B) .3 .
(A, F ) , (E, G) .4 .
:
)(C
)(D
) (H
)(B) (A
) (E) (F
)(G
DFS Post .A A D
C A . DFS
Post B ) ,Explore (B :
H
Visited 1
0
1 0
0
0
0
0
pre
1
2 3
post
6
5 4
Prev NIL NIL D A NIL NIL NIL NIL
B ,A, F A F A, E A
.E E B .B E F
B B ,H :
H
Visited 1
0
1 0 0 0
0
0
pre
1
7
2 3 9 8
post
6
12
5 4 10 11
Prev NIL NIL D A F B NIL NIL
H D . H F E, A
G E, F ." :
H
Visited 1
0
1 0 0 0
0
0
pre
1
7
2 3 9 8
15
13
post
6
12
5 4 10 11 16
14
Prev NIL NIL D A F B NIL NIL
112
7.3 :DFS
7 :
:
)(B) (G) (H
) (F
,
,
)(E
)(A
)(D
,
)(C
,
Gs:
] [B, F, E
][G
][A, D, C
][H
7.3.4 ) :(12
7.52 ) G = (V, E G = V, E :
.1 G .G
.2 G .G
E E .3 .
):G = (V, E
:
.1 .
.2 .
:
.
} {v1 , ..., vn v1 v2 ... vn v1
) (vi , vi+1 vi .vi+1
Gs
C C u C v C ) (u, v ,
Gs
)
Gs
( .
, ):G = (V, E
.1 SCC
Gs )|.O (|V | + |E
.2 G = V , E V = V )| .O (|V
113
7.4
7 :
.3 = E ).O (1
.4 :
. )| O (|Ci
G X
)| .O (|V
. | |Ci | = |V
.5
Gs .E
Gs
)
Gs (
G G
.Gs
= Gs )| O (|E
Gs | |E.
.6 G = V , E .
7.53
\ )
(.
7.4 :
7.54 : ) G = (V, E V
vj (vj , vk ) E vk.
7.55 ) G = (V, E v V:
.1 ) v .((v, ) E
.2 ) v .((, v) E
7.56 :
) G = (V, E .
: } V = {v1 , ..., vn" ) v1 v2 ... vn
( , v1 vn . v1 1 < k n
(vk , v1 ) E vk v1 . vn
1 k < n (vn , vk ) E vn vk .
7.57 : ) G = (V, E {v0 , ..., vk } V
0 i < k (vi , vi+1 ) E .(vk , v0 ) E
7.58 :
) G = (V, E .G
: v0 v1 ... vk v0 .G
v1 v0 (v0 , v1 ) E " v2 v1 v0
v1 , ..., vk .v0 (vk , v0 ) E v0
.vk vk v0 v0 vk .
114
7.4
7 :
7.59 :
) (DAG .
: :
)Topologi
alSort(G
Perform DFS(G) and
ompute post (v) for ea
h v V.
Number the verti
es by order of post values returned.
)| O (|V | + |E .DFS
7.60
)Pre (u
)Pre (v
)Pre (v
) Explore (u v v
.u " ) G ) ((u, v .
) ,Post (v) < Post (u.
DFS G Post .
7.61 post
.
.
7.62
. 7.38 " DFS Ba
kward-Edge
DFS .
:
)Topologi
alSort(G
Perform DFS(G) and
ompute post (v) for ea
h v V.
if there is a ba
kward-edge in G:
7.4
7 :
7.4.1 ) :(12
) G = ({v1 , ..., vn } , E 1 n Sn .
)) v(1) v(2) ... v(n ( .
:
IsTopologi
al(G, ):
Init A as Array of size n.
for i = 1, ..., n:
)A [i] = (i
G = V, E V . ) v(j) , v(i A
A ,G
) (i) < (j .
116
7.4
7 :
7.64 A ) v(j) , v(i "" ). v(i) , v(j
7.4.2
) :(12
)) T = (V, E (
. T )| .O (|V
":
CountTopoSorts(v):
if v.size == 1
return 1
//denote the
hildren of v as Child (v) = {u1 , ..., uk }//
) ui .sort=CountTopoSorts(ui
X
Y
ui .size; u1 .size, ..., uk .size
Count =
ui .sort multi
1ik
1ik
return Count.
v . Y
ui .sort
1ik
,.
117
7.4
7 :
7.65
O |V |2 :
SubtreeSize(v) :
ount=0
if v .left = NULL and v.right = NULL:
return 1
else:
)
ount=1+Subtreesize(v.left)+Subtreesize(v.right
Subtreesize )| O (|V | |V )
( )) O (1
| |V
( .
Subtreesize
| .O |V
| |V
,
)| ) O (|V (.
) :(12
7.4.3
7.67 DAG
) G = (V, E :
.1 v1 v2 ... vn v1 v2 ... vn .G
.2 G v1 v2 ... vn v1 v2 ... vn .
:
.1 1 i n 1 .(vi , vi+1 ) E
(vi+j , vi ) E ,j > 1 vi vi+1 ... vi+j vi
G . vi vj
) (vj , vi v1 v2 ... vn , .
vj (vk+i , vk+i+1 ) E 0 i n k:
7.5
7 :
:BFS
7.68
DAG
" (vk , vk+1 ) E k
" .
7.4.4
DAG
) :(12
s, t DAG
):G = (V, E
s s t x t
x .s x" t x t
. DAG
u v u v . :
.1 .
.2 | |V .
.3
) t t .(1
.
.
.4 .s
) t
(s )| O (|V | + |E ,
)| O (|V )| O (|E )
( " )|.O (|V | + |E
7.5
BFS
119
7.5 :BFS
7 :
7.69 Breadth-First
. DFS
.
BFS(G,s):
v V do :
dist (v)
dist (s) 0
=Q
)Enqueue (Q, s
while Q 6= :
)u Dequeue (Q
if dist (w) = :
prev (w) u
)Enqeue(Q, w
s E ) (s, w = )) dist (w
(w 6= s w , ) prev (w s .dist (w) = dist (s) + 1 = 1
, w ) (
)
= .(dist w ,
w .2
s
) (.
7.71 BFS
. DFS
)
(.
:
120
7.5 :BFS
7 :
7.72 ) G = (V, E :
.1 s, v V ) distan
e (s, v s v .
7.73 BFS
) G = (V, E ) ( s V
)= distan
e (s, v
)BFS (G, s
v V:
)dist (v
7.74 BFS .s
: :
7.75
) G = (V, E .s V ) BFS (G, s (1 j |V |) dist (vj ) = dj
) j .(d0 = dist (s) = 0
| 0 k |CCs :
distan e=dj
.2 : } Q = {vk , ... vk
dist = dk w Q dist (w) = dk dist (w) = dk + 1
dist = dk . , w Q ).distan
e (s, w) = dist (w
.3 : w V
= ) dist (w . distan
e (s, w) dk + 1
7.76 | k |CCs s
) BF S (G, s .
: ,k k = 0 :
.1 .
.2 k = 0 } {s ). .d0 = dist (s) = 0 = distan
e (s, s
.3 s dist .
:k = 1
.1 v0 = s s v1
.d1 = 1 s ,distan
e (s, s) = d0 = 0 1 = d1.
.2 ) (0 s :
=1
{|}z
)dist (w) = d1 = distan
e (s, w
121
7.5 :BFS
7 :
.3 dist = .dist
s distan
e (s, w) 2 = d1 + 1
k vk+1 ) k + 1 vk (:
.1 v0 , ..., vk1 1 ,distan
e (s, vj ) = dj dk
.dk dk+1 vk+1 , vk , vk+1
,dk = dk+1 vk+1 vk
vk .dk+1 = dk + 1 2
vk k distan
e (s, vk ) = vk ":
0 j k : distan
e (s, vj ) = dj dk+1
.2 } Q = {vk+1 , ... :
w Q k 2
} .dist (w) {dk , dk + 1 vk+1
vk+1 } dk+1 {dk , dk + 1
. "
).distan
e (s, w) = dist (w
w Q vk
k 3 .distan
e (s, w) dk + 1
" vk .dist (w) = dk + 1 distan
e(w) dk+1
dk +1 )) distan
e (s, w( = distan
e (s, w) = dk +1
) .dist (w } dist (w) {dk+1 , dk+1 + 1
} | {z
=dk +1
}.dk+1 {dk , dk + 1
.3 = dist
.distan
edk+1 + 1 3
w .distan
e (w) dk + 1
w" distan
e (s, w) = dk + 1 dk+1 = dk + 1
:
: s
) s ) dist = = distan
e (s, w
"(.
: DFS BFS
. \ "
)| .O (|V | + |E
.
.
122
7.6 :
7.6
7.6.1
:Dijkstra
7 :
Dijkstra(G,s):
u V do:
dist (u)
dist (s) 0
)v Extra tMin (Q
.4 ) (s u V s > )dist (u
) , dist (s) + w (v, u " .
.5 s dist ) ,dist (u) = dist (s) + l (v, u) = l (v, u
) dist (u) = distan
e (s, u u" . s s
s dist.
.6 s )
(.
123
7.6 :
7 :
.7 dist ) + dist (u
. ,s s
.s
.8 ) dist (u) > dist (v) + w (v, u
s
.
7.79 :
u V ).dist (u) distan
e (s, u
: u ) dist (u) < distan
e (s, u .
= ) dist (u ) dist (u .u
} {s, ..., u ,u" u
) dist < distan
e t t( .
) .dist (t) distan
e (s, t t w ,
:
)dist (t) = dist (w) + w (w, t) distan
e (s, t) + w (t, u) = distan
e (s, u
) .dist (u) < distan
e (s, u u" .
:Dijkstra
7.80 Dijkstra
)) G = (V, E, w ( Dijkstra
} R = {v1 , ..., vk , :
distan e
tV \R
)distan e (s, u
)distan e (s, v
)distan e (s, u
= ).dist (u
dist
: ,k :k = 1
.1 k = 1 ,s } R = {s .
.2 k = 1 ,s } R = {s .
.3 1 s )
s "( . s ,s
.dist = distan
e
k :k + 1
.1 1 k R .
k + 1
3 .
124
7 :
7.6 :
.2 2 k R k . s
k + 1 dist dist
3 dist=distan
e s .
.3 v V \R .s .t R
t v:
7.81 :
.1 3
dist.
.2 .
{z
minimal
: :
.1 V )| O (|V.
.2 | |V )| O (|V.
.3 | |V | |E
De
reaseKey " )| (|E| + |V |) log (|V " "
))| .O ((|V | + |E|) log (|V
" ))| .O ((|V | + |E|) log (|V
125
7.6 :
7 :
7.82 '
))) O (log (n (Union Find .De
reaseKey
))| O (|V | log (|V |) + |E| log (|V
.
)(:
7.83 , :
)(u
2
)(v
)(s
1
)(w
Bellman-Ford
) (:
Dijkstra
.
"
.
Bellman-Ford
) ( .
. "" s
.
s }{ di V R = ) d0 (u u 6= s
.d0 (s) = 0 :1 i |V | 1
}di = min {di1 (v) , di1 (u) + w (u, v) | (u, v) E
) (13 u V ) di (u
s u i .
s .
BellmanFord(G, w, s):
u V d0 (u)
d0 (s) 0
for i = 1, ..., |V | 1 :
for v V do:
Find
:Union
|V | 1
dist .
: 13 .
: )| O (|V u V
P
for ) deg (v . = )vV deg (v
| .2 |E for |V | 1 :
)|O (|V |) + (|V | 1) 2 |E| = O (|V | |E
Find
:Union
, ) (ADT:
:Makeset (x) .1 .x
:Find (x) .2 .x
Union (x, y) .3 )( .x, y
) (
) ( .
. x ) (x .
:
Makeset(x):
(x) x
rank (x) 0
"" x x x
,0 ) O (1.
:
Find(x) :
while x 6= (x):
)x (x
return x
) ) .(x = (x
)) O ( (x ) O (n n
) ,O (log n
.
127
Find
:Union
Union(x, y) :
)rx Find (x
)ry Find (y
if rx = ry then return
else:
(rx ) ry
Union Find
U .
: .U
: |U | = 0 |U | = 1 .
: U n U n .
n n .
Union )( Union )(
,.
n
2k
.k
:
.1 rank ( (x)) rank (x) + 1 x".
Find
:Union
.3 k 2k .
k ) ( , m k m2k n
.m 2nk
8.3
Find
Union
n ).O (log n
: n log2 n
k > log2 n 2nk < nn = 1 . log2 n
Find n ) O (log n
. Union Find
Union ).O (log n
8.4 N ) O (log N
.log2 N
Find
)( ,
path-
ompression :
Find(x):
if x 6= (x) then:
)) (x) Find ( (x
return x
= log2 log2 log2 (1024) 1.7 = log2 log2 log2 log2 (10234) < 1
Find
. " " .
n 0 .log2 n
k + 1, ..., 2k k ,2:
1
2 , 3, 4 = 22 , 5, 16 = 24 , 17, ..., 216 , ..., k + 1, ...., 2k
k ) k < log2 n 2k ( . :
.
..
.22
i i k + 1, ..., 2k log2 i < k + 1 ). log2 (n
129
Find
:Union
8.7
n m
)).O ((m + n) log (n
Find
8.8 ) log (n ) (log2 21000 = 5
) O (m + n m Find ).O (m log n
: , ""
"" . ""
.(n "" ,
))log (n
k + 1, ..., 2k " 2k" . k , 2nk
X
n
n
.n
2j = 2k
j=k+1
Find .
," :
.1 ) (x .x ) log2 (n
) ( )) .O (log2 (n m
)).O (m log2 (n
.2 ) (x ,x .1
1 )
x
( . rank (x) k + 1, ..., 2k 2k
"
" . ) 2k ) n log2 (n"( "
)) O ((m + n) log (n .
130
9 :
9.1
T = V, E E E
E E )w (e
= .w G T = V, E G
eE
:
n
o
9.2
MST
) G = (V, E, w )) T = (V, A, w
= (A T MST A " "
. A :
A .MST
) (u, v A ,
}) A {(u, v .
" .A :
Generi
-MST(G):
=A
return A
131
9.2 :MST
A 2 4
. A
.
.3
A MST
A .
.
9.5
" .MST
9.6 : ) G = (V, E V ) (S, V \S
, S .V \S
9.7 ) G = (V, E, w ) (S, V \S :
.1 A E A .
.2 .
.
9.8 :
) G = (V, E, w X E
T = V, E G
.X E ) (S, V \S X . e
} X {e T ) .(T
e
: , e T . , / T
} T {e . )) e = (u, v u, v
u v " e .e
(
n T o
}\ {e
E = E e ,T = V, E G |V | 1
| |V . , :
)w (x) + w e = w (T ) + w e w (e
}xE\{e
= )w (x
xE
w T
e w (e) w e < )w (e
w e ) w T < w (T .T w (e) = w e = ) w (T
w T T .
Generi
MST ).G = (V, E, w
A A
. ) GA = (V, A, w
) A
| |V ( . ) (u, v A GA
}) A {(u, v .
While 4 2 |V | 1 |V | 1
. = A | |V ,GA
" 1 .
:
132
9.3
Kruskal
:MST
9.9 :
) G = (V, E, w . A E MST
G ) C = (VC , EC ) .GA = (V, A ) (u, v C
GA ) (u, v .A
9.10 C GA .
: ) .(VC , V \VC ,GA " A VC )(u, v
" }) A {(u, v MST G
,A.
.
. Kruskal A
A
. Prim A
A .
9.11 MST
MST
MST .T 6= T
:
) T T \ T T ( ,
.e " e T ,T
. f 6= e
T e T T
e .T MST ,.
9.3
Kruskal MST
Kruskal
) (u, v . C1 C2 ) .(u, v )(u, v
C1 9.9 .C1
Union-Find )
GA ( .
) Find (u u
u, v ) .Find (v) = Find (u
:Union
)Kruskal-MST(G
A
v V do:
)Makeset (v
133
9.3
Kruskal
:MST
)Union (u, v
return A
: .9.9 :
1 3 A .
5 8 ) (u, v u, v
, )) (Find (v) = Find (u
, ) Find (v) 6= Find (u
9.9 .A
u, v ).Union (u, v
A
MST G ) Find (v) 6= Find (u
A MST .G
: :
.1 )| O (|V A ).O (1
.2 ))|.O (|E| log (|E
.3 | |E Find, Union
)| O (log |V " )| .O (|E| log |V
" ))| O (|E| log (|E )| |V | O (|E .
9.12 :
)(d
)(b
4
3
1
)(c
)(e
2
9.4
Prim
:MST
...
9.4
Prim MST
Prim
, G s:
Prim(G,s):
u V do:
key (u)
(u) NIL
key (s) 0
9.15 .MST
MST ,
.
: T = V, E .G
:
9.16
while
MST
G :
135
9.4
Prim
:MST
:
)| O (|V
)| .O (|V
136
10:
10
10.1
.
".
10.1.1
Sort
:Counting
CountingSort(A):
Initialize an array C with k slots
for i = 1, ..., k do
C [i] 0
for i = 1, ..., n do
]]In
rement C [A [i
for i = 2, ..., k do
]C [i] C [i] + C [i 1
for i = n, ..., 1 do
]B [C [A [i]]] A [i
]]De rement C [A [i
:
.1 .C
.2 A.
.3 A } .i {1, ..., k ]C [i
A i .1, ...k
.4 ] A [i B ]] C [A [i
B " ]] C [A [i
A ] .A [i ]] C [A [i
A .B
: } i {1, ..., k ni i ,A :
} i {1, ..., k .C [i] = ni
} i {1, ..., k:
X
X
= ]C [i
= ]C [j
nj
ji
ji
A .i
137
10:
10.1 :
] B [j
B [j] = i ) B [j + 1] = i h i .(i < i
h i
] C [i] ni , ..., C [i B ] B [j + 1 .C i ni , ..., C i
h i
h i
j + 1 = C i ni ] j = C [i ] C [i i C i ni
i . i < i C :
h i
X
X
< nj
nj = C [i] = j
= j + 1 = C i ni
ji
j<i
] B [j + 1] B [j ,j.
: )
( . n k
) .O (k) + O (n) = O (n + k ) k O (n ).O (n
10.4 CountingSort , i < j
A ] A [i] = A [j r, s ] A [i ] A [j
.r < s .
10.5 CountingSort :
A n } {1, ..., k "
A ] [a, b ) .O (1 ).O (n + k
: C k CountinSort
i A ] .A [i
C A
) .O (n + k ] [a, b :
.1 b < k b .b = k
.2 a < 1 a .a = 1
.3 b < a ] [a, b .0
138
10:
10.1 :
.4 ] C [b] C [a ] A [i ][a , b
] [a, b a, b ) [a, a
].(b, b
4
) ,O (1.
10.1.2
Sort
:Radix
" A k .
)Least Signi
at
(Digit=LSD .CountingSort :
RadixSort(A,k):
for i = k, ..., 1 do // i is the number of the digit when k is the LSD
A CountingSort (A) // sorting on the i'th digit
10.6 .
ao
a
`
] A = [21, 22
A . CountingSort ] C = [0, 2
CountingSort 21 ] A [1 ] B [2 22
] A [2 ] B [2 ].B = [22, 21
] A = [150, 2, 77, 552, 17, 15 ] [150, 002, 077, 552, 017, 015:
.[150, 002, 552, 015, 077, 017] :
].[002, 015, 017, 150, 552, 077
].[002, 015, 017, 077, 150, 552
: } i {1, ..., n ] .A [i] A [i + 1
Sort
:Insertion
InsertionSort A n :
InsertionSort(A):
139
10.1
10:
for i = 2, ..., n
for j = idownto 2
if A [j] < A [j 1]do
]swap A [j]with A [j 1
) ( :
, j
] A [j .
] A [j
. 1 j n
j ] A [1, ..., j.
: ,
X . j j "
n
)j = n(n+1
.O n2
2
j=1
" A ] [a, b . :
.1 " "bu
kets .
.2 A .Bu
kets
.3 Bu
ket .
.4 .
, ba .
n
Bu
ketSort(A):
Initialize an array C of size n = |A| where ea
h slot
ontains a list
for i = 1, ..., n do
n
] A [i
Insert A [i] to the list in C ba
for i = 1, ..., n do
].B [i] B [i + 1
n
n
ba B [i] L ]B [i + 1
B [i] < ba
.2 "] B [i + 1
L .C L L L L
].B [i] < B [i + 1
140
10:
10.1 :
:
n
) + O (n InsertionSort
O n2 ) O (n . " .O n2
A ]) [a, b ][c, d] [a, b
( dc :
ba
n
X
E [number of values in the i'th bu
ket] = E
1{A[j] is in the i'th bu
ket}
j=1
n
n
h
i X
z}|{ X 1
=1
= }E 1{A[j] is in the i'th bu
ket
= ]P [A [j] is in the i'th bu
ket
n
i=1
i=1
] [a, b n
1
n
ba
n
ba
ba
n
n
X
j=1
.1 :
.1 ) O (n n .
for j = i + 1, ..., n:
if A [j] < A [min]:
min j
: Sele
tionSort .A
10.7
i
Sele tionSort
: .
i j ] A [min ].A [i, ..., j 1
:
: j = i + 1 = ]A [i, ...., j 1
] ,A [i i = min ] A [min )( ].A [i, ..., j 1
10:
10.1 :
" 1 i n 1 i
] A [i ] .A [i, ...., n ] A [1
A [2] , ] A [2, ..., n . 1 i n 1
j i ] A [i] A [j .
: n 1
) n (i + 1 ,
:
)n (n 1
2
i = (n 1)2
n1
X
i=1
(n 1)
n1
X
i=1
= ])[n (i + 1
n1
X
i=1
)(n 1) (n 2
1 2
](n 1) [2 (n 1) n
n 3n + 2
=
=
=
2
2
2
2
2
" n .O n
2
2
n " . n
10.1.6
] A [1, ..., n k ,A
" ) .O (n
) .O (log n :
= k return k .
if A lr+1
2
else:
< k do:
if A lr+1
2
) 1
BinarySear
h(A l, lr+1
2
else:
) + 1, r
BinarySear
h(A lr+1
2
) lr+1 "" (
2
lr+1
k . 2 = 0
1 k .
lr+1 ,k k
2
142
10.2 :
10:
. "
.
: log2 n 1
) .O (log n " k
) (log n .
10.8 ) (log n
".
10.2
)( ) " } ({0, 1
.
10.9 ) :(Prex Code "
.
10.10 .
:
.
."
"
" .
10.11 :
T T .
: 1 ...n a1 ...am ,b1 ...bk i
ai 6= bi j ) a1 ...ai1 (1 ...j ai
j+1 ...j+l(ai )1 bi j+1 ...j+l(bi )1
.
10.12 T" :
.1 ] f : [0, 1 " .
.2 l : N " )
( .
10.13 T" f l T:
X
= ) $ (T
)l () f (
: "
) ( .
143
10:
10.2 :
. C " :
Human(C):
|n |C
for i = 1, ..., n 1:
)InsertKey(Q, z
: T " , T
) .$ T < $ (T :
10.14 :
T T ,a, b l T
) l (a) = l (b ) l (b) = l (a 6= a, b ) .l () = l ( :
)=l(
|}
{
z
X
6=a,b
6=a,b
h
i
])= [l (b) f (b) + l (a) f (a)] l (a) f (b) + l (a) f (a) = [l (b) f (b) + l (a) f (a)] [l (a) f (b) + l (b) f (a
))= f (a) [l (a) l (b)] + f (b) [l (b) l (a)] = (f (b) f (a)) (l (b) l (a
10.2 :
10:
10.15 :
T ) ( T .
: T .
" 1
.
. ) (
.
10.16 :
" || > 1 T .
: T
) ( .
.
.
.
10.17 :
T " || > 2 x, y .
)+ f (z
.$ (T ) = $ T
: z () l (z) = l (x) 1 :
X
X
= $ T
= )l () f () + l (z) f (z
))l () f () + (l (x) 1) (f (x) + f (y
6=x,y
6=x,y
)=f (z
|}
{
z
))l () f () + l (x) f (x) + l (x) f (y) (f (x) + f (y
6=x,y
x, y ) l (x) = l (y :
X
= $ T
)l () f () + l (x) f (x) + l (y) f (y) f (z) = $ (T ) f (z
6=x,y
:
10.18
" T T.
: | .| || = 2
.1 || < n .n T
W ) .$ (W ) < $ (T "
x, y W" T .
145
10:
10.2 :
} T = T \ {x, y} {z } .W = W \ {x, y} {z T
:
$ W = $ (W ) f (z) < $ (T ) f (z) = $ T
T " n .
T ,.
10.19
T " .f () > 0.4 " .
: .
" )
( ) (
."
:
) ( .
.
10.20
.
0.4
. x ) fx = 25 +
0 < < 0.6(
) y, z ( fy , fz " fz > fx
.fz > fy
10.21 " fz > fx fz > fy " (fz > fx
2
5
1 fy + fz 35 +
1
2
3
+ = 2
fy <
5
5
5
= fz > fx :
fx fz
. ) fw , fv"
(fw fv .fw + fv = fz fz > 52 + fw fw fw f2z = 51 + 2
.fw > fy = 15 2 fy
.fy fw
fz " . fz
,.
146
10.2 :
10.2.1
10:
h:35
i:40
f:13
g:21
d:5
e:8
:3
b:2
a:1
:i = 1 z
z.left = a ) extra
t (
.z.right = b ) (key z , .z.key = 3
) z (z , :
h:35
i:40
f:13
g:21
d:5
e:8
:3
T (z1 ):3
:
z1 : 3
a:1
b:2
:i = 2 ,z2 ) T (z1 c : 3
. 6 z2 ) T (z2 :
i:40
g:21
h:35
f:13
e:8
T (z2 ) : 6
d:5
) T (z2 :
z2 : 6
c:3
b:2
z1 : 3
a:1
:i = 3 ,z3 ,d : 5 ) T (z2
.11 z3 ) T (z3 :
i:40
h:35
g:21
f:13
) T (z3 :
147
T (z3 ) : 11
e:8
10.2 :
10:
z3 : 11
T (z2 ) : 6
d:5
i:40
g:21
h:35
T (z4 ) : 19
f:13
) T (Z4 :
z4 : 19
T (z3 ) : 11
e:8
h:35
i:40
g:21
T (z5 ) : 32
) T (Z5 :
z5 : 32
) T (z4
f : 13
i:40
T (z6 ) : 53
h:35
) T (z6 :
z6 : 53
T (z5 ) : 32
g : 21
:i = 7 ,z7 ,h : 35 i : 40 .75
) T (z7 :
T (z7 ) : 75
148
T (z6 ) : 53
10:
10.2 :
) T (z7 :
z7 : 75
i : 40
h : 35
T (z7 ) : 75
T (z6 ) : 53
z7 : 75
i : 40
z8 : 128
h : 35
z5 : 32
z4 : 19
z3 : 11
z2 : 6
c:3
z6 : 53
g : 21
f : 13
e:8
d:5
z1 : 3
a:1
b:2
. ,
:
40
128
35
128
21
128
13
128
8
128
5
128
3
128
2
128
1
128
:
l () :
f () :
:
14
18
25
32
42
70
80
327
7
+
+
+
+
+
+
+
=
2.555
128 128 128 128 128 128 128 128
128
= ) $ (T
)
( :
i = 11 h = 10 g = 00 f = 010 e = 0110 d = 01110 c = 011111 b = 0111101 a = 0111100
10.2 :
10:
e : 5
d:4
a:5
. b:2
c:2
i = 1 ,b : 2 c : 2 ,4 .T1
e : 5
d:4
a:5
. T1 : 4
i = 2 ,T1 : 4 d : 4 ,8 .T2
T2 : 8
. a:5
e:5
i = 3 ,a : 5 e : 5 ,10 .T3
T3 : 10
. T2 : 8
i = 4 ,T2 : 8 T3 : 10 ,18 T4 :
z4 : 18
a:5
d:4
z3 : 10
e:5
z2 : 8
z1 : 4
b:2
c:2
" .
:
5
18
4
18
2
18
2
18
5
18
:
l () :
f () :
:
6
6
8
10
40
10
+
+
+
+
=
2.222
18 18 18 18 18
18
= ) $ (T
:
e = 11 a = 10 d = 01 c = 001 b = 000
abedade
adebade
ae:
1001110001001110011001110001001110011011
" 40.
, ad, eb, ec, ae 4, 2, 2, 1 ,
:
ad : 4
ec : 2
eb : 2
. ae : 1
i = 1 ,ae : 1 eb : 2 , 3 .T1
ad : 4
T1 : 3
. ec : 2
150
10:
10.2 :
i = 2 ,ec : 2 T1 : 3 , 5 .T2
T2 : 5
. ad : 4
i = 3 ,ad : 4 T2 : 5 ,9" :
z3 : 9
z2 : 5
z1 : 3
eb : 2
ad : 4
ec : 2
ae : 1
" .
:
ae
eb
ad
1
9
2
9
2
9
4
9
:
l () :
f () :
:
15
4 4 6 3
= + + +
1.667
9 9 9 9
9
= ) $ (T
:
ad = 0, ec = 10, eb = 111, ae = 110
" abedade
adebade
ae 01110100111011010 17.
.
151