Professional Documents
Culture Documents
FOTAKIS
FOTAKIS
. ,
.
HPOOPIKH
M /
A'
M H/Y &
K T M. H/Y &
ATPA 2001
HPOOPIKH
/
A'
A
HMHTPIO TAKH
M H/Y &
AYO YPAKH
K T M. H/Y &
E K T M
K T M
HIA TAYPOOYO
IANNH EOIA
TYPORAMA
,
TYPORAMA
/ 2001
ISBN: 9605383535
K : H 30/1
Copyright 2001
& , 26222 : (0610) 314094, 314206 : (0610) 317244
. 2121/1993,
.
K 1
, , ,
E .................................................................................................................................... 15
1.1
T ; ................................................................................................................................... 17
1.2
A ............................................................................................................... 19
1.3
............................................................................................................ 21
1.4
A
1.4.1 A
................................................................................................
22
..........................................................................................................
22
1.4.2 A ............................................................................................................... 24
1.4.3 A
1.5
........................................................
26
......................................................................................
27
...................................................................................................................................................................................
29
B ..................................................................................................................................................................... 30
K 2
, , ,
E .................................................................................................................................... 33
2.1
..............................................................................................................
35
2.1.1 O ......................................................................................................................... 35
2.1.2 O O ......................................................................................................................... 37
2.1.3 O ......................................................................................................................... 39
2.1.4 O
..........................................................................................................................
41
2.1.5 O ......................................................................................................................... 41
2.1.6 A
2.2
.........................
42
.......................................................................................................................................................
43
2.2.1 M
..............................................................................................................
44
2.2.2 Y ...................................................................................................... 45
2.3
A ........................................................................................................................... 46
.....................................................................
47
..............................................................................................................
50
2.3.1
2.3.2 M
2.3.3 M ..................................................................................................... 52
................................................................................................................
54
...................................................................................................................................................................................
56
2.3.4
B ..................................................................................................................................................................... 57
K 3
, , ,
E .................................................................................................................................... 59
3.1
Quicksort
.............................................................................................................................................................
3.1.1 X
...................................................
67
..................................................................................................................
69
3.2.1 N
3.3
.....................................................
71
................................................................................ 76
3.3.1
3.4
64
.....................................
3.1.2 E
3.2
61
...............................................................
77
FFT .................................................................................................................................. 79
...................................
82
...................................................................................................................................................................................
87
B ..................................................................................................................................................................... 88
K 4
, , ,
E .................................................................................................................................... 89
EPEXOMENA
4.1
4.2
4.2
.................................................................................
91
......................................................
96
....................................................................................................
98
................................................................................................................................................................................ 103
B .................................................................................................................................................................. 104
K 5
, , ,
E ................................................................................................................................ 105
5.1
........................................................................
107
X
5.2.1 I
...................................................................
112
..................................................................................
112
5.2.2 I
.....................................................................
5.2.3 M
5.3
............................
113
.........................................................................
116
................................................................................................................
119
K Huffman
5.3.1 O Huffman
113
................................................................................................................................................................................ 124
B .................................................................................................................................................................. 125
K 6
, , ,
E ................................................................................................................................ 127
6.1
...........................................................................
129
............................................................................................
133
....................................................................................................................
135
........................................................................................................................................
138
O
6.1.1
6.2
6.3
................................................................................................................................................................................ 144
B .................................................................................................................................................................. 144
K 7
, , ,
E ................................................................................................................................ 145
7.1
...........................................................................................................
146
N Turing
...............................................................................................
7.2.1 Turing
7.2.2 K Turing
....................................
153
...............................................................................................
155
7.2.3 Turing
7.3
......................................
157
X P ............................................................................... 158
7.3.1 I
7.3.2 H P
7.4
151
.................................................
159
.......................................................................................................................................
162
.....................................................................................................................
165
................................................................................................................................................................................ 168
B .................................................................................................................................................................. 169
K 8
M NP
, , ,
E ................................................................................................................................ 171
8.1
...................................
173
H NP
8.3
NP
...................................................................................................................................................
............................................................................................................................................
177
179
EPEXOMENA
191
.......................................................................................................................
217
..........................................................................................................................................................................
243
A A A
.
.
,
, , .
/ ,
. , . , , .
. , , .
,
. ,
.
, , , , . ,
.
,
.
12
, .
.
. ,
.
, . , , .
, . ,
. ,
.
,
.
.
, ,
,
. .
, , -
.
, 1
, , . 2
.
3, 4 5 ,
: , . ,
, . 6 ,
, , ,
.
7 8 . 7
,
Turing,
. 8
, Turing NP ,
.
,
. . , , . ,
13
14
, . ,
.
, 2001
,
, ,
,
.
:
.
.
.
,
,
. ,
.
,
, ,
.
KEAAIO 1: E
16
,
. , .
,
.
, , . .
. .
:
1.1. ;
1.2.
1.3.
1.4.
1.5.
1.1 ;
1.1 ;
17
KEAAIO 1: E
18
.
: (. ) , ,
,
( , .).
1.1
.
( , )
. ,
, .
, ( ) .
. , .. a la russe: . ( ), , 1:
2 ( ),
(
). ,
1, ,
. 1.1
a la russe 19 45 = 855.
1.1
a la russe.
45
22
11
5
2
1
19
38
76
152
304
608
855
()
()
1 . 2
, hardware . , 2.
1.2
. , , ()
( ).
Pascal Pascal,
. , ( {
}) .
(procedure).
.. procedure russe(A, B).
()
( ) . (
), ;. :
1. , .. x 4; ( x 4).
2. , .. return product; ( product).
.
3. .
4. if <> then < 1> [else < 2>], <>
, . , <
1> . <> ,
else , < 2>. ,
.
5.
begin
< 1>;
< >;
end
19
KEAAIO 1: E
20
1 . 3
21
1.1
. , a la russe.
1.2
n x
.
(linear search), x
.
x , x. ,
0.
1.3
a la russe . 1.1
(instance) 45 19 . , .
, ,
n . , n , ,
.
n .
,
,
. ,
. , ,
,
. , n ,
KEAAIO 1: E
22
n , n , , .
,
. ,
n
n .
. ,
, .
,
.
, ,
, .
1.4
1.4.1
. ; ;
, . ( ) (.. , ,
, .) .
(bits)
. ,
,
.
, , , (..
). , n n,
bit. , -
1 . 4
bits . ,
, n m
bits , n + m.
.
, , . , 5 ,
1000 . , , .
,
, ..
tA(n)
n.
(principle of invariance) .
,
. ,
, .
1.1: t(n) ,
n
, c,
,
n c t(n) .
,
( c).
, , .
.
t(n) n (linear)
23
KEAAIO 1: E
24
1.3
n,
100n2
2n, ;
1.1,
(.. ,
, , .) .
1.4.2
.
.
, (Random
Access Machine, RAM) . , .
.
.
. ,
,
1 . 4
25
/
. , , .
n . (insertion sort), , 2 j n,
A[1,, j1]. A[j]
A[1, , j] .
procedure insertion_sort(A[1...n])
(1) for j 2 to n do
(2)
key A[j]; i j 1;
(3)
while i > 0 and A[i] > key do
(4)
A[i + 1] A[i];
(5)
i i 1;
(6)
A[i + 1] key;
(1) n ( j = n + 1), (2) (6) n 1 . tj n
(3) j. , (3)
j =2
(4) (5)
(t
- 1) . (3)
j =2
, tj 1. while loop i 0 ,
, i j 1, tj j.
1.4
A = [5, 2, 4, 6, 1, 3].
tj ; B = [1, 2, 3,
4, 5, 6], = [6, 5, 4, 3, 2, 1];
,
. , -
KEAAIO 1: E
26
j =2
insertion sort.
insertion sort
. ,
n
2 j n, tj = 1. ,
= n - 1 ,
j =2
insertion sort .
insertion sort
. ,
j, [j + 1] [1],
n
t = j =
j
j =2
j =2
n(n + 1)
-1 .
2
, insertion
sort .
A 1.1
n ( i = 1, , n) A[i,,n],
A[i]. (selection sort). .
;
.
1.4.3
, ,
insertion sort ,
, .
,
, , -
1.5
27
( )
.
(worst case analysis).
() .
(, ,
). , ,
. n!
insertion sort. ,
( n n2),
insertion sort,
.
,
. ,
, .
A 1.2
1.2.
x . . x
. . x ;
1.5
,
.
, , , .
28
KEAAIO 1: E
. ,
2n n3, . ,
, ,
10 4 2n , 10 2 n3
n .
10
20 . ,
30
38.
, 100 .
10 6 2n
n. ,
45. , n ,
, , n + 7 .
, , , ,
, 200 ,
1500.
, , , 4n ,
, n. , , ,
20.
, ,
.
,
.
YNOH
29
1.5
insertion sort 2n2 n ,
50n log n
. insertion sort 108
106 ,
103, 104, 105, 106 107 , .
,
, (..
a la russe, insertion sort, linear search), , , ,
.
KEAAIO 1: E
30
. :
[1] T.H. Cormen, C.E. Leiserson R. L. Rivest. Introduction to Algorithms. MIT
Press, 1990.
, / ,
, .
(Stanford, MIT, Berkeley, .).
:
[2] A.V. Aho, J.E. Hopcroft J.D. Ullman. Data Structures and Algorithms.
Addison Wesley, 1988. .
[3] S. Baase. Computer Algorithms: Introduction to Design and Analysis, 2nd Edition.
Adisson Wesley, 1988.
.
[4] G. Brassard P. Bratley. Algorithmics: Theory and Practice. Prentice Hall,
1988. . .
[5] K. Mehlhorn. Data Structures and Algorithms. Springer Verlag, 1984. ,
. .
.
[6] Robert Sedgewick. Algorithms, 2nd Edition. Addison Wesley, 1988.
, . ,
(.. C, C + + ).
, :
B I B I O PA I A
[7] . . . :
. .
[8] . . : . , 1999.
31
, , .
:
.
.
.
.
(, , ,
, )
( ,
)
(,
, , )
, , . ,
, , , , .
K E A A I O 2 :
34
. ,
,
.
, , . ,
.
:
2.1.
2.2.
2.3.
2.1
2.1
, .
.
, ,
n , ,
.. n2,
, .. n log n. , , .
,
,
. , ,
, IN =
{0, 1, 2, }.
T(n), ,
. , .
, N. , , .
2.1.1
f(n). , g(n),
(g(n))
g(n). , g(n),
(g(n))
(g(n)) = {f(n) : c1, c2, n0 , :
0 c1g(n) f(n) c2g(n) n n0} .
, f(n) -
35
K E A A I O 2 :
36
c g(n)
f(n)
c1g(n)
f(n)
f(n)
c g(n)
n0
f(n)=(g(n))
()
n0
n0
f(n)=O(g(n))
()
f(n)=(g(n))
()
2.1
2.1
, ,
n n0, 0 c1 n2 n2 + n + c2n2.
, n3 (n2). ,
c2 n0 n3 c2n2, n
n0, c2 n, ,
c2 , n .
,
f(n)
f(n). n ,
. , c1 , c2 , n. , () ,
, .
, d, p(n) =
d
i =0
, , (n0), (1). ,
(1) n. ,
(1) ,
.
2.1.2
.
, . g(n), (g(n))
(g(n)) = {f(n): c n0 , :
0 f(n) cg(n) n n0} .
g(n) f(n). 2.1.()
. n n0, f(n)
37
K E A A I O 2 :
38
c g(n). , (g(n))
, f(n) = O(g(n)) f(n)
O(g(n)).
, f(n) (g(n)), O(g(n)).
, (g(n)) O(g(n)). , f(n) = n2 + n + , > 0, (n2), , , f(n) = O(n2).
, f(n) = n + ,
> 0, c = + ||, n0 = 1, , n n0, f(n)
c n2. , , , O(n2).
, , . ,
:
for i 1 to n do
for j i to n do
<>
<> (1), , (n2), i j 1 n, i, <> n
( n i + 1 ).
, , , , , . , insertion sort O(n2) insertion sort
( ) O(n2). .
insertion sort (n2), insertion
sort , , (n2).
,
(n2). ,
,
n.
( , n) O(n2).
2.1
39
2.1.3
, . g(n), (g(n))
(g(n)) = {f(n): c n0 , :
0 cg(n) f(n) n n0} .
2.1.() .
, , .
2.1: f(n) g(n), f(n) = (g(n))
f(n) = O(g(n)) f(n) = (g(n)).
2.1
2.1.
2.1, n2 + n + = (n2),
, , , > 0, n2 + n + = (n2), n2 +
n + = (n2). , 2.1
,
.
,
,
, . , insertion sort (n) insertion sort (n), insertion sort
.
, insertion sort (n2),
(n2),
. , insertion sort (n2),
K E A A I O 2 :
40
. ,
insertion sort (n2),
insertion sort (n), (
, ) insertion sort
(n) (n2).
A 2.1
selection sort
linear search.
:
5.
selection sort (n3).
6.
selection sort (n2).
7.
selection sort (n2).
9.
linear search (n).
10.
linear search (n).
11.
linear search (n).
12.
linear search (n).
2.1
41
13.
linear search (n).
14.
linear search (1).
15.
linear search (1).
2.1.4
. , 2n2 = O(n2) ,
2n, = (n2), . ( )
. , g(n), (g(n))
(g(n)) = {f(n): c, n0 > 0 , :
0 f(n) < cg(n), n n0} .
.
, 0 f(n) c g(n) c > 0,
, 0 f(n) < c g(n) c > 0.
, f(n) g(n) , n .
, nlim
f (n )
= 0 .
g (n )
, . ( )
. , g(n), (g(n))
(g(n)) = {f(n): c, n0 > 0 , :
0 cg(n) < f(n), n n0} .
K E A A I O 2 :
42
f (n )
= , . , f(n)
g (n )
g(n), n .
, 2n2 = (n), 2n2 (n2).
2.2
, , f(n), g(n). () ().
1. n;
2. n;
3. n
n0;
4. n
n0;
().
().
().
().
2.1.6
, ..,
4n2 + 3n + 10 = O(n2), , .. 4n2 + 3n + 10,
O(n2). ,
, .. 4n2 + 3n + 10 = 4n2 + O(n), , , O(n).
, /
. , O(n)
2 . 2
43
3n + 10. ,
, .
: 2n2 + (n) = (n2).
, (n),
(n2) , .
, .. 4n2 + 3n + 10 = 4n2 + (n) = (n2).
A 2.2
(). :
22 n , log n, n , n n , log 2 n, n log n, 2 n! , 2 n , log log n, n! .
(). , (f, g),
f , , , , g. k 3 > 0
.
f(n)
g(n)
()
2n + k
2n + 2k nk
()
(log n ) 3
log(nlog( n ) )
()
kn
(3k)n/3
()
(kn)1
n1
()
n3 10n
8log n
2.2
, for
while,
.
, insertion sort for , n 1 , j j. , -
K E A A I O 2 :
44
insertion sort
n
j =2
j.
n -1
i =1
(n - i + 1) .
. , , , .
2.2.1
, . ,
n -1
i =1
(n - i + 1) ,
selection sort.
(n - i + 1) = n + (n - 1) + (n - 2 ) + L + 3 + 2 =
i =1
n -1
i - 1 .
i =1
2.3
n
i =1
(n - i + 1) =
n
i =1
i .
selection sort
n
i =
i =1
n(n + 1)
,
2
. n n(n + 1)/2.
, n = 1, 12/2 = 1.
n, n + 1. , , :
2 . 2
45
n +1
i = (n + 1) + i
i =1
i =1
i = n + 1,
.
n
i =
i =1
n(n + 1)
n.
2
2.2.2
.
,
.
.
Q(n) =
, Q(n) = (n2). ,
n
i =1
i 2 . -
i n/2, Q(n):
n
i n
2
i = n/2
n
i =1
i2
i = n/2
n
i =1
/ 4 = n 3 / 8 = W (n 3 )
n2 = n 3 . , Q(n) = (n3).
,
Q(n) , Q(n) = An3 + Bn2 + Cn + D.
,
n.
n = 1: A + B + C + D = 1
n = 2: 8A + 4B + 2C + D = 5
n = 3: 27A + 9B + 3C + D = 14
n = 4: 64A + 16B + 4C + D = 30
-
K E A A I O 2 :
46
i2 =
i = n/2
n 3 n2 n
2n 3 + 3n2 + n n(n + 1)( 2n + 1)
+ + +0=
=
.
3
2 6
6
6
Q(n), .
2.4
n
i =1
i2 =
n(n + 1)( 2n + 1)
.
6
2.5
1 i 2 = O (1) .
i =1
A 2.3
C (n ) =
n
i =1
i3 .
A 2.4
n
i =0
3i c 3 n , c 1.
c ; ,
3 a > 1 .
2.3
, . (divide and
2.3
conquer) . ,
, , .
,
.
,
. ,
. , (iteration method),
(substitution method) (Master Theorem).
2.3.1
, merge sort,
n . n , merge sort n/2 . merge sort ()
.
merge_sort(A, p, r)
{ A[p, ..., r]}
if p < r then
{ ,
}
q (p + r)/2;
{
}
merge_sort(A, p, q);
merge_sort(A, q + 1, r);
{ }
merge(A, p, q, r);
merge sort, merge(A, p, q, r),
47
K E A A I O 2 :
48
A , p q r
. merge
A[p, ,q] A[q + 1, , r]
A[p, , r].
2.6
merge(A, p, q, r)
.
( )
, (r p + 1).
,
merge_sort. A = [5, 2, 4, 6, 1, 3, 7, 6]. merge_sort .
. ,
, = [1, 2, 3, 4, 5, 6,
7, 8]. , 2.2, merge_sort, , , merge.
[5, 2, 4, 8, 1, 3, 7, 6]
[5, 2, 4, 8]
[5, 2]
[4, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 3, 7, 6]
[1, 3]
[7, 6]
[2, 4, 5, 8]
[2, 5]
[4, 8]
[1, 3, 6, 7]
[1, 3]
[6, 7]
2.2
merge sort.
(n)
merge_sort n, n > 1, . 2T(n/2), merge_sort n/2 , merge -
2.3
49
n . merge
(n), T(n) = 2T(n/2) + (n). n = 1, merge_sort . T(1) = (1).
, merge_sort
:
Q (1)
n = 1,
T (n ) =
2T (n / 2 ) + Q (n ) n > 1.
,
. .
2.7
x [1, ,
n] n . (binary search)
.
A[m], m = (n + 1) / 2, x. [m] = x,
m. , [m]
x, [m + 1,
, n], A[m] x, A[1, , m 1]. . .
,
. , 2.6 2.7 T(n)
n
T(n/2), n/2 . , merge sort :
Q (1)
T (n ) =
T ( n / 2 ) + T ( n / 2 ) + Q (n )
n = 1,
n > 1.
K E A A I O 2 :
50
. , ,
T(n) = (1), n,
T(n).
2.3.2
(iteration method) , , ,
. , ,
merge sort.
2
T (n ) =
2T (n / 2 ) + n
n = 2,
n = 2 k , k > 1.
n 2
n/2 . :
T (n ) = n + 2T (n / 2 )
2n
+ 22 T ( n / 4 )
2
2n 22 n
=n+
+
+ 2 4 T (n / 8 )
2
4
M
=n+
2n 22 n
2i -1 n
+
+ L + i -1 + 2i T (n / 2i )
2
4
2
i
i
= ni + 2 T (n / 2 )
=n+
i = (log n 1) ,
, n / 2(log n 1) = 2. , T(n) = n log n .
, . : /
,
.
2.3
51
.
n (..
T(n) = 2T(n/2) + n, n
2, n/2 ).
(recursion tree).
. T(n) =
2T(n/2) + n2.
2.3. i (
0) n2/ 2i. n , log n ( log n + 1 ).
log n
i =0
1
< 2 1/2,
2i
T(n) = (n2).
n2
n2
+
(n/2)2
(n/2)2
n2/2
log n
+
(n/4)2
(n/4)2
(n/4)2
(n/4)2
n2/4
2.3
T(n) = 2T(n/2) + n2.
...
...
: (n2)
2.8
,
T (n ) = 4T ( n / 2 ) + n
K E A A I O 2 :
52
A 2.5
.
1
T (n ) =
T (n / 2 ) + 1
n = 1,
n = 2 k , k 1 .
2.3.3
(substitution method)
, ,
. , . , .
, ,
. , .
, T(n) = 2T(n/2) + (n),
merge sort.
2
T ' (n ) =
2T ' (n / 2 ) + n
n = 2,
n = 2 k , k > 1 ,
2.3
53
n
n
T (n ) 2 c2 log + c2 n
2
2
c2 n(log n - 1) + c2 n
= c2 n log n ,
n
n
T (n ) 2 c1 log + c1n
2
2
c1n(log n - 1) + c1n
= c1n log n .
, ,
. , ,
. , , , . , :
T (n ) = T ( n / 2 + T ( n / 2 ) + 1
(n)
T(n) c n, c.
, T(n) c n + 1, T(n) c n,
c. , T(n) c n b, b ,
T (n ) ( c n / 2 - b ) + ( c n / 2 - b ) + 1
cn - 2 b + 1 cn - b .
, c ,
.
K E A A I O 2 :
54
A 2.6
. ,
T((1)) = (1).
1.
T(n) = T(n 1) + 3
2.
T(n) = T(n 1) + 2n
3.
T(n) = 2T(n / 2) + n
4.
T(n) = 2T(n / 3) + 1
5.
T(n) = T(n / 2) + n
2.3.4
(Master Theorem)
T(n) aT(n\b) + f(n) 1
b > 1 , f(n) .
, n / b, ,
f(n). , merge sort a = 2, b = 2, f(n) =
(n), a =1, b = 2, f(n) = (1).
:
(
( )
)
2. f(n) = Q (n
) , T(n) = Q (n log n) .
3. f(n) = W (n
) , > 0, n ,
1. f(n) = O nlog b a - e , > 0, T(n) = Q nlog b a .
log b a
log b a + e
log b a
2.3
55
T (n ) = Q nlog b a log n .
, f(n)
nlog b a af(n/b) cf(n),
. ,
f(n) .
, T(n) = 9T(n/3) + n.
nlog 3 9 = n2 f(n) = n. , , T(n) = (n2).
, T(n) = T(2n/3) + 1.
, f (n ) = Q (1) = nlog 3/ 2 1 = n0 . , , T(n) = (log n).
T(n) = 3T(n/4) + nlog n. , f(n) = n log n, nlog 4 3 = O (n0,793 ) , 3 f(n/4) = 3 (n/4)
log(n/4) 3/4 n log n 3/4 f(n) n. ,
T(n) = (n log n).
, T(n) = 2T(n/2) + nlog n.
, nlog 2 2 = n f(n) = n log
n, . ,
2, 3.
2.10
T(n) = 2T(n/2) + nlog n
K E A A I O 2 :
56
A 2.7
.
1. T(n) = 6T(n/5) + nlog6 n
2. T(n) = 5T(n/6) + n
3. T (n ) = 3T (n / 9 ) + n
4. T(n) = T(n 1) + n2
5. T(n) = T(n/5) + T(7n/10) + 3n
6. T(n) = T(5n/9) + T(4n/9) + n
,
, , , ,
.
.
, , .
,
. .
. , ,
. ,
.
, , .
.
B I B I O PA I A
.
, :
[1] C.L. Liu. Introduction to Combinatorial Mathematics. McGraw Hill, 1968.
,
, ,
.
57
.
, ,
.
:
.
, .
.
Fourier
FFT
, ,
(divide and
conquer).
,
(.. , , , Fourier).
KEAAIO 3:
60
, ,
.
, , . ,
. , , , , .
, . , merge sort,
, ,
( ) .
merge sort.
, .
. , ,
. ,
.
:
3.1. Quicksort
3.2.
3.3.
3.4. FFT
3.1 QUICKSORT
3.1 Quicksort
n ( merge sort). ,
merge sort (n
log n). ,
(n log n), merge sort ().
, quicksort, C.A.R. Hoare 1962 , , . quicksort
(n2), ,
O(n log n).
, quicksort [p, , r] .
. A[p, , r] A[p, , q] [q + 1, , r], A[p,
, q] A[q + 1, , r].
q .
. A[p, , q] A[q + 1, , r]
quicksort.
.
A[p, , q] A[q + 1, ,
r], A[p, , q] [q + 1, , r] , A[p, , r]
.
quicksort.
n A[1, , n], quicksort(A, 1, n).
quicksort(A, p, r)
if p < r then
q partition(A, p, r);
quicksort(A, p, q);
quicksort(A, q + 1, r);
quicksort
partition, [p,
, r].
61
KEAAIO 3:
62
partition(A, p, r)
x A[p]; i p 1; j r + 1;
while TRUE do
repeat j j 1
until A[j] x;
repeat i i + 1
until A[i] x;
if i < j then swap(A[i], A[j])
{ swap A[i] A[j]}
else return j;
partition A[p, , r]
x = A[p]. partition A[p, , i] [j,
, r], , ,
A[p, , i] x,
A[j, , r] x. , i = p 1 j = r + 1,
, . repeat
A[j,
, r], j A[j] x. repeat
A[p, , i], i A[i] x.
, A[i]
, A[j]
. , A[i] A[j]
.
A[p, , i] A[j, , r] , i j,
, j.
3.1
partition = [5, 3, 2, 6, 4, 1, 3, 7]. B = [13, 19, 9, 5, 12, 8,
7, 4, 11, 2, 6, 21].
3.1 QUICKSORT
63
3.2
partition (n), n = r p
+ 1 .
(n) quicksort n
(n), partition,
.
q, . , T(n) =
T(q) + T(n q) + (n), T(1) = (1).
, . quicksort ,
, (n) , ,
. ,
,
. , , .
, quicksort , , partition
n 1 1. , T(n) = T(n 1) + (n).
(. 2.6, 2) T(n) = (n2).
, , , partition n/2. ,
quicksort T(n) = 2T(n/2) + (n), (n) = (n log n). , quicksort
O(n2) (n log n).
3.3
quicksort (n log n), (n2).
KEAAIO 3:
64
3.1.1
quicksort, (n2),
, partition .
quicksort ,
partition,
quicksort. , quicksort partition
.
r_partition(A, p, r)
i [p, r),
1/(r p) .
swap(A[i], A[p]);
return partition(A, p, r);
3.1 QUICKSORT
65
, quicksort, , (deterministic
algorithms), , quicksort,
, (randomized algorithms).
.
,
. ,
.
,
, , . , , ,
(, , ).
quicksort, n = r
p + 1 [p, , r]. partition,
x
, [i] (p i < r) 1/(n
1) . , q (q = p, , r 1)
[p, , r], A[iq], , , A[p, ,
q] A[q + 1, , r].
S(n) quicksort
r_partition n . S(n)
(n), r_partition
. q, q = p, , r 1, 1/(n 1), :
1
S (n ) = Q (n ) +
n -1
n -1
(
i =1
2
S (i ) + S (n - i ) = Q (n ) +
n -1
n -1
S (i ) .
i =1
KEAAIO 3:
66
. c > 0
, r_partition n cn. , , n 1, S(n) 8cn log n .
S(1) = 0 c S(2)
16c. , S(n) 8cn log n , :
16 c
S (n ) cn +
n -1
cn +
n -1
i log i
i =1
n -1
2
8
8 cn log n ,
n 3,
n -1
i log i
i =1
n -1
i =1
i log i .
n -1
n / 2 -1
i =1
i =1
n -1
(log n - 1)
= log n
n / 2 -1
n -1
i =1
i = n/2
i + log n i
n -1
n / 2 -1
i =1
i =1
i - i
,
, quicksort
(nlog n). , ,
n , quicksort
2n ln n + O(n) .
3.1 QUICKSORT
67
, quicksort
, n .
A 3.1
,
quicksort insertion sort . quicksort
insertion sort , quicksort k , . quicksort, , insertion sort . quicksort, O(nk + n log(n/k)).
k .
3.1.2
n , ,
. , , , (n log n) . ,
(n log n).
(comparison
tree) . 3.1
insertion sort 3 .
KEAAIO 3:
68
a1a2
N
a2a3
N
3.1
insertion sort
3 .
a1a3
a1a3
a1, a2, a3
N
a1, a3, a2
a2a3
a2, a1, a3
a3, a1, a2
a2, a3, a1
a3, a2, a1
n n!
/ ,
, ,
. ,
,
.
, , / ,
.
h 2h . , h , 2h n!. , :
h log(n!)
n
log i
i =1
n
log i
i = n/2
n
log(n / 2)
i = n/2
= W (n log n ) .
,
(
3.2
69
), (n log n) . ,
(n log n).
A 3.2
n/k k .
. , ,
. .
3.2
(selection) , /
n k, 1 k n,
(rank) k. , .
k = 1, , k =
n, k = n/2, (median) .
O(n log n) k
. ,
.
,
(n).
3.5
. .
o(n);
KEAAIO 3:
70
quicksort. [p, , q] [q + 1, , r], k q, k [p, , r]
k [p, , q]. , k > q,
k [p, , r] (k (q + 1 p))
A[q + 1, , r]. , , .
r_quickselect(A, p, r, k)
if p = r then return A[p];
q r_partition(A, p, r);
m q + 1 p;
if k m then
return r_quickselect(A, p, q, k);
else
return r_quickselect(A, q + 1, r, k m);
, ,
k ,
n 1 (n = r p + 1). , (n2) . , .
.
, r_quickselect
. S(n)
r_quickselect k n . S(n)
(n), r_partition,
r_quickselect.
q ( ), k
. , . , :
3.2
71
1
S (n ) = Q (n ) +
n -1
n -1
S (max{i, n - i})
i =1
n -1
2
Q (n ) +
S (i ) .
n - 1 i = n/2
c > 0 , r_partition
cn. , S(n) 4cn.
S(1) = (1), c,
n, .. S(1) 4c, S(2) 8c, . ,
, :
S (n ) cn +
n -1
2
4 ci
n - 1 i = n/2
= cn +
n -1
n / 2 -1
8c
i
i
n - 1 i =1
i =1
= cn +
8 c n(n - 1) n(n - 2 )
n -1 2
8
8 c n(3n - 2 )
n -1
8
cn + 3 cn = 4 cn .
cn +
, r_quickselect
.
3.2.1
, , ,
.
quickselect r_quickselect, .
quickselect,
A[i].
quickselect(A, p, r, k)
if p = r then return A[p];
A[i]
KEAAIO 3:
72
3.2
73
3.6
1/c + 1/d < 1, T(n) = (n) +
T(n/c) + T(n/d) T(n) = (n). 1/c + 1/d = 1;
(. 2.8, 5 6).
.
, (.. ). , n/c
, , ,
(1 1/2c).
n / 5 , 5 ( n mod 5 ), . n / 5
. ,
, (n). 3.1.
7
[2, 1, 4, 6, 5, 3] [9, 7, 15, 10, 11, 13, 8, 12, 14].
3.1
15
10
11
13
12
14
[9, 7, 15, 2, 1]
[10, 4, 11, 6, 5]
12
,
7n/10. ,
n / 5 5 .
n / 5 (
) . ,
3 . ,
KEAAIO 3:
74
. ,
(n/10) 3 .
1
n/10 1, 2, 3 ( 3n/10 ) . , . ,
n/10 n / 5 3, 4 5 ( 3n/10 )
, , . , 7n/10 .
3.1 3.2.
, 3.2,
, ,
x.
.
3.2
5
.
4
5
6
10
11
3.2
3n/10.
1
2
7
9
15
...
...
...
...
...
3
8
12
13
14
...
...
...
...
...
3.2
75
3.8
quicksort
O(n log n).
A 3.3
n .
, O(log n) ,
(n ) . , 2n .
A 3.4
n x1, x2, , xn
w1, w2, , wn
n
i =1
wi = 1 .
(weighted median) xk :
w 2 , w 2
1
xi < xk
xi > xk
x1, , xn . :
x1, , xn , wi = 1/n, i = 1, 2, , n.
O(n log n)
x1, , xn .
KEAAIO 3:
76
3.3
, . , ,
.
, , , . ,
, .
x y,
n . (n)
.
n x y,
(n2) , n n . , a la russe (n2) ,
, . (n) n .
.
.
n x= xnxn 1x2x1, y=ynyn 1y2y1, xi, yi {0, 1}. x
x = XL + 2n/2 XH, XH=xnxn1xn/2 + 2xn/2 + 1
n/2 XL=xn/2xn/21x2x1
n/2 . , y = YL + 2n/2YH. xy
3.3
, n n
C = A B. :
n
Cij =
A B
ik
kj
, i = 1,..., n, j = 1,..., n .
k =1
C (n)
77
KEAAIO 3:
78
, C n2 , (n3).
1960, V. Strassen
O(nlog 7) = O(n2.81). ,
.
n . , C n/2 n/2 :
A
A = 11
A21
B11
A12
, B=
A22
B21
C11 C12
B12
, kai C =
,
B22
C21 C22
3.4 FFT
79
, C
:
C11 = M 2 + M 3
C12 = M1 + M 2 + M 5 + M 6
C21 = M1 + M 2 + M 4 - M 7
C22 = M1 + M 2 + M 4 + M 5
Strassen
n/2 n/2.
, n/2 n/2, (n2). T(n)
T(n) = 7T(n/2) + (n2),
, T(n) = (nlog 7) = (n2.81).
Strassen
n. O(n2.376), (n2),
n2 .
3.4 FFT
, , .
A( x ) =
n -1
i =0
ai x i B( x ) =
n -1
i =0
bi x i (n 1).
A(x) B(x) (n 1) (n 1) C ( x ) =
n -1
i =0
ci x i , ci = i + bi.
2 n-2
i =0
ci x i , ci =
i
j =0
a j bi - j .
x0 x x0,
.
A=[0, 1, , n1]. -
KEAAIO 3:
80
A 3.5
,
(nlog3),
(n 1). n 2 .
(n 1)
n (x0,y0),(x1,y1), , (xn1,yn1), yi = A(xi) xi
. n
(n 1), ,
n xi .
(point value representation).
(x) (n 1) (x0,y0),(x1,y1), ,
(xn1,yn1) B(x) (n 1) (x0,y0),(x1,y1),
, (xn1,yn1), A(x) + B(x) (x0,y0 + y0),(x1,y1
+ y1), , (xn1,yn1 + yn1), (n) .
,
. ,
A(x), B(x) (n 1) (2n 1) ( (x0,y0), , (x2n2, y2n2) (x0,y0), , (x2n2, y2n2) ), A(x)B(x) (x0, y0y0), , (x2n2,y2n2y2n2),
3.4 FFT
81
(n) .
, .
, ,
.
,
n (n point evaluation problem). n , , Horner
(n2). , , xi ,
(n log n).
n (n point interpolation problem). ,
n (n log n).
(n log n)
n , ,
, (n log n) . 3.3.
0,1...,n1
(n2)
c0,c1...,cn1
b0,b1...,bn1
Y
(2n1)
(n log n)
(2n1)
(n log n)
3.3
A(zi),B(zi),
0 i 2n2
(n)
C(zi)=A(zi)B(zi),
A
0 i 2n2
-
(n log n) , 2n , -
(n log n).
KEAAIO 3:
82
, , 2n ,
.
3.4.1 Fourier (DFT) FFT
,
n . (x) (n 1), n 2. A(x)
A(x) = A[0] (x2) + xA[1](x2),
A[0](x) = 0 + 2x + 4x2 + + n2xn/2 1 A[1](x) = 1 + 3x + 5x2 + + n1xn/2 1.
n A(x) :
1, 1, 2, 2, , n/2, n/2. A(x), A[0](x) A[1](x) .
1 1, 2 2, ., , n/2 . , n
n/2 ,
. , (n) .
T(n) T(n) = 2T(n/2) + (n),
T(n) = (n log n).
,
,
.
28
38
18
48
08
1
1
3.4
n = 8.
58
68 i
78
3.4 FFT
83
n , , n =
1. n n ,
e2ik/n, k = 0, 1, , n 1, e = 2,71 , = 3,14, i2 = 1. ,
:
eiu = cos(u) + i sin(u) .
3.4. n .
n = e2i/n n n n. n
,
n n .
, j k = j + k = (j + k) mod n.
, n 2, n
(n/2) . , :
{(w n0 )2 ,(w 1n )2 ,K,(w nn -1 )2 } = {w n0 / 2 ,K, w nn//22 -1 } .
, , 0 k n/2
k 2
2 pik / n 2
) = e 2 pik /( n / 2 ) = w nk / 2 .
1, (w n ) = (e
,
(w nk + n / 2 )2 = w n2 k + n = w n2 k w nn = w n2 k = e 2 pi ( 2 k )/ n = e 2 pik /( n / 2 ) = w nk / 2 .
Fourier
Fourier (Discrete Fourier Transform DFT)
A=[0, 1, , n 1] n Y=[y0, y1, , yn 1]
n, , k = 0, 1, , n 1, y k =
n -1
j =0
a jw nkj . ,
A A( x ) =
n -1
i =0
ai x i , yk Y
(x) w nk , k n .
KEAAIO 3:
84
Fourier
DFT (n log n) , Fourier (Fast Fourier Transform FFT),
. O FFT ,
A(x), A=[0, 1, , n 1] n .
FFT , ,
(n 1), n
2, [0](x) A[1](x) (n/2 1).
A(x) n , [0](x)
A[1](x) n , (n/2)
, A(x)= A[0] (x2) + xA[1] (x2).
FFT(A=[0, 1, , n 1]) { n 2}
if n = 1 then return 0;
n e2i/k ; 1;
A[0]=[0, 2, , n 2] ; A[1]= [1, 3, , n 1]
Y[0] FFT(A[0]); Y[1] FFT(A[1]);
for k 0 to (n/2 1) do
y k y[k0] + wy[k1];
y k + n /2 y[k0] - wy[k1];
w ww n;
3.4 FFT
85
, y k = A(w nk ) =
n -1
j =0
a jw nkj ,
k = 0, 1, , n 1. , n
n Y = V A, V n n V [ k , j] = w nkj .
,
y0
y1
y2
y3
M
y n -1
1 1
1
1
2
wn
w n3
1 w n
1 w n2
w n4
w n6
3
w n6
w n9
1 w n
M
M
M
M
3( n -1)
2 ( n -1)
n -1
wn
wn
1 w n
K
1
n -1
K
wn
K w n2 ( n -1)
K w n3( n -1)
O
M
K w n( n -1)( n -1)
a0
a1
a2
a3
M
an -1
, V 1 V. V 1
V -1[ k , j] = w n- kj / n , 0 k n 1 0 j n 1 .
,
V V 1 . [k, j] V
V 1 :
(VV -1 )[ k , j] =
n -1
1
w nkmw n- jm
n m=0
n -1
1
w nm( k - j )
n m=0
1
(w nk - j )m
n m=0
n -1
m=0
(w nq )m =
(w nq ) n - 1 (w nn ) q - 1 (1) q - 1
=
= q
= 0,
w nq - 1
w nq - 1
wn -1
n
. , k j, (VV1)[k, j]=0 V 1 V -1[ k , j] = w n- kj / n V.
KEAAIO 3:
86
, A(x)
ak = (1 / n )
n -1
j =0
y jw n- kj , 0 k n 1,
yk .
, Y
, n n 1
n, FFT
n
.
, FFT,
(n 1)
(n log n), .
A 3.6
A(x) = 3 x B(x) = 2 + 3x .
C(x) = A(x)B(x) 3.3 FFT .
YNOH
.
, quicksort .
quicksort x
, x
x.
quicksort (n log n) (n2),
quicksort (n log n).
, ,
, (
) (n log n) n .
, .
. .
, . , . FFT, Fourier (n log n).
87
KEAAIO 3:
88
:
[1] G. Brassard P. Bratley. Algorithmics: Theory and Practice. Prentice Hall,
1988.
:
[2] T.H. Cormen, C.E. Leiserson, R. L. Rivest. Introduction to Algorithms. MIT
Press, 1990.
[3] A.V. Aho, J.E. Hopcroft, J.D. Ullman. Data Structures and Algorithms.
Addison Wesley, 1988.
[4] K. Mehlhorn. Data Structures and Algorithms. Springer Verlag, 1984.
quicksort, FFT :
[5] C.A.R. Hoare. Quicksort. Computer Journal, 5(1):10 15, 1962.
[6] M. Blum, R.W. Floyd, V. Pratt, R.L. Rivest, R.E. Tarjan. Time bounds for
selection. Journal of Computer and System Sciences, 7(4):448 461, 1973.
[7] C.A.R. Hoare. Algorithm 63 (partition) and algorithm 65 (find). Communications
of the ACM, 4(7):321 322, 1961.
[8] J.W. Cooley and J.W. Tukey. An algorithm for the machine calculation of complex
Fourier series. Mathematics of Computation, 19(90):297 301, 1965.
.
.
:
.
.
.
(dynamic programming),
,
, .
, / , .
K E A A I O 4 :
90
,
,
. , .
(overlapping subproblems). ,
, . ,
,
. / , .
, ,
(optimization problems). , .
( ) .
(optimal substructures).
, , :
.
.
,
(bottom up ).
. , .
:
4.1.
4.2.
4.3.
4.1
4.1
(. 3.3). A p q B q r, pqr .
1, 2, , An, i di1 di,i = 2, , n, = 12n. (,
123 = (12)3 = 1(23)), , . , :
A=(((A1A2)A3)An) A=(A1(A2(A3(An1An))))
A=((A1A2)(A3A4)(An1An)) .
, .
, .
, 1 2 3 4,
1 13 5, 2 5 89, 3 89 3 4 3
34. . ,
.
,
.
,
.
91
K E A A I O 4 :
92
(((12)3)4)
13 5 89 + 13 89 3 +
13 3 34 =
10.582
((12)(34))
54.201
((1(23))4)
2.856
(1((23)4))
4.055
(1(2(34)))
26.418
(matrix chain
multiplication) , n (1, 2, , n),
Ai di1 di, i = 2, , n, 12n
. , ,
,
.
( )
.
, . ,
(
), (
), (objective value).
(optimal solution), (
) . (optimization problems). ,
. ( ) . , ,
,
. .
4.1
. P(n)
n. ( ) i i +
1, i = 1, 2, , n 1, , , , :
P (n ) =
n -1
P (i )P (n - i ) ,
i =1
4n
1 2n
= W 3/ 2
n +1 n
n .
,
.
.
, . i..j iAj. i i + 1, 1 i < n, 1..i i +
1..n 1n. 1n d0 di
dn 1i i + 1n
. , 1n , 1i i + 1n . ,
1i i + 1n,
1n.
,
1, 2, 3, 4, 13 5, 5 89, 89 3 3 34.
3, 13 , , 13 4. 13 4
1.326 , 13. 12 3 9.256 -
93
94
K E A A I O 4 :
, 123 1.530 .
(123)4 10.582
.
1.3, , (1 23)4
2.856 .
/
. (optimal substructure) (principle of optimality) .
,
,
. m[i, j] ij. , 1 i n, m[i, i] =
0, ii = Ai .
i..j Aik Ak + 1j, i k < j, i..kAk + 1j. ,
m[i,j] = m[j,k] + m[k + 1, j] + di1dkdj .
k Ai, , Aj, j i k (k = i, i + 1, ,
j 1), m[i, j] k . , m[i,
j] ij :
0
i = j
m[i, j] =
min{m[i, k ] + m[ k + 1, j] + di -1d k d j } i < j
i k < j
m[1, n], 1n.
m[1, n] m[i, j],
n(n +1)
,
2
.
1 i < j n.
m[1, n] -
4.1
95
. . ,
, .
:
MATRIX
CHAIN
MULT(d[0,...,n])
d
for i 1 to n do
m[i, i] 0;
for p 2 to n do
for i 1 to n p + 1 do
j i + p 1;
m[i, j] ;
for k i to j 1 do
q m[i, k] + m[k + 1, j] + d[i 1]d[k]d[j];
if q < m[i, j] then m[i, j] q;
return m[1, n];
for ,
p, m[i, j] 1 i < j n
p 1 (j i = p 1). k
i j 1, m[i, k] m[k
+ 1, j] .
n(n +1)
,
2
(n). , for i
(n3). , (n2) ,
m[i, j], 1 i < j n.
4.1
MATRIX CHAIN MULT d = [30, 35, 15, 5, 10, 20, 25].
K E A A I O 4 :
96
4.2
( )
m[1, n] m[i, j].
;
A 4.1
MATRIX CHAIN MULT m[1, n]
1..n.
, A1..n, m[1,
n] .
4.2
. ,
, . , .
, , .
, ,
,
(nd), d > 0. ,
, ,
, ,
(overlapping subproblems).
, , . ,
, ,
.
4 . 2
97
. 4.1 i
j 4.2 n = 4.
.
,
.
1...4
1...1
2...4
2...2
3...4
2...3
3...3
4...4
2...2
1...2
4...4
1...1
2...2
3...4
3...3
3...3
1...3
4...4
1...1
2...3
1...2
3...3
2...2
3...3
1...1
2...2
, (top down ).
,
. , ,
. ,
. ,
, ,
, . memoization.
.
MEMOIZED_MATRIX_CHAIN(d[0,...,n])
for i 1 to n do
for j 1 to n do
m[i,j] ;
return
LOOKUP_CHAIN(d[0,...,n],
1, n);
4...4
4.1
m[1, 4].
K E A A I O 4 :
98
LOOKUP_CHAIN(d[i
1,...,j], i, j)
(longest common
subsequence) .
,
. , = <x1, x2, , xn>, Z = <z1, z2, , zk>
(subsequence) ,
4 . 3
99
K E A A I O 4 :
100
,
(, ) (Xn 1, Ym 1),
(n 1, Y) (X, Ym 1).
, = <, , , , > = <, , , >.
. ,
,
(4 = <, , , >, ) (, 3 = <, ,
>.) , ,
<, , , , > <, , >
, <, , , > <, >. <, , , > <, > < > (), <>, <> <,
>. , < >, <> <>, . <, >,
(<, , , >, <, >), <, , >, <, , , , > <, , >. <, , >
.
x .
c[i, j] Xi Yj.
, Xi,Yj ,
c[i, j] = 0. , c[i, j], i = 1, 2, , n, j = 1, 2, , m, :
0
i = 0 j = 0
i, j > 0 xi = y j
c[i, j] = c[i - 1, j - 1] + 1
max{ c[i, j - 1], c[i - 1, j]} i, j > 0 x y
i
j
4.3
; .
, xi yj, c[i, j]
c[i, j 1] c[i 1, j]. , xi yj 1 xi 1 yj, c[i, j 1] c[i 1, j] c[i 1, j 1].
4 . 3
101
LENGTH(X,
Y)
n length(X); m length(Y);
for i 1 to n do c[i, 0] 0;
for j 1 to m do c[0, j] 0;
for i 1 to n do
for j 1 to m do
if xi = yi then
c[i, j] c[i 1, j 1] + 1;
else
if c[i 1, j] c[i, j 1] then
c[i, j] = c[i 1, j];
else
c[i, j] = c[i, j 1];
return c[n, m];
4.4
LCS LENGTH =
<, , , , , , > = <, , , , , ,>.
LCS LENGTH , n m, .
LCS LENGTH (nm), c[1 n, 1 m]
nm , , (1) .
, LCS LENGTH
(nm), nm c[1 n, 1 m]. , LCS LENGTH c[i, j]
(i = 1, 2, , n), c[i, j]
(c[i, j 1]), (c[i 1, j] c[i 1, j 1]). , c[n, m],
K E A A I O 4 :
102
i, i i 1.
, c n m,
LCS LENGTH 2min{n, m} + O(1).
LCS LENGTH min{n, m} + O(1), , i, c
. c[i, j] c[i 1, j 1], c[i 1, j] c[i, j 1].
c[i, j], c[i 1, j 1] ,
c[i, j 1] . c[i, j]
( c[i, j 1])
c[i + 1, j], c[i 1, j].
,
,
. ,
, .
, .
4.5
, c, (n + m) x .
A 4.2
= <x1, , xn>, = <y1, , ym> Z = <z1, , zp>.
, W,
, Z. top down / memoized .
;
YNOH
103
A 4.3
[1n] [1m] .
.
: ( d),
( b) ( h). . ;
.
, .
.
.
,
.
.
.
bottom up
,
.
, top down ,
.
, ,
.
memoized , top
down , .
K E A A I O 4 :
104
:
, ,
.
, ,
,
.
:
[1] T.H. Cormen, C.E. Leiserson R. L. Rivest. Introduction to Algorithms. MIT
Press, 1990.
:
[2] R. Bellman. Dynamic Programming. Princeton University Press, 1957.
.
, .
:
.
.
.
Huffman
, .
, .
(greedy algorithm) ,
, . ,
, .
KEAAIO 5:
106
,
.
(greedy choice property)
(optimal substructure).
,
.
,
(.. , ). .
:
5.1.
5.2.
5.3. Huffman
5 . 1
5.1
/ ,
.
, (activity
selection problem) = {1, 2, , n},
i si fi, fi si 0.
(.. , ) . , . i si, fi, ,
[ si, fi). i j (compatible)
[ si, fi) [ sj, fj) , si fj sj fi.
, , , ,
.
, /
. C , . , A / C C . C A / C
C.
, ,
. ,
(fi si),
( si),
, fi. -
107
KEAAIO 5:
108
.
,
, f1 f2 fn, C . .
GREEDY SELECTION(A = [(s1, f1),...,(sn, fn)])
{ f1 f2 ... fn }
C {1}; j 1;
for i 2 to n do
if si fj then C C {i}; j i;
return C;
GREEDY SELECTION j C, C . , A / C i, i > j, C, si fj. A , i fi
C.
GREEDY SELECTION (n) fi. ,
(n log n) .
, GREEDY SELECTION
.
i
10
11
si
12
fi
10
11
12
13
14
1, 2 3. , 4 (s4 = 5 > f1 =
4), 8 (s8 = 8 > f4 = 7) 11 (s11 = 12 > f8 = 11). 4 5, 6 7, 8 9 10, 11 10.
5 . 1
109
, 5.1.
5.1
11
X
10
11
12
13
14
Greedy election.
{1, 4, 8, 11}
,
. {2, 4, 8, 11}. 2
1 , f1 f2. 9 8, 2 1,
{2, 4, 9, 11} {1, 4, 8, 11}
GREEDY SELECTION.
5.1
,
A / C
.
5.1.1
, ( 5.1)
. , . ,
,
, , .
, GREEDY SELECTION,
, .
KEAAIO 5:
110
, 1
. ,
1,
.
C* A 1 C*. ,
k C* , fk = min iC* {fi}. 1 C* / {k}, f1
fk , i C* \ {k}, si fk. , C = (C*
\ {k}) {1} ,
C*.
C* 1. C* / {1}
1 1, 1 = {i A: si f1}. , C1* 1 C* / {1}, C1* {1}
,
C*. C*
.
, , , .
,
Greedy Selection
.
5 . 1
111
. ,
( ). , ,
, ( ).
.
. , C* C . C*, C (..
). C*, C (i 1) ,
i , 1 i |C|, x i
C* y i C.
, C i , x C. (C* \ {x}) {y}
, y x C*.
, y x,
fx fy , j > i, j C* sj fy
fx. , C* C,
C.
5.2
. , f1 f2 fn.
KEAAIO 5:
112
A 5.1
n , i, 1 i n,
si 0 fi 0.
(.. ,
).
.
5.2
,
. , , , ,
. , ,
.
5.2.1
5 . 2
. ,
bottom up , top down , , , ,
.
,
. , 5.1, . ,
.
5.2.2
(optimal substructure property) .
,
,
.
, 5.1, C*
1 f1, C* \ {1} A1 = {i A:
si f1} 1.
5.2.3
,
( 5.2),
. ,
.
113
KEAAIO 5:
114
,
(knapsack problem). , n , si > 0 pi > 0,
i = 1, 2, , n, , (
0 1 (0 1
i A
si B ).
knapsack problem), .
(fractional knapsack problem),
, fi, 0 fi 1, i, 1 i n. ,
p( A) =
s(A) B.
n
i =1
f i pi , s( A) =
n
i =1
f i si ,
A0*-1 0 1 ,
j A0*-1 , 1 j n,
. j,
A0*-1 /{ j} B sj n 1
j.
*
, Af ,
fj j, 1 j n, *
Af . fjsj j,
5 . 2
115
i. , , i, 1 i n,
ri = pi / si, ri, r1 r2
rn. , . , j, j = 1, ,
n, sj j
. , . , (n log n)
ri, (n)
. , (n log n).
5.3
. ;
, 0 1
, , . , 50 10, 20 30, 60, 100 120, .
r1 = 6, r2 = 5 r3 = 4.
(f1 = f2
= 1) 2/3 (f3 = 2/3).
, ( 50) 240.
0 1 ,
(
30, 160),
( 50, 220). 0 1 , , 1 2 30
1 3 40. ,
2 3, , .
KEAAIO 5:
116
, 0 1 i ,
i i
. .
A 5.2
, = {x1, x2, , xn} ,
,
.
5.3 Huffman
(data compression)
. , (encoding
problem) (.. )
L, n C, c
C, f(c), 0 < f(c) < 1.
(binary code) c d(c)
cC
f ( c )d ( c ) ,
, L, . c (code word) c.
(fixed length codes), n
log n , (variable
5.3 HUFFMAN
117
,
c,
c, .
, , . , ,
.
, , . , ,
.
, 100.000
, , , , , 0,45,
0,13, 0,12, 0,16, 0,09, 0,05 .
, .
5.1
0,45
0,13
0,12
0,16
0,09
0,05
000
001
010
011
100
101
101
100
111
1101
1100
3 ,
300.000 .
, 25% , 1.000 (451 + 133 + 123 + 163 + 94 + 54)
= 224.000 . ,
.
,
.
, 0,
1. 5.2
5.1.
KEAAIO 5:
118
1,00
0
0,86
0
0,14
1
0,58
0
:0,45
0
0,28
0,14
:0,13
:0,12
:0,16
:0,09
:0,05
1,00
0
:0,45
0,55
0
0,25
0
5.2
:0,12
5.1.
0,30
1
:0,13
0,14
0
:0,05
:0,16
1
:0,09
(). , . 5.2,
, 11. ,
.
5.4
,
.
5.3 HUFFMAN
cC
f ( c )dT ( c ) . () .
5.3.1 Huffman
119
KEAAIO 5:
120
(1)
:0,05
:0,09
(2)
:0,12
:0,13
:0,12
:0,13
0,14
0,14
0
0
:0,12
:0,13
0,30
1
:0,45
0,14
:0,13
:0,16
1
:0,05
:0,45
:0,09
0,55
0
0,25
0
:0,12
0,30
1
:0,16
0,14
:0,13
0
:0,05
(6)
:0,45
1
:0,12
:0,05
(5)
:0,45
0,25
:0,16
0,25
(4)
:0,16
:0,05
:0,09
:0,45
:0,09
(3)
:0,16
1,00
:0,09
1
0,55
:0,45
0
0,25
5.3
Huffman.
0
:0,12
0,30
1
0,14
:0,13
0
:0,05
:0,16
1
:0,09
5.3 HUFFMAN
HUFFMAN(C)
Q CREATEPRIORITYQUEUE(C);
for i 1 to |C| 1 do
z CREATENODE();
x left(z) MIN(Q); DELETEMIN(Q);
y right(z) MIN(Q); DELETEMIN(Q);
f(z) f(x) + f(y);
INSERT(Q, z);
return MIN(Q);
5.3 Huffman 5.1. / . , 1,00,
.
, Huffman
,
( 5.1) ( 5.2).
5.1:
C x, y C
.
C, , x y
,
x y .
C, b, c . , f(b) f(c) f(x) f(y).
, x y , f(x) f(b) f(y) f(c).
5.3, x b
1 , , y c 2.
T T1 :
121
KEAAIO 5:
122
B(T ) - B(T1 ) =
f ( c )d ( c ) - f ( c )d
T1 ( c )
cC
cC
5.1 .
. ,
.
5.5
()
,
.
5.3 HUFFMAN
5.2:
C. , x, y
C , z x y. z
f(z) = f(x) + f(y),
= {x, y} C = C {x, y} {z}.
, .
c C {x, y}, dT(c) = dT(c) f(c)dT(c) =
f(c)dT(c). , ()
() x y
z. z x
y , dT(x) = dT(y) = dT(z) + 1. ,
B(T ) - B(T ' ) = f ( x )dT ( x ) + f ( y )dT ( y ) - f ( z )dT ' ( z )
= ( dT ' ( z ) + 1)( f ( x ) + f ( y )) - dT ' ( z )( f ( x ) + f ( y ))
= f ( x ) + f ( y ).
C = C {x, y} {z}. ,
() < () C. z
, . z,
x y, B(T) + f(x)
+ f(y) < () + f(x) + f(y) = B(), C . ,
C. ,
C = C {x, y} {z}.
123
KEAAIO 5:
124
5.6
,
, .
A 5.3
, ,
,
.
.
.
. , .
,
, , .
,
. .
, , . 0 1
, ,
.
Huffman C.
B I B I O PA I A
:
[1] T.H. Cormen, C.E. Leiserson R. L. Rivest. Introduction to Algorithms. MIT
Press, 1990.
[2] G. Brassard P. Bratley. Algorithmics: Theory and Practice. Prentice Hall,
1988.
:
[3] F. Gavril. Algorithms for minimum coloring, maximum clique, minimum covering
by cliques, and maximum independent set of a chordal graph. SIAM Journal on
Computing, 1(2):180 187, 1972.
Huffman :
[4] D.A. Huffman. A method for the construction of minimum redundancy codes.
Proceedings of the IRE, 40(9):1098 1101, 1952.
125
.
. , , .
:
.
.
.
.
,
/ . . , -
K E A A I O 6 :
128
,
.
, , .
.
.
,
. . ,
.
, ,
,
.
.
.
,
. ,
.
,
(Breadth First Search) (Depth First
Search) ,
.
:
6.1.
6.2.
6.3.
6 . 1
129
6.1
G = (V, E) , G(V, E)
(vertices, nodes) V
(edges) .
, (directed graph,
digraph) ,
(undirected graph).
V V (E V V). , v, w
, (v, w) (w, v).
,
( 6.1()).
. ,
{v, w} {w, v}, ( 6.1.()). ,
v w (v, w).
1
()
()
1
5
6.1
()
(v, w)
v w. {v, w}
v w.
K E A A I O 6 :
130
{v, w}
. (v, w),
w v. , ,
w v, v w. ,
.
G(V, E)
w : E R. , (weighted graph) , , G(V, E, w).
, .
v
v. , 6.1.(), 2
2, 5 1.
v, v, v,
v. , 6.1.(), 3 3, 1.
6.1
G(V, E) . . , deg(v) v,
v V
deg( v ) = 2 | E | .
(path) k v v
G(V, E) <v0, v1, , vk 1, vk> , v = v0, v = vk,
(vi 1, vi) E, i = 1, , k. v0, v1, , vk,
(v0, v1), (v1, v2), , (vk 1, vk). G ,
. v0
vk, vk (reachable) v0. p
(simple), p
. , 6.1.(), <1, 3, 4, 6> ,
<2, 1, 3, 2, 4> , 2.
v v, v
6 . 1
v (shortest path),
, v v.
,
.
(cycle) 1. 1
(self loop)
( 6.1.(), 6). .
, , . , 6.1.(), <1, 3, 2, 1> ,
<1, 3, 2, 4, 2, 1> , 2
. <v0, v1, , vk, v0> <w0, w1, , wk, w0>
, j, , vi = w(i + j) mod k, i = 0, 1, , k.
(acyclic).
G(V, ) (subgraph) G(V, E)
V V E. V V,
G V (induced subgraph) G(V, E),
= {(v, w) E: v, w V }.
(connected),
, . G(V, E)
, (connected
components), G,
V. , 6.1.()
, 6.1.() {1, 2, 3, 4} {5, 6}. u
v.
(strongly connected),
u, v , v
u, u v. G(V, E) ,
(strongly connected components), G,
131
K E A A I O 6 :
132
, . ,
(..
,
, .). (tree) ,
( 6.2). , , (forests).
,
.
6.1 G(V, E) . :
(1) G .
(2) G ,
.
(3) G , , .
(4) G |V| 1 .
(5) G |V| 1 .
(6) G ,
, .
6 . 1
133
6.2
G(V, E)
G .
6.1.1
.
(adjacency list) (adjacency matrix).
G(V, E) ,
|V| , G. v V, [v]
v. G ,
v . ,
A[v] v ( ),
G O(|V| + |E|).
G(V, E) , V 1, 2, , |V|.
|V| |V| A[i, j] 1,
(i, j) E, 0, . G , A[i, j] w(i, j) (i, j)
, (i, j) . ,
(|V|2).
G ,
, [i, j], 1 i < j |V|,
.
3 /
4 /
4 /
6 /
6 /
5 /
1
2
3
4
5
6
1
0
1
0
0
0
0
2
0
0
1
1
0
0
6.3
.
3
1
0
0
0
0
0
4
0
1
1
0
0
0
5
0
0
1
0
0
0
6
0
0
0
1
1
1
K E A A I O 6 :
134
6.3
, 6.4
.
6.4
.
1
G (sparse),
|V|2, || = (|V|2), .
, G (dense), |E| = (|V|2), . ,
, v, w V, (v, w) ,
A[v], |V|.
3 /
3 /
6 /
3 /
4 /
5 /
1
2
3
4
5
6
1
0
1
1
0
0
0
2
1
0
1
0
0
0
3
1
1
0
1
1
0
4
0
0
1
0
0
1
5
0
0
1
0
0
0
6
0
0
0
1
0
0
, , .
A 6.1
G(V, E) G2(V, E2),
(u, w) E2 (u, w) E v V
, (u, v) (v, w) G. , G2 (u, w), G u w 2.
G2 G , .
6 . 2
6.2
135
K E A A I O 6 :
136
,
. FIFO Q,
.
Q.
, p, v V, p[v] v. , p[v] = u, (u, v)
v.
, . , u head[Q]; u Q,
, tail[Q] v; Q
v.
(G(V, E), s)
for all v V {s} do
color[v] ; p[v]
color[s]
NIL;
tail[Q] s; p[s]
NIL;
while Q do
u head[Q]; Q Q {u};
for all v A[u] do
if color[v] = then
color[v] ; tail[Q] v; p[v] u;
color[u] ;
,
. ,
Q,
Q. Q FIFO , (|V|). ,
, . (||). ,
(|V| + |E|)
G(V, E).
6 . 2
s
3
137
s
1
Q 4
s
3
s
1
Q 1
Q 5
s
3
s
1
Q 6
Q 2
s
3
Q 7
8
6.5
s
1
Q 8
8
s
.
,
,
A 6.2
G(V, E) (bipartite), V1 V2, ,
V1 V2.
.
K E A A I O 6 :
138
6.3
k k + 1, (
Depth First Search) s. v . v ,
,
. s.
,
, . .
, p[1, ...,
|V|]
. v (u, v),
p[v] = u. , u
(predecessor) v, v (successor) u.
G(V, Ep)
V. , Ep = {(p[v], v): v V p[v]
NIL}. V ,
, Gp , (forest).
, . Gp , Ep
(tree edges).
, ,
, , ,
,
. ,
. , . , . ,
v,
, , , p[v].
, -
6 . 3
139
K E A A I O 6 :
140
1/
1/
2/
1/
2/
3/
1/
2/
1/
2/
1/
2/
4/
3/
4/5
3/
4/5
3/
1/
2/
1/
2/7
1/
2/7
4/5
3/6
4/5
3/6
1/8
2/7
1/8
2/7
4/5
3/6
1/8
2/7
M
4/5
9/
3/6
1/8
M
4/5
3/6
1/8
2/7
2/7
9/
3/6
1/8
2/7
3/6
3/6
1/8
2/7
3/6
9/12
1/8
2/7
9/12
10/11
4/5
3/6
10/11
9/
'
4/5
10/
9/
'
4/5
'
4/5
10/
4/5
4/5
'
9/
10/11
'
3/6
6.6
.
. ,
, , , .
6 . 3
141
6.3
(clique) G(V, E),
. , u, v V, {u. v}
E. , , G(V, E)
G.
, ,
, , .
. Gp . , p[u] = v
(u) v.
G(V, E). , Gp,
:
(tree edges) p
. (u, v) ,
v (u, v). ,
v u, v .
(back edges) u v,
u . (u, v) ,
v u, v .
.
(forward edges) u v,
u . (u, v) ,
v u, v
, Gp (
u, ) u v. v , d[u] < d[v].
(cross edges).
,
K E A A I O 6 :
142
. (u, v) ,
v u, v d[u] > d[v].
6.6 6.7, .
, ,
. , 6.7.(),
,
, , .
A 6.3
. .
, (u, v) (v, u) .
, {u, v} . , {u, v}
(u, v) (v, u) .
6.4
,
, .
6.5
G(V, E)
. O(|V|), ||.
d[v] f[v] v V . u, v, [d[u], f[u]] [d[v], f[v]]
, ( 6.7).
6 . 3
3/6
2/9
143
1/10
11/16
1/10
2/9
4/5
12/13
7/8
14/15
()
11/16
12/13
14/15
3/6
7/8
1,10
11,16
()
4/5
2,9
12,13 14,15
3,6
7,8
4,5
()
d[u] < d[v] d[v] < f[u] d[v] > f[u]. d[v] < f[u], v u . ,
v u. , v, u. , [d[v], f[v]] [d[u], f[u]]. d[v] > f[u], [d[v], f[v]] [d[u], f[u]] .
6.7
,
6.2.
K E A A I O 6 :
144
A 6.4
G(V, E). ,
(G)
G. , k G,
, v
cc[v] 1 k, u, v V, cc[u] = cc[v]
u v G.
.
,
. , : , .
6
1. :
[1] F. Harary. Graph Theory. Addison Wesley, 1969. , .
[2] S. Even. Graph Algorithms. Computer Science Press, 1979.
.
, .
. , Turing , , DTIME[t(n)], P EXP,
.
:
.
Turing .
.
.
Cook Karp
Turing
(computational complexity theory)
. ( ), , , ,
,
K E A A I O 7 :
146
.
.
(Halting Problem)
Turing.
,
. . ,
.
.
,
(complexity classes), . .
(complete)
, , .
, ( ) ( ).
:
7.1.
7.2. Turing
7.3. P
7.4.
7 . 1
7.1
,
, .
, , . ,
.
, , . ,
.
,
, , . (formal languages),
.
,
.
, .
, . G(V, E), s, t V. . s t
. ,
, t s.
s t , .
(optimization problem).
< G(V, E), s, t >, -
147
148
K E A A I O 7 :
s t. ,
(feasible solution) s t. (optimal
solution) s t .
, k 0,
s t k. ,
,
G(V, E), s, t V k 0.
: , 1 , 0. S = {0, 1}
(decision problem).
7.1: S
, I S. (i, s) i s i. , S = {0, 1}.
, .
(bound) k 0.
k;,
k;, .
,
(.. ),
(.. ) .
(formal
language theory).
, .
, (encoding)
(binary
7 . 1
string) , .
, , , . , e
, i I e(i) .
e(i) i.
L
/ . i e(i) , .
7.2: e , L(, e)
e x *, x
,
* ,
.
7.1.1
,
(tractable) , ,
(intractable).
. ( )
, .
,
.
,
. ,
1970.
. ,
149
150
K E A A I O 7 :
, . , , .
.
O(nk), n
k .
P. P
S. Cook R. Karp ,
, Cook Karp.
Cook
Karp. ,
. ,
, . 1 (.. ).
, (n200)
,
(2n/200). ,
.
P
(.. 2, 3, 4).
, , ,
. ,
Turing, (Random Access
Machine) ,
.
,
, ,
.
, , -
7.2 TURING
151
, .
7.1
. .
7.2 Turing
, , , Turing
. Turing
.
, Turing
(Multitape Deterministic Turing Machines). Turing
(DTM) k (k 1) . (tape) (.. ), (cells)
. (blank),
, . (tape head)
.
,
(transition function).
, Turing (state). , ,
Q. Q
, ,
. , ( R), ( L) ( S). Turing (initial state)
(final state).
K E A A I O 7 :
152
7.3:
k 1, Turing
k = (Q, , , q0), :
Q .
.
u ( blank symbol).
q0 Q . , Q
F .
: (Q F) k a Q k {L, R, S}k .
. ,
Turing ,
. ,
(input tape)
F : ,
(halt) . Turing
, F = {, }, , F = {}.
Turing
( >),
,
.
Turing .
,
( ), Turing (fixed program
computers), . ,
7.2.1, ,
Turing (universal Turing machine),
Turing.
7.2 TURING
153
7.2
Turing , ,
0. , 1101,
u1101.
= {0, 1}.
7.2.1 Turing
154
K E A A I O 7 :
ui ,
* . , ui
, .
(start configuration) x (q0, (x, ), , (,
)). (accepting configuration) ,
(rejecting configuration) .
q ,
.
, (yield). , q Q F,
( q,(u1 , u1),(u2 , u2 ),...,(uk , uk )) ( p,( v1 , v1),( v2 , v2 ),...,( v k , v k )) ,
d ( q,( a1 , a2 ,..., ak )) = ( p,( b1 , b2 ,..., bk ),( D1 , D2 ,..., Dk )) i, 1
i k, :
Di = L, vi ui ,
vi=biui.
Di = R, vi ui
bi ui, vi
ui .
Di = S, vi ui
bi, vi = ui.
(partial function) . ,
DTM () x *
C1, C2, , Cn , C1 x, i, 1 i < n, Ci Ci + 1 (Ci Ci + 1), Cn ().
C1, C2, , Cn ().
, f * *, DTM M (computes) f , f(x) = y, (x) = y, f(x) ,
M(x) .
7.2 TURING
7.2.2 Turing
Turing
DTM ,
. ,
, , DTM . , (universal) DTM U DTM M x,
x.
U DTM,
U (, DTM , U
). , DTM .
, DTM = (Q, , , q0) = {1, 2, , || } Q =
{ || + 1, , || + |Q|, || + |Q| + 1}.
0, || + 1,
|| + |Q| 1, || + |Q|, || + |Q|
+ 1, L, R, S || + |Q| + 2,
|| + |Q| + 3, || + |Q| + 4, .
U,
, log(| S | + | Q | +4 )
( 0 ).
= (Q, , , q0) |Q|, || . ((q; s);(p; t; D)), s k
, t k
, D {L, R, S}k . (, ), ;
U. -
155
156
K E A A I O 7 :
x, . x ;.
x, ,
; . , U ,
, 0 1 (, ) ;.
U , x . ( q;(u1; u1);(u2 ; u2 );...;(uk ; uk )) , q ,
, .
, U .
, U (
) . , U ,
. U, x, U . , x, U .
, U ( )
DTM x
. U , U (.. ).
, DTM U
DTM x .
Turing, . , U x.
DTM
DTM ,
(Halting Problem) -
7.2 TURING
DTM. ,
DTM
7.1 7.3.1.
7.2.3 Turing
L *.
(complement) L L
*
* L, L = S - L .
157
K E A A I O 7 :
158
A 7.1
:
(1) L DTM , DTM .
(2) L DTM , L
DTM .
(3) L DTM L
L DTM .
7.3 P
. (.. , )
.
. Turing ,
, .
Turing
,
.
, DTM M . (running time) (time complexity)
f : IN a IN, n IN, f(n)
x n, |x| = n. f(n)
, f(n),
DTM f(n) . (
L) (
) DTM ( L).
t : IN a IN
DTM,
7 . 3 P
159
(deterministic time
complexity class) DTIME[t(n)], / (t(n)). , :
DTIME[t(n)] = { L : L DTM (t(n)) }.
t : IN a IN DTM , , . t(n)
DTM
(bounding functions). , t(n)
, . , t(n)
DTM Mt, x n, 1t(n), 1 , (n + t(n)), / (t(n)) x. ,
(total) DTM .
7.3
f1(n) = c, c IN*, f2(n) = n f 3 (n ) = log n
.
A 7.2
L DTM t(n), t(n) . L
DTM (t(n)).
7.3.1
DTIME[t(n)]
t(n) . , (Time Hierarchy Theorem),
t(n) (log t(n)) , , DTIME[t(n)].
K E A A I O 7 :
160
L = {0, 1}
DTM t2(n) ,
DTM t1(n) . , L
x *, |x| = n, 1*0 <>, <>
DTM x t2(n) . DTM , , L t2(n).
(1) t2(n) .
, t2(n) .
(2) , :
(a) x 1*0<>, <> DTM . x 1*0<>,
. , <>
.
(b) x. t2(n) T(x) = , . , .
,
t2(n) . , L = L(M) DTIME[t2(n)]. L DTIME[t1(n)].
L DTIME[t1(n)].
DTM t(n),
DTM 2 (t(n) log t(n)) . , DTM , L c2 t1(n) log t1(n), c2 > 0.
(2.a) M , , L n + c1,
c1 <>.
(2.b) c3t1(n) logt1(n), c3 > 0,
x. t2(n) =
(t1(n) log t1(n)), t2(n) n + c1 + c3t1(n) log t1(n),
n.
7 . 3 P
161
[ ]
EXP = U k 0 DTIME 2 n
. ,
, P EXP. 7.1
P
EXP. , P EXP
.
A 7.3
P EXP.
A 7.4
,
.
K E A A I O 7 :
162
7.3.2 P
P .
Cook Karp P
.
, P , . ,
(Random Access
Machine RAM) , , Turing.
P. , P.
(boolean formula) (boolean) (boolean operators).
(conjuctive normal form
CNF) = (c1 c2 cm) (clauses), ci = (li1 li2 lik)
(literals), (xi) (xi).
, (x1 x2) (x2 x3) (x1 x3) , (x1 x2 x3) (x2 x3 x5 x6) .
(satisfiable)
.
k ,
() k ,
. k
, Turing ,
.
k , k 3,
P, 2
.
7 . 3 P
163
7.2: 2 P.
:
2
. ,
2 .
(x y) (x y) (y
x). , G(V, E)
. , V = {x1, x2, , xn} {x1, x2, , xn},
x1, x2, , xn .
(li lj) , G (li, lj) (lj, li)
x x . , G
. , G (l, l) (l, l). 7.1 G(V,
E) = (x1 x2) (x1 x3)
(x1 x2) (x2 x3).
x
3
x1
x3
x
1
x
2
7.1
x2
G(V, ).
, , x, x
x ( x x).
, ,
. x (x)
= 1 (TRUE) p x x. (x) = 1 (x) = 0
(FALSE), p (l1, l2), , (l1) = 1
K E A A I O 7 :
164
x l. x l,
G l x , ,
l l x. l l. , p
l x 0, l x ( ), 0
l x. ,
.
G(V, E) (n + m),
n o m . , , G,
x x (n2 + nm).
(n + m),
.
A 7.5
P , , L1, L2 P, L1 L2, L1 L2, L1 P.
7 . 4
165
7.4
,
, k 3, k P. (reduction) () ,
(completeness) () .
, ,
. ,
.
(hard) ,
, (complete).
.
, . (reduction)
.
1 (reduces) 2, R , x 1
R(x) 2. x 1 R(x) 2,
x 1 (, DTM 1 M(x) = )
R(x) 2. , R
1 2, 1 x, R(x)
2 R(x) ( 7.2).
A 1
R(x)
A 2
NAI/OXI
7.2
R
1
2.
K E A A I O 7 :
166
1 2
2 1. , , R, , .
7.4: 1 2 (
1 2), R
DTM , , , x, x 1 R(x) 2. / R 1 2.
7.4
(polynomial reduction) Karp (Karp reduction).
7.4
, ,
1, 2, 3, 1 2 2 3, 1 3.
7.5
P , 2 P 1
2, 2 P.
A 7.6
(bipartite graph) ,
G(V, E), V V1 V2, ( 7.2).
2 .
7 . 4
, ( ) .
(maximal) ,
.
7.5: C . C
,
C (C , C hard). , ,
C, C (C ,
C complete).
,
. ,
P, , NP.
.
. ,
.
,
, ,
. , ,
, , .
, , , :
C,
C C, . C
C, C C,
C (collapse) C.
167
K E A A I O 7 :
168
7.6
C C , C C, C = C.
. , . , , .
, .
. Cook Karp .
Turing (DTM) ,
.
. DTIME[t(n)]
DTM (t(n)). t(n)
. P
, EXP .
. 1
2, 2, 1. C,
, C . ,
C.
B I B I O PA I A
, , :
[1] C.H. Papadimitriou. Computational Complexity. Addison Wesley, 1994.
. .
, Turing,
,
:
[2] J.E. Hopcroft J.D. Ullman. Introduction to Automata Theory, Languages,
and Computation. Addison Wesley, 1979. , , Turing .
[3] H.R. Lewis C.H. Papadimitriou. Elements of the Theory of Computation.
Prentice Hall, 1981. Turing
. .
.
[4] M. Sipser. Introduction to the Theory of Computation. PWS Publishing, 1997.
.
169
NP
, Turing, NP
.
:
Turing.
NP , .
NP.
P NP
NP .
Turing
Turing.
NTIME[] NP
NP
P NP
,
(RAM)
Turing (DTM). ,
Turing (Non Deterministic Turing Machines NDTM).
() DTM, , NDTM ( ) . NDTM -
K E A A I O 8 : N P
172
.
, NDTM ( ) DTM. ,
NDTM DTM
. , NDTM DTM
, .
NDTM DTM .
, , ,
. P NP.
Turing .
, , , .
, ,
. NP, , (Combinatorial Optimization).
:
8.1. Turing
8.2. NP
8.3. NP
8.1 TURING
8.1 Turing
Turing
DTM. Turing (Non Deterministic Turing
Machine NDTM) k = (Q, , ,
q0). DTM, Q , , q0 .
Turing,
( configuration) . , , , NDTM . , ,
, . , , . , , ,
. , :
((Q F) k) (Q k {L, R, S}k).
, DTM
NDTM. , DTM NDTM
.
8.1.1 NDTM
, NDTM .
, ,
NDTM (computation paths) . , , NDTM .
, NDTM x *,
(x) (accepting computation), . ,
(rejecting
173
K E A A I O 8 : N P
174
=
X Y
8.1
NDTM.
.
, , ,
. . , , -
8.1 TURING
. ,
.
NDTM ( ) NDTM .
NDTM x , ,
N(x). , t : IN a IN,
NDTM L * t(n),
L, x *, (x)
t(|x|). , L t(n). , NDTM
,
, .
8.1.2 NTIME
t : IN a IN, (t(n)) ,
, NTIME[t(n)]. NTIME[]
(non
deterministic time complexity class) , , :
NTIME[f(n)] = {L : L NDTM (t(n)) }.
, t(n), DTIME[t(n)]
NTIME[t(n)], , DTM
NDTM. , t(n) = n,
DTIME NTIME.
,
t(n), NTIME[t(n)] DTIME[t(n)], t(n) t(n). t(n) = (ct(n)), c > 1.
8.1: L NDTM
t(n). DTM 3
(ct(n)), c > 1 .
175
K E A A I O 8 : N P
176
: , ,
. d . d
, ,
d > 1, , , DTM.
t {0, 1, , d 1} t. t, DTM {0, 1, , d 1}t.
f(n) , t .
, (c1, c2, , ct)
,
i ci.
( t) ,
. ,
t ( 1 c1c2ct) .
t, t 1 .
, t
{0, 1, , d 1}t .
f(n) ,
. ,
O
f ( n)
t =1
d t = O d f ( n ) +1 .
Turing, 8.1 :
NTIME[t (n )] U c>1 DTIME[ ct ( n ) ] .
8.2 NP
177
8.1
/ Turing /
Turing. Turing.
, 8.1
Church Turing.
8.1
(Travelling Salesman Problem) n , , , , . ( ) NTIME[n2].
8.2 NP
, , ,
NP. P, NP
, .
,
NP = U k 0 NTIME[n k ] .
8.2
() NP.
2 .
NP, , , ,
NDTM .
.
R * *. H R
178
K E A A I O 8 : N P
NP
8.1 8.2 8.2.
8 . 3 N P
179
8.2 NP.
8.2, / NP : x ,
y ,
DTM , x
. , y x . () , x
y .
,
( ) . , ,
.
/ ,
.
,
.
A 8.1
NP ,
L1, L2 NP, L1 L2 NP L1 L2 NP. , NP , , L1
L2 L2 NP, L1 NP.
8.3 NP
DTM NDTM, P
NP.
NP .
, NP
, .
, ,
180
K E A A I O 8 : N P
.
P NP. , NDTM DTM . , . ,
P NP.
P NP, NP
.
,
NP , NP ,
. NP (NP
complete) NP ( NP),
NP ("1 NP, ).
NP P NP.
8.3: NP , P = NP. ,
NP , NP
.
: , NP , NP .
P NP, P . ,
( P),
P NP. P
, P,
NP , P.
8 . 3 N P
181
, NP P, P NP, NP , ,
.
8.3, P NP ,
NP
NP P (. 8.2).
NP
NP .
, NP. ,
( P) NP .
,
, NP . , NP .
, NP .
NP-
NP
8.2
P, NP,
NP,
P NP.
K E A A I O 8 : N P
182
A 8.2
L1 L2, , L1 L2. , ,
.
(1) L1, L2 NP. L1 P, L2 P.
(2) L2 P, L1 P.
(3) L2 NP. L2 NP , L1 .
(4) L1 L2 NP , L2 L1.
8.3.1 NP
NP ,
NP.
NP (),
. (Satisfiability),
, ,
. NP S. Cook
1971 L. Levin, 8.4
Cook Levin.
8.4:
NP .
( ):
NP. ,
L NP
. ,
, NDTM
.
L NP
NDTM t(n). -
8 . 3 N P
x x , ,
x x L.
{1, 2, , m}
{q1, q2, , ql}. t(n), |x| = n, t(n) . x
:
(i, t) i -
(i,
t) qk t, 1 k l, 1 t t(n), l t(n) .
(k,
, (m + 1) t2(n) + l t(n) ,
t,
(m + 1) t(n) + l .
x
. , :
(1) .
(2) .
(3) .
(4) 1 ( ), n
x, t(n) n . , .
(5) t t(n), .
(6)
.
(7) . /
183
K E A A I O 8 : N P
184
.
NDTM
. x .
.
, ,
(1) (7)
j x( m ) , = 1, , 7. ,
(m)
x, j x .
2 ,
2 , . , 8.4 3 ,
3 , NP .
8.5: 3 NP .
:
2 , 3 NP. 3 .
,
3 ,
.
c k 4
c 3 . ,
c k 4 , c = (l1 l2 L lk),
k 3 x1, x2, , xk3, c :
8 . 3 N P
185
( l1 l2 x1 )
( x1 l 3 x2 )
( x2 l 4 x 3 )
c =
L
( x k - 4 l k - 2 x k - 3 )
( x k - 3 l k -1 l k )
c.
,
.
,
c c.
c
, lj . ,
c
xi, i = 1, , k 3.
1 1 i < j - 1
xi a
0 j - 1 i < k - 3
, c
l1, l2, , lk . ,
c .
8.5
NP . ,
/ ,
(..
). , ,
(.. ),
, , NP .
K E A A I O 8 : N P
186
8.3
2 (Maximum 2 Satisfiability)
,
,
, . 2 NP .
(independent set)
/
. G(V, E)
K 1,
( Maximum Independent Set) G
K.
8.6: ()
NP .
NP,
NDTM
K ( ),
O(K2) = (n2).
8.3
3 .
= (x1 x2 x3)
(x1 x2 x3)
(x1 x2 x3).
NP, 3 . , m , n ,
3 . , G(V, E), |V| = 3m, m .
x
1
x1
x
2
x2
x3
x
1
x
3
x2
x3
8 . 3 N P
G, c
, c .
,
, .. xi xi. 8.3.
, = c1 c2 L cm, ci = (li1
li2 li3), lij, j = 1, 2, 3, . R() = (G(V, E), K), K
= m, G(V, E) V = {vij : i = 1, 2, , m j = 1, 2, 3}
E = {(vij, vik) : i = 1, 2, , m j k} {(vij, vk) : i lij = lk}. , ,
m ,
.
. , G
m. , (.. xi xi)
. , (.. xi) , ( xi xi) , , .
G(V, E) K
= m. TRUE
/
/ TRUE.
,
G
.
, , K = m, / / TRUE. TRUE, , ,
187
K E A A I O 8 : N P
188
. ,
,
.
.
NP . ,
, , .
.
A 8.3
P
2.
, NP .
A 8.4
(clique) .
.
( Maximum Clique) ,
G(V, E) K 1, G K. NP .
YNOH
189
8.4
G(V, E), C V
(covers) G G
C. C (vertex cover)
G .
(
Minimum Vertex Cover) ,
G(V, E) K 1, G
|C| K.
NP .
,
NP NDTM NP .
,
.
Turing .
NP /
NDTM . , NP
L x
, DTM
x L.
NP NP. NP P NP, NP
, P NP . NP , 3
.
K E A A I O 8 : N P
190
NP
:
[1] C.H. Papadimitriou. Computational Complexity. Addison Wesley, 1994.
NP :
[2] M.R. Garey D.S. Johnson. Computers and Intractability: A Guide to the
Theory of NP Completeness. Freeman Publishing, 1979.
NP . NP
.
NP .
Cook Levin NP :
[3] S. Cook. The complexity of theorem proving procedures. In Proceedings of the
Third Annual ACM Symposium on Theory of Computing, . 151 158, 1971.
[4] L.A. Levin. Universal sorting problems. Problemy Peredachi Informatsii,
9(3):265 266, 1973. .
, NP :
[5] R.M. Karp. Reducibility among combinatorial problems. In R.E. Miller and J.W.
Thatcher, editors, Complexity of Computer Computations, . 85 103. Plenum
Press, 1972.
A A
1.1
procedure selection_sort(A[1...n])
(1) for i 1 to n1 do
(2)
minj i; minx A[i];
(3)
for j i + 1 to n do
(4)
if A[j] < minx then
(5)
minj j; minx A[j];
(6)
A[minj] A[i]; A[i] minx;
1 n , 2 6 (n
1) . i, 3 (n i + 1) , 4
(n i) . 5,
. , , 5
. , , 5 (n i) , i. , selection sort ,
.
,
3, n -1
(n - i + 1) =
i =1
i =
i =2
n(n + 1)
- 1 .
2
3 . , , selection sort .
1.2
, :
procedure linear_search(A[1,...,n], x)
(1) i 1;
(2) while i <= n do
192
if A[i] = x then
return i;
i i + 1;
(3)
(4)
(5)
(6) return 0;
4 6 . x y , 2
3 y , 5 (y 1) .
,
x .
, , n . ,
x , .
x .
,
2. x y = 1, , n
1/n, x y, 2 y . , 2
n
n =
y =1
n(n + 1) n + 1
=
. x
2n
2
, , ,
.
x ,
2 (n + 1) , 3 5 n .
,
, x .
2.1
selection sort (n2). , 5 ,
n3.
A A
193
5.
selection sort (n3).
6.
selection sort (n2).
7.
selection sort (n2).
9.
linear search (n).
10.
linear search (n).
11.
linear search (n).
12.
linear search (n).
13.
linear search (n).
14.
linear search (1).
15.
linear search (1).
194
2.2
(A). log log n, log n, log 2 n, n , n log n, 2 n , 22 n , n!, n n , 2 n! .
(B).
f(n)
g(n)
()
2n + k
2n + 2k nk
()
(logn)3
log(nlog( n ) )
()
kn
(3k)n/3
()
(kn)1
n1
()
n3 10n
8log n
2.3
C(n)
, C (n )
n
i = n/2
n 3 / 8 n 4 / 16 .
n
i =1
n3 n4 .
n
i =1
i3 =
n 4 + 2n 3 + n2 n2 (n + 1)2
=
,
4
4
.
, n = 1, 2, 3, 4 5. n, n + 1. ,
A A
n +1
195
= (n + 1) +
3
i =1
i =1
n2 (n + 1)2
4
2
(n + 1) ( 4n + 4 + n2 ) (n + 1)2 (n + 2 )2
=
=
4
4
= (n + 1) 3 +
i = n + 1 ,
, ,
.
2.4
.
, c 1, n = 0. n n + 1.
n +1
3 = 3
i
n +1
i =0
i =0
n +1
+ c3 n
c
3 n +1 1 +
3
3 n +1 1 + c c3n + 1, c 3/2.
3
3/2 c .
, , > 1
c
a
,
a -1
n
i =0
ai ca n .
2.5
,
T (n ) = 1 + T (n / 2 )
= 1 + 1 + T (n / 4 )
M
i
= 11
+4
1+
2L
4+
31 + T (n / 2 ) .
i
196
i = n 1, .
, T(n) = 3(n 1) + (1) = (n).
, T(n) = 2n(n 1) + (1).
, (n) = (n2).
merge sort. T(n) = (n log n).
, ,
,
T(n) = log3 n. , (3)
= 1. T(n/3) = log3 (n/3) , :
n
T (n ) = log 3 + 1 = log 3 n - 1 + 1 = log 3 n .
3
, (n) = (log n).
, :
T (n ) = n + T (n / 2 )
= n + n / 2 + T (n / 4 )
M
= n + n / 2 + L + n / 2i -1 + T (n / 2i ) .
i = log n . (1) = 1, :
A A
197
log n
log n
T (n ) =
n / 2 = n1 / 2 2n .
i
i =0
i =0
, T(n) = (n).
1.
T(n) = T(n 1) + 3
T(n) + (n)
2.
T(n) = T(n 1) + 2n
T(n) + (n2)
3.
T(n) = 2T(n/2) + n
T(n) + (n logn)
4.
T(n) = T(n/3) + n
T(n) + (logn)
5.
T(n) = T(n/2) + n
T(n) + (n)
2.7
.
log56 > 1 f (n ) = O (nlog 5 6 - e ) , > 0.
, , T (n ) = Q (nlog 5 6 ) .
log65 < 1 f (n ) = n = W (nlog 5 6 + e ) ,
> 0. , 5(n/6) 5/6 f(n). ,
, (n) = (n).
f (n ) = n = Q (nlog 9 3 ) , . , T (n ) = Q ( n log n ) .
.
:
T (n ) = n2 + T (n - 1)
= n2 + (n - 1)2 + T (n - 2 )
M
n
i
i =2
+ T (1) = Q (n 3 ) .
198
3n
3n
+
3n/5
21n/10
3n(9/10)
(log n)
+
3n/25
21n/50
21n/50 147n/100
3n(81/100)
+
...
2.6
3n(9/10)3
...
T(n) = T(n/5) +
T(7n/10) + 3n.
Q (log n )
i =0
9
9
3n 3n = 30n ,
10
10
i =0
. ,
T(n), . , (n)
= (n).
( 2.7). n ( 5/9
+ 4/9 = 1), log9/4n
log9/5n. , T(n) = (n log n).
A A
199
n
+
(log n)
5n/9
4n/9
n
+
20n/81
20n/81
16n/81
...
...
25n/81
3.1
,
, :
quicksort,
k , insertion sort.
quicksort k
, log n log k. ,
quicksort log n log k = log(n/k). (n) ,
quicksort (n
log(n/k)).
n -1
n - k -1
1
S (n ) = Q (n ) +
S (i ) +
S (n - i )
n -1 i=k
i =1
2.7
T(n) = T(5n/9) +
T(4n/9) + n.
200
c1 c2 ,
c1nk + c2n log(n/k). k
c2/c1 . ,
k quicksort insertion sort k .
3.2
, (n log n) , n! .
, k! , n/k , (k!)n/k.
, h
2 .
,
h log ( k!) n / k =
n
k log k = n log k
k
.
n log k
, , .
3.3
A[n/2] B[n/2]
, A[n/2] < B[n/2]. , A B A[n/2] B[n/2], [1, , n/2] [n/2, , n]
. , A B
A[n/2, , n] B[1, , n/2]. , A[n/2] > B[n/2],
A B [1, , n/2]
B[n/2, , n]. ,
. , .
median_of_union(A[p1,...,r1], B[p2,...,r2])
if r1 p1 1 then
A A
201
[p1,...,r1]B[p2,...,r2];
q1 = (p1 + r1) / 2; q2 = (p2 + r2) / 2;
if A[q1] < B[q2] then
return median_of_union(A[q1,...,r1], B[p2,...,q2]);
else
return median_of_union(A[p1,...,q1], B[q2,...,r2]);
, ,
, . , T(n)
T(n) = T(n/2) + (1), T(n) = (log n).
3.4
w 2,
1
, xk
xi < xk
w 2 . w = 1/n, i = 1, 2, , n,
1
xi > xk
n/2 n/2
xk. , xk x1, , xn .
x1, , xn , ,
. xk
1/2.
(n log n) x1, , xn
xk .
:
1. xm x1, , xn
quickselect.
2. partition, x1, , xn . xm.
3. WL =
xi < x m
WR =
w.
i
xi > x m
4. xm , .
202
5. , WL WR
xm,
( xm).
, xm, ( 4). , xm ,
, .
T(n)
T(n) = T(n/2) + (n), T(n) = (n).
3.5
A( x ) =
n -1
i =0
ai x i B( x ) =
n -1
i =0
bi x i (n 1),
C(x) = A(x)B(x) .
A(x) (x) A(x) =A1(x) + xn/2 A2(x),
A1 ( x ) =
n / 2 -1
i =0
ai x i A2 ( x ) =
n / 2 -1
i =0
an / 2 + i x i ,
n / 2 -1
i =0
bi x i B2 ( x ) =
n / 2 -1
i =0
bn / 2 + i x i ,
. C(x) :
C ( x ) = ( A1 ( x ) + x n / 2 A2 ( x ))( B1 ( x ) + x n / 2 B2 ( x ))
= A1 ( x ) B1 ( x ) + x n / 2 ( A1 ( x ) B2 ( x ) + A2 ( x ) B1 ( x )) + x n A2 ( x ) B2 ( x )
= A1 ( x ) B1 ( x ) + x n / 2 ( A1 ( x ) + A2 ( x ))( B1 ( x ) + B2 ( x )) - A1 ( x ) B1 ( x ) - A2 ( x ) B2 ( x )
+ x A2 ( x ) B2 ( x ) ,
A A
3.6
A(x) B(x) 1, C(x)
2, , , , 3 .
FFT 2,
4 (n = 4). = [3, 1, 0,
0] = [2, 3, 0, 0]. n = 4 {1, i, 1, i},
i.
, FFT [3, 1, 0, 0], [0] = [3, 0],
[1] = [ 1, 0], 4 = i FFT([3, 0]) FFT([ 1, 0]).
2 = 1 FFT([3])
FFT([0]). [0] = 3 [1] = 0,
y0 = 3 + 1 0 = 3 y1 = 3 + 1 0 = 3. ,
FFT([3, 0]) [3, 3]. , y0
= 1 + 1 0 = 1 y1 = 1 + 1 0 = 1, [ 1, 1].
, FFT([3, 1, 0, 0]). k = 0,
y0 = 3 + 1 ( 1) = 2 y2 = 3 + ( 1) ( 1) = 4. k = 1,
y1 = 3 + i ( 1) = 3 i y3 = 3 + ( i) ( 1) = 3 + i. , = [2, 3 i, 4, 3 + i]. ,
FFT([2, 3, 0, 0] B = [5, 2 + 3i, 1, 2 3i].
C(x) YC = [10, 9 + 7i,
4, 9 7i]. FFT FFT([10, 4]) FFT([9 + 7i, 9 7i]).
C[0] = [6, 14] C[1] = [18,
14i]. k = 0, c0 = 6 + 18 / 1 = 24
c2 = 6 + 18 / ( 1) = 12. k = 1, c1 = 14 + 14i / i = 28
c3 = 14 + 14i / ( i) = 0. n = 4,
C = [6, 7, 3, 0],
C(x) = 6 + 7x 3x2.
4.1
,
MATRIX CHAIN MULT m[i, j],
k . ,
m[1, n], .
k s[1..n,
203
204
MULTIPLY(A,
for i 1 to d1 do
for j 1 to d3 do
C[i, j] 0;
for k 1 to d2 do
C[i, j] C[i, j] + A[i, k]*B[k, j];
return C;
, ,
i..j, 1 i
< j n, m[i, j] Ai..j s[i, j], Ai..j = Ai..s[i, j] As[i, j] + 1..j .
MATRIX
CHAIN
PRODUCT(Ai,...,Aj,
s)
if j > i then
X MATRIX CHAIN PRODUCT(Ai,...,As[i,j], s);
Y MATRIX CHAIN PRODUCT(As[i,j] + 1,...,Aj, s);
return matrix multiply(X, Y, di 1, ds[i, j], dj);
else return Ai;
A A
205
4.2
,
, .
c[i, j, k] Xi, Yj Zk.
c[1..n, 1..m, 1..p] .
i = 0, j = 0, k = 0.
0
i , j , k > 0 xi = y j = zk
c[ i, j , k ] = c[ i - 1, j - 1, k - 1] + 1
max{c[ i, j , k - 1], c[ i, j - 1, k ], c[ i - 1, j , k ]} i , j , k > 0 x = y = z
i
j
k
3LCS
LENGTH(X,
Y, Z)
for i 1 to n do
for j 1 to m do
for k 1 to p do
c[i, j, k] ;
return
LOOKUP
LOOKUP
1,
1,
Yj, Zk);
Yj 1, Zk);
Yj, Zk 1);
ty, tz};
Yj
1,
Zk
1);
206
jb
c[ i, j ] =
min{c[ i - 1, j - 1], c[ i - 1, j ] + d , c[ i, j - 1] + b}
min{c[ i - 1, j - 1] + h, c[ i - 1, j ] + d , c[ i, j - 1] + b}
j = 0.
i = 0.
i, j > 0 X [i ] = Y [ j ].
i, j > 0 X [i ] Y [ j ].
c[n, m]
. c[1..n. 1..m] nm , (1) , c[n, m] (nm).
MODIFY(X[1,...,n],
Y[1,...,m])
for i 1 to n do c[i, 0] i d;
for j 1 to m do c[0, j] j b;
for i 1 to n do
for j 1 to m do
if X[i] = Y[j] then
else c[i, j] c[i
if c[i, j] > c[i, j
c[i, j] c[i, j
c[i,
1,
1]
1]
j] c[i1, j1];
j 1] + h;
+ b then
+ b;
A A
207
208
A A
( ) ,
,
.
5.3
,
, , ,
.
g2 , g1 g0 , :
0 20 g2 < 20, g 2 = X 20 .
= 5 g1, X g0 = 0, g0 = .
, :
5g1 + g0 < 20,
(.. , ) , .
g0 < 5, , .
, g2 . , , o2 < g2 . 20 2 > 20 , ,
20.
, . , g2 . , , g2 ,
g1 . , g2 g1
, g0 . , 20, 5 1, .
1, 13 29 ,
39 .
29 , 11 . -
209
210
3 13 . , .
6.1
G ,
: u, u v u,
(v, u) E. (|V||E|).
G ,
A[v, u] 1 ( )
v u. G, A2[v,
u] 2 v u. ,
A2[v, v] > 0, 2[v, v] 2 v. , G2 (2 + ),
0 ,
, 1. Strassen
A2, G2 O(|V|log 7).
6.2
G(V, E)
( ),
(, . 5.4). , V1
V2 . G(V, E) . .
s V. ,
s ( k, k
) ,
. / , , s
. , -
A A
.
(|V| + ||).
6.3
G(V, E) (u, v). , v u ,
(u, v).
, G(V, E) c. v c , (u, v) c
v. u
v, v u,
c, v , c . , (u,
v) .
6.4
, u, v V C G (G).
u v C. ,
u v C, ,
u v,
u, v. r C C
(G). C r
d[r], C f[r]. , u, v C
(G) r.
, u, v (G),
. ,
G.
, . ,
,
.
, c 0.
211
212
:
for all v V do
if color[v] = then
c c + 1; (v);
,
cc[v] c;
, v
(G), c cc[v]. , u,
v, cc[v] = cc[u] (G),
u v G.
7.1
(1) L DTM = (Q, , , q0)
. DTM L, , (q, ), q Q F,
, ,
q (.. (q, ) = (q, , S)).
(2) DTM L, DTM
L L.
(3) (1) (2) . ,
DTM L L , . x *,
L L . , x,
. x, (,
), x (x) = , (x) = .
7.2
DTM M L (t(n)). x, DTM Mt
t(n), t . ,
x t(|x|) . -
A A
, 1 t . x (x) =
1 t.
t(|x|) , x,
x. x L (x) =
t(n) . , x L x L. ,
(t(|x|).
7.3
t1(n) t2(n) = 2n,
t2(n) = (t1(n) log t1(n)). , 7.1, P DTIME[2n] , ,
EXP.
7.4
(n3),
n ,
(n),
. ,
DTIME[n3] , , P.
O(n2),
n , . , DTIME[n2] ,
, P.
7.5
L1, L2 P 1, 2 DTM . L1 L2 L1 L2 = {x *: x L1
x L2}. x, M1(x) 2(x), x
M1(x) = M2(x) = . , L1 L2 = {x *: x L1
x L2}. x *, 1(x) M2(x), x
M1(x) = M2(x) = . L1,
x *, M1(x) x, 1(x)
= . 1 2 ,
.
213
214
7.6
, G(V, E). ,
G, 2
, G .
V = {1, 2, , n}. i V G xi, (i, j) E, G (xi xj)
(xi xj), (xi xj). , G
, ,
TRUE. 7.3.
1
4
(x2x4)(x2x4)
7.3
G.
(x1x4)(x1x4)
(x3x4)(x3x4)
(x2x5)(x2x5)
A A
1(x) , N2(x) x N2 . 2 , x.
, L1 L2 = { x * : x L1 x L2 }, N1(x),
1, 2(x). x
N1 N2 x.
, R, , x L1 R(x) L2, x,
R(x) , , ( L2 NP) R(x) L2, , x L1. ,
, L1 NP.
8.2
(1) P
= NP, NP P,
P NP (.. P,
NP , NP
P, P NP).
(2) , P
( 7.9).
(3) . L1
NP . , ( 7.8) L1 L2, L2 NP , .
(4) , L2 NP ( L2 NP ) L1 NP , L2 L1,
NP.
8.3
, 2,
, . G(V, E) , , .
215
216
,
, .
.
| V |
2
G(V, E)
| V | .
2
(
,
| V | .
2
8.4
NP, NDTM
, .
G(V, E) G (V , E ) .
G (V , E ) G(V, E) V, G, E = {(u, v ) V V :(u, v ) E } .
, V G
V G . , G , G
, . , NP .
1.1
procedure russe_II(A, B)
X A; Y B; product 0;
while X >= 1 do
if X then product Y;
X X div 2;
Y Y + Y;
return product;
,
, . , 3 ( X, Y, product).
1.2
procedure linear_search(A[1,...,n], x)
i 1;
while i <= n do
if A[i] = x then return i;
i i + 1;
return 0;
1.3
n. , n
(100n2 2n)
. , .
n
2n
100n2
400
16
1600
256
6400
218
16
65536
25600
12
4096
14400
14
16384
19600
15
32768
22500
1.4
524613254613
t2 = 2
254613245613
t3 = 2
245613245613
t4 = 1
245613125463
t5 = 5
124563123456
t6 = 4
1 23456123456
t2 = 1
123456123456
t3 = 1
123456123456
t4 = 1
123456123456
t5 = 1
123456123456
t6 = 1
6 54321564321
t2 = 2
564321456321
t3 = 3
456321345621
t4 = 4
345621234561
t5 = 5
134561123456
t6 = 6
1.5
Insertion Sort
103
0,02 sec
0,5 sec
104
2 sec
7 sec
105
3 min, 20 sec
1 min, 23 sec
106
5 h, 33 min, 20 sec
16 min, 37 sec
107
3 h, 13 min, 47 sec
219
2.1
f(n) = O(g(n)) f(n) = (g(n)).
, co no, c n, :
0 f(n) co g(n), n no, 0 c g(n) f(n), n n.
n = max(no, n), 0 co g(n) f(n) c g(n), n n
, , f(n) = (g(n)).
, f(n) = (g(n)), ,
c1, c2, n0, 0 c1 g(n) f(n) c2 g(n), n n0.
, n n0, 0 f(n) c2 g(n), f(n) = O(g(n)), 0 c1
g(n) f(n), f(n) = (g(n)).
2.2
1
(f(n) = n,
(f(n) = n,
g(n) =n logn, n = 1)
(f(n) = n,
(f(n) = n,
g(n) =n logn, n = 1)
(f(n) = n,
(f(n) = n,
(f(n) = n,
(f(n) = n,
g(n) =n logn, n = 1)
g(n) = n).
g(n) = n).
(f(n) = n,
(f(n) = n,
(f(n) = n,
(f(n) = n,
g(n) =n)
g(n) =n)
g(n) = n).
g(n) = n).
().
().
().
().
2.3
n
i =1
(n - i + 1) =
n
i =1
i n = 1.
n, n,
n + 1. ,
n +1
n +1
i =1
i =1
i =1
i =1
i =1
(n - i + 1) = 1 + [(n + 1) - i + 1] =1 + n + (n - i + 1) = n + 1 + i = i ,
220
i = n + 1, n [(n
+ 1) i + 1] ( n i + 1),
i = n + 1.
2.4
n = 1. n, n + 1. ,
n +1
i =1
= (n + 1) +
2
i =1
n(n + 1)( 2n + 1)
6
2
(n + 1)( 2n + 7n + 6 ) (n + 1)[(n + 1) + 1][ 2(n + 1) + 1]
=
=
6
6
= (n + 1)2 +
2.5
i > 1, 1/ i2 < 1 / i (i 1). ,
n
i =1
1
=1+
i2
i =2
1
1+
i2
i =2
1
1
1
=1+
-
i(i - 1)
i -1 i
i =2
n
i - 1 - i .
i =2
n
i =1
( ai - ai +1 ) .
1 n + 1, 2, 3, n .
1
1
1
- = 1 - ,
,
n
i -1 i
i =2
n
i
i =1
1
2
2-
1
= O (1) .
n
2.6
merge(A, p, q, r)
array X[p, ..., r]
X[p, ..., q] A[p, ..., q];
X[q + 1, ..., r] A[q + 1, ..., r];
i p; j q + 1;
for k p to r do
if i > q then
A[k] X[j]; j
if j > r then
A[k] X[i]; i
if (i q) and (j
A[k] X[j]; j
else
A[k] X[i]; i
221
j + 1;
i + 1;
r) and (X[i] > X[j]) then
j + 1;
i + 1;
, x , A[p, , q] A[q
+ 1, , r] X. i j
[p, , q] [q + 1, , r]
[p, , r], k
. ,
X[i] (p i q) X[j] (q + 1 j r)
, , .
X[p, , q] X[q + 1, , r] , A[p, , r] ,
.
merge, X ,
for . for r p + 1
, merge .
2.7
binary_search(array A[p,...,n], x)
m (p + n) / 2;
if A[m] = x then return(m);
if n = 1 then return(0); { x }
if A[m] < x then binary_search(A[m + 1, ..., n], x);
else binary_search(A[1, ..., m], x);
T(n) n . T(n)
222
m, A[m] x,
binary_search , n/2 . ( binary search x
). m A[m]
x , binary_search
T(n/2). ,
,
. , :
Q (1)
= 1.
T (n ) =
T (n / 2 ) + Q (1) > 1,
2.8
T (n ) = 4T ( n / 2 ) + n 2.4. i
( 0) n2i. ,
log n (log n + 1 ). ,
log n
T (n ) =
log n
2 n = n 2 2n ,
i
i =0
i =0
n
+
4
n/4
2.4
T(n) =
4T(n/2) + n.
n/2
4
n/4
4
n/2
4
n/4
4
2n
4
n/4
4
4n
+
...
log n
n/2
...
n/2
: (n2)
223
2.9
T(n) = T(n/2) + (1), (1) = (1).
, 2.4 , T(n) = log n + 1. T(n) = (log n).
log 1 = 0, n (n = 2, 3, 4, .)
(log n) . c1, c2
(1) .
c1 log(n/2) T(n/2) c2 log(n/2) , , c1 log n T(n) c2 log n. :
n
n
+ c2
T (n ) c1 log + c1
2
2
c2 (log n - 1) + c2
c1 (log n - 1) + c1
T (n ) c2 log
= c2 log n ,
= c1 log n .
n log n
+
(n/2)log(n/2)
(n/2)log(n/2)
n log(n/2)
log n
+
(n/4)log(n/4)
...
(n/4)log(n/4)
n log(n/4)
2.5
...
...
: (n log2n)
, ( 2.5).
T(n) =
2T(n/2) + n log n.
224
2.5 :
log n
T (n ) =
n log 2
i
i =0
log n
log n
= n log n i
i = 0
i =0
log n(log n + 1)
= n log n(log n + 1)
2
n log n(log n + 1)
=
= Q (n log 2 n ) .
2
3.1
A[p...r]
5
()
i
3
i
6
i
A[p...q]
2
()
()
3.5
partition
= [5, 3,
2, 6, 4, 1, 3, 7].
()
j
1
A[q+1...r]
4
()
partition 3.5,
.
x = 5. , 5 (5 x)
, 3 (3 x) ( 3.5.()).
5 3 ( 3.5.()). 6 1 ( 3.5.()).
6 1, q = j = 5.
13 19 9
5 12 8
225
4 11 2 6 21
13 19 9
5 12 8 7
4 11 2
i
6 19 9
i
5 12 8
4 11 2 13 21
6 21
j
5 12 8 7
4 11 19 13 21
i
3.6
226
3.4
quicksort T(n) T(n) = T(cn) + T(dn) + (n). y 1 ,
partition yn.
( 3.7), i
( 0) y(c + d)in = yn. ,
logcn logdn, (log n). , c + d = 1,
T(n) = (y n log n) = (n log n), y .
yn
yn
+
ycn
(log n)
ydn
y(c+d)n
+
y c2 n
3.7
ycdn
ycdn
y d2 n
T(n) = T(cn) +
T(dn) + (n).
y(c+d)2+n
...
: (n logn)
3.5
A[1, , n].
, (key > A[i]) (key < A[i]),
[1, , n].
minimum(A[1, ..., n])
key A[1];
for i 2 to n do
if key > A[i] then key A[i];
return key ;
minimum n 1
. , minimum n 1 .
227
n 1 / n .
n . ,
. , ,
. , n 1 / .
o(n) / n .
3.6
( 3.8),
i ( 0) (1/c + 1/d)i (n). ,
log(1/c)n log(1/d)n, (log n). , :
T (n ) =
Q (log n )
Q (log n )
Q (n )(1 / c + 1 / d )i = Q (n )
i =0
(1 / c + 1 / d )i .
i =0
Q (log n )
i =0
(1 / c + 1 / d )i ,
. ,
T(n) = (n).
(n)
(n)
(1/d) (n)
(1/c) (n)
(log n)
(1/c+1/d)(n)
+
3.8
(1/d2)(n)
(1/c+1/d)2(n)
+
...
...
T(n) = T(n/c) +
T(n/d) + (n).
228
1/c + 1/d = 1,
= (n log n).
Q (log n )
i =0
(1 / c + 1 / d )i = Q (log n ) , T(n)
3.7
7,
4n/14 ,
4n/14 . ,
5n/7. T(n) T(n) =
T(5n/7) + T(n/7) + (n), T(n/7) . 5/7 + 1/7 = 6/7 < 1, (n) = (n).
3,
2n/3. T(n) T(n) = (2n/3) + T(n/3) + (n). 2/3 + 1/3 = 1, (n) = (n log n). ,
3 , quickselect n .
3.8
quickselect [p, , r] . [p, , r] , partition
.
T(n) quicksort
T(n) = 2T(n/2) + (n), T(n) = (n log n).
,
,
,
quicksort.
3.9
Horner(A[a0, ...an
1],
value 0; i n 1;
while i 0 do
x 0)
229
9.375
(3)
7.875
(3)
2
15.750
(3)
1
0
A1
11.875
(3)
4
3
A2
10.500
(3)
7.125
(3)
4.375
(3)
2.625
(3)
1
15.125
(3)
5.375
(3)
2.500
(3)
750
(3)
0
A3
3
4
3.500
(3)
1.000
(3)
A4
5
5.000
(3)
A5
6
0
A6
4.2
m
d.
230
15.125. 3,
1..3 4..6. 1..3 7.875
1, 4..6 3.500 5. ,
((1(2 3))((4 5)6)).
4.2
RECURSIVE
MATRIX
CHAIN(d[i,...,j])
if i = j then return 0;
m[i,j] ;
for k i to j 1 do
q RECURSIVE MATRIX CHAIN(d[i,...,k]) +
RECURSIVE MATRIX CHAIN(d[k + 1,...,j]) +
d[i 1]d[k]d[j];
if q < m[i, j] then m[i,j] q;
return m[i,j];
m[i, j], 1 i < j
n, m[1, n].
m[1, n] 2 k = 1, 2, , n 1. m[1, k] m[k + 1,
n]. , T(n) m[1, n] :
T (n ) 1 +
n -1
(T ( k ) + T (n - k ) + 1) = n + 2
k =1
n -1
T (k ) .
k =1
, (n) 2n 1,
n 1. , (1) 20 = 1. T(n 1) 2n 2
n 1, , :
T (n ) n + 2
n -1
k =1
2 k -1 = n + 2
n-2
= n + 2( 2 n -1 - 1) 2 n -1 ,
k =0
(n 1) .
, T(n) = (2n).
231
4.3
1 < i < n 1 < j m, xi = yj, xi 1 yj xi yj 1.
c[i, j], c[i 1, j] c[i, j 1] c[i 1, j 1]. , <Xi 1, Yj 1>
<Xi, Yj>, <Xi 1, Yj> <Xi, Yj 1>.
,
.
4.4
LCS length 0
c (c[0, j] c[i, 0]). ,
m ,
, i
i + 1, c[i, j] c[i, j + 1].
c x
4.1. 1,
c[i, j] = c[i 1, j 1] + 1.
4. LCS LENGTH
<, , , >.
4.1
c .
j
i
0
yi
xi
232
4.5
c[i, j] c[i 1, j 1], c[i
1, j] c[i, j 1]. (1) c[i, j]. PRINT LCS .
PRINT
LCS(Xi, Yj)
if i = 0 or j = 0 then return;
if xi = yj then
PRINT LCS(Xi
1,
Yj
1);
print(xi);
else
if c[i, j] = c[i 1, j] then
PRINT LCS(Xi 1, Yj);
else PRINT LCS(Xi, Yj 1);
PRINT LCS (n + m),
i j 1.
5.1
. C =
{2}, C* = {1, 3}.
i
si
fi
10
.
C = {1}, C* = {2, 3, 4, 5, 6, 7, 8}.
i
si
fi
10
A / C
233
10
11
si
fi
5.2
m[i, T]
Ai = {1, , i} . m[i, T] :
0
i = 0 T 0
m[i,T ] =
max{m[i - 1,T ], m[i - 1, si ] + 1} i > 0 T > 0.
m[n, fn], fn . nfn , , ,
(nfn). , fn + O(1) ,
, nfn + (1) ,
.
,
, , , : m[i] = (xi, yi), xi i = {1, , i} yi
. m[i]
:
(0, 0 )
i = 0.
( xi -1 + 1, f i ) i > 0 si yi -1.
f1 f2 fn, m[n]
.
234
5.3
GREEDY KNAPSACK(B, (s1, p1),...,(sn, pn))
for i 1 to n do
r[i] pi / si ;
r[1] r[2] ... r[n];
for i 1 to n do
if B 0 then f[i] 0;
else if B si then
f[i] 1; B B si;
else
f[i] si / B; B B f[i]*si;
return f;
f1 s1, 0 <
f1 1, 1. ,
, , f1s1
1.
( )
1 ,
1
.
f1A s1 1,
f1A s1 < f1s1 . f1s1 - f1A s1 , 1.
, p(A)
p(A), 1
.
, f1s1 1.
, / {1}
f1s1
1
B - f1s1 .
.
5.4
, ,
z , w. z w
z.
z . , z . ,
, .
,
, , .
5.5
. x y, , () = f(x) + f(y).
n
n + 1 .
T n + 1 , T1
n1 < n + 1 , 2 n2 < n + 1 . 1 2, T1
2 1, , ()
1 2,
1 2. 1 f(T1) 1.
, () = f(1) + f(2) + (1) + (2), () 1 2
1 2. , (1) (2)
1 2,
. , ()
.
235
236
5.6
, C = {c1,
c2, , cn} , f(c1)
f(c2) f(cn). , j, 1 j < n, f(cj) < f(cj + 1) l(cj) >
l(cj + 1), l(c) c C.
cj cj + 1. , ,
n
j =1
f ( c j )l ( c j ) .
.
, ,
,
.
6.1
{v, w} 2 ( v
w), (v w). ,
.
, 6.1.(), 12
6.
6.2
G(V, E) , . G
, . u v , p1 p2.
w p1 p2 , w p1 x w p2 y, x
y. , w w
p1 p2. p1 p2 w w ,
G .
, G
. ,
. ,
G , G .
6.3
G(V, E)
.
u,
u v. {u, v}
, G .
,
, , .
V = {a, b, c, d} E = {{a, b}, {b,
c}, {c, d}, {d, a}}.
6.4
G(V, E) {u, v} G.
, d[u] < d[v]. , v
, , , u, v
u. {u, v} u
v ( (u, v)), . {u,
v} ( (v, u)),
, u {u, v}
.
6.5
(G), . , , |V| 1 .
, O(|V| + |E|) = O(|V|).
, .
, |V| .
, , O(|V|).
7.1
1,
2, , n , ( ), = A1 A2 L
An, .
, -
237
238
, ,
, , .
, (n3) O(|X||Y|), .
7.2
= (Q, , q0, ) Turing . = {0, 1} = {0, 1, u}. , > . F = {}, Q = {q0, s, s0, s1} F.
:
pQF
(p, )
q0
(q0, 0, R)
q0
(q0, 1, R)
q0
(s, u, L)
q0
>
(q0, >, R)
(s0, u, R)
(s1, u, R)
(s, u, S)
>
(, >, R)
s0
(q0, 0, L)
s0
(q0, 0, L)
s0
(q0, 0, L)
s0
>
(, >, R)
s1
(q0, 1, L)
s1
(q0, 1, L)
s1
(q0, 1, R)
s1
>
(, >, R)
>1101 ( ).
239
(q0, >1101) (q0, >1101) (q0, >1101) (q0, >1101) (q0, >1101)
(q0, >1101u) (s, >1101u) (s1, >110u u) (q0, >110u1) (s, >110u1)
(s0, >11u u1) (q0, >11u01) (s, >11u01) (s1, >1u u01) (q0, >1u101)
(s, >1u101) (s1, >u u101) (q0, >u1101) (s, >u1101) (, >u1101).
7.3
f1, f2, f3 . f1, DTM 1
1c , .
(c) = (1). f2, DTM 2
1 x. 2 O(n)
(n) x. DTM
3 f3 ,
. , 3
x . x, , 3 1
. |x| = n, 1 , 3 (n +
log n) (log n) .
log n
7.4
R1 1 2, R2
2 3. x, R2(R1(x)),
3 (, DTM 3) R1(x) 2
x 1. R1(x) , R1(x) x (
DTM
). , R2(R1(x)) |x|.
, R1 R2
1 3.
7.5
R 1 2.
x 1, R(x) , x,
R(x) 2. R(x)
|x|. , DTM 2
R(x) 2 |x|.
240
7.6
C, C C.
C , ,
, C. , C C. ,
, , C C. , C = C.
8.1
x
. NDTM
O(n2), |x| = n.
, y, |y| |x|. ,
, y, |y| |x|,
. ,
y ,
y n . ,
, x.
x , N y, , . , y .
, .
, y
O(|x|), y
() (|x|2). ,
y, (|x|)
/ , (|x|)
.
|x| , (|x|2).
8.2
n m .
NDTM
(n) , , (mn).
, , . ,
, , , .
NDTM , NP.
2
NP, , P, NP.
8.3
NDTM
. , 2 NP.
NP , 3
2 .
.
C = {(x), (y), (z), (w), (x y), (y z), (x z), (x w), (y w), (z w)}
, w, x, y, z
FALSE, C
. , x, y, z TRUE ( (x y z)), C
.
.
3 , = (c1 c2 cm),
ci . ci , ci = (li1 li2 li3),
Ci = {(li1), (li2), (li3), (wi), (li1 li2), (li2 li3), (li1 li3),
241
242
. ,
.
,
. , , , .
.
n
n. , T(n) = 2T(n/2) + n.
.
. merge sort
quicksort , FFT Fourier .
.
, , n.
.
244
v, u k v u k.
.
,
.
. ,
, , ,
.
,
. ,
,
.
DTM
DTM (DTM acceptable) DTM
. .
DTM
DTM (DTM decidable) DTM
,
.
NDTM
NDTM (NDTM acceptable)
NDTM , , ,
, .
NDTM
NDTM (NDTM decidable)
NDTM , , , ,
.
. , .
G(V, E)
V .
,
, .
Fourier (Fast Fourier Transform, FFT)
,
Fourier n (n log n).
.
NDTM
NDTM ,
245
246
,
.
, .
, , ,
,
.
, , ,
.
. , ,
.
,
, . .
.
.
, , , , -
.
.
DTIME[t(n)]
/ DTM (t(n)).
EXP
/ DTM .
NP
/ NDTM .
NTIME[t(n)]
/ NDTM (t(n)).
P
/ DTM .
.
.
G(V, E). |V|
, . v v.
247
248
.
.
,
.
. ,
,
. ,
.
Turing (NDTM)
. NDTM
= (Q, , , q0), Q , , , q0 .
,
.
(Random Access Machine, RAM)
.
(.. , , ) .
<v0, v1, , vk1, vk> (v0, v1),
(v1, v2), , (vk1, vk). k,
.
.
Turing (DTM)
.
.
DTM = (Q, , , q0), Q , , , q0
.
.
.
G(V, E). |V|
|V|, [v, u] 1 (v, u) E, 0 .
( )
C,
C, C .
R 1 2
. x 1
R(x) 2.
.
NP
NP.
NP. NP . NP
249
250
, P
NP .
,
. , , .
, .
. ,
.
.
.
. Cook Karp
.
.
.
.
.
. ,
.
.
v, u, v u
u v.
G(V, E) G(V, E)
V V E E. G G V
G V.
.
,
.
,
. -
251
252
, , .
, n,
. n . , n,
.
, n,
.
.
, s, k s k + 1.
. , ,
.