You are on page 1of 256

A

. ,
.

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

3.4.1 Fourier (DFT) FFT

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

5.1.1 A ............................................................................................................... 109


5.2

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

7.1.1 E ................................................................ 149


7.2

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

M Turing .......................................................................................... 173


8.1.1 NDTM

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

173

8.1.2 H NTIME ...................................................................................................................... 175


8.2

H NP

8.3

NP

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

177
179

EPEXOMENA

8.3.1 NP ...................................................................................................... 182


................................................................................................................................................................................ 189
B .................................................................................................................................................................. 190
.........................................................................................

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 ;

(Concise Oxford Dictionary) ( ). , ,


, , .. .
(input), (output). ,
, .
.

( Computer). , .
1930, Church, Godel, Herbrand,
Kleene, Post, Turing, . (.. , ). , ,
,
(partial recursive functions).
, ,
( , , ).
() , .
.

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


. , begin end
, . ,
,
.
6. while <> do <>; <>
, <> ( ) . , loop .
7. for i < 1> to < 2> do <>; <>,
, (< 2> < 1> + 1)
, i < 1> < 2>.
, <>, i
1, <> i < 2>.
, ( )
, . ,
a la russe .
div (a div b), a b.
procedure russe(A, B)
arrays X, Y { }
[1] ; [1] ;
i 1;
{ }
while X[i] > 1 do
X[i + 1] X[i] div 2;
Y[i + 1] Y[i] + Y[i];
i i + 1;
product 0
while i > 0 do
if X[i] then
product product + Y[i];
i i + 1;
return product;

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

. t(n) n2, n3, n ( ), dn (


d) , ,
(quadratic), (cubic), (polynomial), (exponential)
.
()
. , ,
n2 n3 , ( ) 1000 1. 1000 (n > 1000),
. , .

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

(3) j (tj = j).

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

(g(n)), c1, c2 f(n) c1g(n) c2g(n) n.


2.1.(). n n0,
f(n) c1g(n) c2g(n). , n n0, g(n) f(n) .
g(n) (asymptotically tight
bound) f(n).
c2g(n)

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

, (g(n)) , f(n) 0 n. , g(n) ,


, (g(n)) .
(g(n)) , f(n) = (g(n)) f(n) (g(n)), f(n) (g(n)). . , .
,
f(n) = n2 + n + , , , , > 0. ,
n , n2
f(n). , f(n) = (n2). ,
,

c1 = /4, c2 = 7/4, n0 = 2max | b | /a , | g | /a .

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

a i ni , i d > 0, p(n) = (nd).

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

1. selection sort (n2).

2. selection sort (n2).

3. selection sort (n).

4. selection sort (n3).

5.
selection sort (n3).

6.
selection sort (n2).

7.
selection sort (n2).

8. linear search (n).

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 )

2n = o(n2), 2n2 o(n2).


2.1.5

, . ( )
. , 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) = (g(n)) g(n) = o(f(n)). f(n) = (g(n)) lim

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

g(n) = (f(n) log n)

().

g(n) = (f(n) log n)

().

g(n) = (f(n) log n)

().

g(n) = (f(n) log n)

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.

, selection sort ( 1.1)


for , i
i. , insertion sort

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

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


=
+
=
2
2
2
(n + 1)[(n + 1) + 1]
=
2

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

= 1/3, = 1/2, C = 1/6, D = 0. , Q(n) :


n

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.

[5] [2] [4] [8] [1] [3] [7] [6]

[5] [2] [4] [8] [1] [3] [7] [6]

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

merge sort, T (n) = n log


n. (n)
= (n log n). , 1 log 1 = 0, ,
n , .. n = 2, 3, 4, ., T(n) = (1).
T(n/2) = (n/2 log(n/2)), c1, c2, (n) . ,

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 .

, n > 1, c1, c2, , c1 n log


n T(n) c2 n log n. , merge
sort (n log n).
2.9
(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

, n n0, af(n/b) cf(n), c < 1,


T(n) = (f(n)).
, f(n) nlog b a . ,

2.3

55

f(n) nlog b a , ( n, > 0). , f(n) nlog b a ,

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, partition , , . , , , partition (n).


, quicksort
(n) = (n log n). , ,
(n), (log n),
(n) . , O(log n) , partition
(n).
3.4
, partition cn
dn, c, d , c + d = 1.
, , quicksort (n log n).

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

, S(n) = (n log n) S(n) = O(n2), -

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

16 c n(n - 1) log n n(n - 2 )

n -1
2
8

8 cn log n ,
n 3,
n -1

i log i
i =1

n(n - 1) log n n(n - 2 )


.
2
8

n -1
i =1

i log i .
n -1

n / 2 -1

i =1

i =1

n -1

i log i = i log i + i log i


i = n/2

(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

n(n - 1) log n n(n - 2 )


.
2
8

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

[p, ..., r].


swap(A[p], A[i]);
q partition(A, p, r);
m q + 1 p;
if k m then
return quickselect(A, p, q, k);
else
return quickselect(A, q + 1, r, k m);
,
. ,
.
, (.. n/d, d > 1)
, ,
,
( ).
, , .
(n) n/c ,
c > 1, quickselect ( ) T(n).
quickselect,
T(n/c).
n/c
, , n/d. ,
quickselect T(n/d). , quickselect T(n)
= (n) + T(n/c) + T(n/d), (n)
partition.

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]

[14, 15, 12, 10, 9]

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

1/5 + 7/10 = 9/10 < 1, 3.5 quickselect (n).


3.7
quickselect,
7 5.
3;

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

2nXHYH + 2n/2(XHYL + XLYH) + XLYL = 2nZ2 + 2n/2Z1 + Z0, 2 = ,


1 = XHYL + XLYH 0 = XLYL. , (n) n/2 . , 1(n) 1(n) = 4T1(n/2) + (n). ,
T1(n) = (n2).
,
. , 1 (n/2) , = (XH + XL)(YH + YL) (n/2 + 1) , ,
1 1 = 0 2.
(n/2) . , ,
, (n) .
T(n)
T(n) = 2T(n/2) + T(n/2 + 1) + (n). (n/2 + 1) = T(n/2) + (n). ,
(n) = 3T(n/2) + (n), T(n) = (nlog 3) = (n1.59).
.
. , O(n log2 n),
Schonhage Strassen (n log n loglog n),
.
3.3.1

, 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

C11 = A11B11 + A12 B21


C12 = A11B12 + A12 B22
C12 = A21B11 + A22 B21
C22 = A21B12 + A22 B22
, n n n/2 n/2,
n/2 n/2. n n (n2), T1(n)

T1(n) = 8T(n/2) + (n2). T1(n) = (n3).
,
C
. , n/2 n/2:
M1 = ( A21 + A22 - A11 )( B22 - B12 + B11 )
M 2 = A11B11
M 3 = A12 B21
M 4 = ( A11 - A21 )( B22 - B12 )
M 5 = ( A21 + A22 )( B12 - B11 )
M 6 = ( A12 - A21 + A11 - A22 )B22
M 7 = A22 ( B11 + B22 - B12 - B21 )

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.

A(x) B(x) (n 1) (2n


2) C ( x ) =

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

(coefficient representation). , (n) , (n2) , . , x0


Horner (n). Horner,
, .
A(x0) = 0 + x0(1 + x0(2 + + x0(n2 + x0n1) )) .
3.9
x0
Horner. (n).

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;

return Y= [y0, y1, , yn1] ;


, T(n) = (n log n).

n
(n log n) , n
(n log n) , 3.3.
A=[0, 1, , n 1] A(x) Y= [y0, y1, , yn1] 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

k = j, w nk - j = w n0 = 1 , 1/n, (VV1)[k, k]=1,


0 k n 1. k j, (n 1) < k j < (n 1), (k j)
n. q = k j :
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.

.

.

:
.

.
.

top down bottom up


(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

P(1) = 1. P(n) = C(n 1), C(n)


n Catalan:
C (n ) =

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)

if m[i,j] < then return m[i,j];


if i = j then m[i, j] = 0;
else
for k i to j 1 do
q
LOOKUP_CHAIN(d[i 1,...,k], i, k) +
LOOKUP_CHAIN(d[k,...j], k + 1,j) +
d[i 1]d[k]d[j];
if q < m[i,j] then m[i,j] q;
return m[i,j];
MEMOIZED_MATRIX_CHAIN, MATRIX_CHAIN_MULT, m[1n, 1n], m[i, j]

i..j. MEMOIZED_MATRIX_CHAIN m
, LOOKUP_CHAIN, m. LOOKUP_CHAIN
4.2,
, . ,
lookup_chain , .
MEMOIZED_MATRIX_CHAIN (n3). (n2)
m MEMOIZED_MATRIX_CHAIN.
m[i, j], 1 i < j n , () LOOKUP_CHAIN(d[i 1,,j],
i, j). LOOKUP_CHAIN (n).
4.3


(longest common
subsequence) .
,
. , = <x1, x2, , xn>, Z = <z1, z2, , zk>
(subsequence) ,

4 . 3

<i1, i2, , ik> , , j = 1, 2, , k, xi j = z j . , = <, , , > = <, , , , ,


, > <2, 3, 5, 7,>.
x ,
(common subsequence) ,
. , = <, , , , , , > = <, , , , , >, = <, , > . ,
, 3,
= <, , , >
4. ,
5.
, = <x1, x2, , xn> = <y1, y2, , ym>, ,
. x LCS(X, Y), |LCS(X, Y)|. ,
.
, , , . 2n , , .

, .
= <z1, z2, , zk> x . x Y , xn = ym, zk = xn = ym , LCS(n 1, m 1), Xn 1 Ym 1 n 1
m 1 x , .
xn ym , xn ym
. ,
LCS(n 1, ), LCS(X, Ym 1). , xn ym ,
.
-

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

, c[n, m] c[1..n, 1..m],


(bottom up ).
.
LCS

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

5.1: GREEDY SELECTION .


:


, 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

(greedy choice property)


, ()
, .
. ,
,
. ,
, ,
.
,
, , . ,
,

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,

A*f /{ j} B fjsj, n 1 j, , j, (1 fj)sj


(1 fj)pj.
, ,
. , , , (pi / si) -

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

length code), c f(c).


( , prefix code) c
c, c c.

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

C. c C, f(c), 0 < f(c) < 1,


c dT(c)
c ,
c.
|C|
B(T ) =

cC

f ( c )dT ( c ) . () .

5.3.1 Huffman

1952, David Huffman , Huffman.


Huffman .
C ,
|C| 1 . /
. ,
.
.
C .
Huffman (priority queue) Q,
. , heap
n O(log n)
, O(1).
Huffman |C| 1 ,
O(log |C|), O(|C| log |C|).

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

= f ( x )dT ( x ) + f ( b )dT ( b ) - f ( x )dT1 ( x ) - f ( b )dT1 ( b )


= f ( x )dT ( x ) + f ( b )dT ( b ) - f ( x )dT ( b ) - f ( b )dT ( x )
= ( f ( b ) - f ( x ))( dT ( b ) - dT ( x ))
0 ,
f(b) f(x) 0 dT(b) dT(x) 0.
dT(b) dT(x) , b
dT(b) . , 2 1
y c B(T2) B(T1)
B(T). ,
, B(T2) = B(T). ,
, x y
.

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

5.1 5.2 Huffman,


, ,
, C.

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

V. , 6.1.() {1, 2, 4, 5}, {3},


{6}.
u, v .
6.2

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

( Breadth First Search)


,
(..,
, ).
G(V, E) s V,
G, / s.
.

G. , s.
v s ( v 1
s), v
/ (
2 s). , v
2 s,
v . , k
,
k s. k, k + 1. ,
(. 6.5).
,
: ,
,
, ,
, .
, , . ,
, .
, .
, .
, .
v, .

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

d[1, , |V|] f[1, , |V|],


.
1 2|V| . v, d[v] v (, v), f[v] v (, v). v
, d[v] < f[v].
, ,
6.6, .
time 0; {Global }
(G(V, E))
for all v V do
color[v] ; p[v] NIL;
for all v V do
if color[v] = then (v);
(v)
time time + 1; color[v] ; d[v] time;
for all u A[v] do
if color[u] = then
p[u] v; (u);
time time + 1; color[v] ; f[v] time;
, ,
v, v ,
, v . v, v, . ,

, (|V| + |E|).

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

6.2: ( ) G(V, E).


G, u, v,
:
[d[u], f[u]] [d[v], f[v]] .
[d[u], f[u]] [d[v], f[v]] u
v .
[d[v], f[v]] [d[u], f[u]] v
u .
:

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

d[u] > d[v] , v 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

Turing (DTM) q0.


(u),
x *
. x (input
string) .

F. ,
M(x) = (accepts) x.
, M(x) = (rejects) x. x *
L().
,
k ( output tape).
y *
. , M(x) = y. , , x.
DTM M , ,
(configuration). DTM M :
( q,(u1 , u1),(u2 , u2 ),...,(uk , uk )) ,
q , i, 1 i k, ui * i ,
ui * i
. i , -

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 .

L DTM (DTM acceptable) DTM


L, . ,
x L, x, x.
L DTM (DTM decidable)
DTM M x * x L, x L. ,
DTM L *, x *, (x) = , x L,
M(x) = , x L.
DTM
Turing. , DTM M x , DTM
M x. , DTM , , DTM DTM .
Church Turing / / Turing.
(.. definability Church,
Godel, Herbrand Godel, Post, Markov),
/ / Turing .
Church Turing
Turing .

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

7.1: t1(n) t2(n) . t2(n) =


(t1(n) log t1(n)), DTIME[t1(n)]
DTIME[t2(n)].
:

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

, x 1*0, (x) t2(n) ,


. , x,
:
x L (x) = M(x) = x L
, L DTIME[t1(n)] . , L
DTIME[t1(n)], DTIME[t1(n)] DTIME[t2(n)].
7.1
DTIME[nk], k = 1, 2, 3, . , :
DTIME[n] DTIME[n2] DTIME[n3] L
(deterministic
time complexity classes) P EXP. P
, EXP
. , :
P = U k 0 DTIME[n k ] ,

[ ]

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

(l2) = 0. (l1 l2), (l1, l2),


0 ,
. (x) = 0.
, x,
x x G,
.
G,
1 0.
, , l
(l) = 1. ,
l l, (l) = 1. ,
0 (, (l) = 0,
l l, (l) = 0).
,
(l) = (l).
l l. , x, , , x

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

computations), , (halting computations), .


L * NDTM (NDTM acceptable)
NDTM L, x L, (x)
, x L, N(x) .
L * NDTM (NDTM decidable)
NDTM L, , , x *,
N(x) . , L.
NDTM x
(computation tree). (x),
() .
/ / .
/ N(x) , . x, , ,
. , , , ,
( ) , x.
q0

=
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

(polynomially decidable) DTM


x, y *, (x, y) R. , R
(polynomially balanced) (x, y) R, y
x, |y| |x|k, k 1.
8.2: L NP R
, L = {x: (x, y) R y}.
: , R. , L
NDTM ( x)
/ y, |y|
|x|k , , DTM
(x, y) R. y
|x|k .
, ,
NDTM . , y
, (x, y) R, , x. , , x.
, L NP NDTM
L nk. R : (x, y) R y
x. R
, x,
|x|k , , . , R , y
x. L, L L = {x *: (x, y) R y}.

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
:

j, t) i j t, 1 i t(n), 1 j m, 1 t t(n), m t2(n) .

(i, t) i -

(i,

t, 1 i t(n), 1 t t(n), t2(n) .

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

1. selection sort (n2).

2. selection sort (n2).

3. selection sort (n).

4. selection sort (n3).

5.
selection sort (n3).

6.
selection sort (n2).

7.
selection sort (n2).

linear search (n).


, linear search (1). , 8 11 .
8. linear search (n).

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 .

, C(n) = (n4), C(n)


An4 + Bn3 + Cn2 + Dn + E.
,
n.
.
n = 1: A + B + C + D + E = 1
n = 2: 16A + 8B + 4C + 2D + E = 9
n = 3: 81A + 27B + 9C + 3D + E = 36
n = 4: 256A + 64B + 16C + 4D + E = 100
n = 5: 625A + 125B + 25C + 5D + E = 225
A = 1/4, B = 1/2, C = 1/4, D = E =
0. ,
C (n ) =

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 = log n, , 2log n = n. , T(n) = log n + 1.


2.6
. :
T (n ) = 3 + T (n - 1)
= 3 + 3 + T (n - 2 )
M
32
= 31+4
+L
+33 + T (n - i ) .
4
44
i

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.

( 2.6). 1/5 + 7/10 = 9/10,


9/10 ( , 1/5 , 7/10 ). ,
log5n log10/7n, , (log n). , :
T (n ) =

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

(n log(n/k)), S(i) = (1), i < k.


quicksort, k
. , insertion
sort O(kn),
k , .
, quicksort
insertion sort O(kn + log(n/k)).

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

B(x) =B1(x) + xn/2 B2(x), B1 ( x ) =

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

(n/2 1) . (n), T(n) C(x)


T(n) = 3T(n/2) + (n),
T(n) = (nlog 3).

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

1...m]. s[i, j] k m[i, j]. ,


m[i, j], k s[i, j].

MATRIX CHAIN MULT :
if q < m[i, j] then
m[i, j] q; s[i, j] k;
return (m[1, n], s);

.
C d1 d2 d2 d3, . d1 d2
d3 .
MATRIX

MULTIPLY(A,

B, d1, d2, d3)

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

top down c[n, m, p]


, .
MEMOIZED

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

3LCS(Xn, Ym, Zp);

3LCS(Xi, Yj, Zk)

if c[i, j, k] < then return c[i, j, k];


if i = 0 or j = 0 or k = 0 then
c[i, j, k] 0; return c[i, j, k];
if (xi = yj = zk) then
c[i, j, k] = LOOKUP 3LCS(Xi
else
tx = LOOKUP 3LCS(Xi
ty = LOOKUP 3LCS(Xi,
tz = LOOKUP 3LCS(Xi,
c[i, j, k] = max{tx,
return c[i, j, k];

1,

1,

Yj, Zk);
Yj 1, Zk);
Yj, Zk 1);
ty, tz};

Yj

1,

Zk

1);

206

c[1..n, 1..m, 1..p]


(1) . c nmp , c[n, m, p] (nmp).
4.3
i / Yj i / j / .
, c[i, j] Xi Yj. Xi j :
i 1 j [i] ( c[i 1, j] + d).
Xi j 1 [j] ( c[i, j 1] + b).
Xi 1 Yj 1 X[i] [j],
( c[i 1, j 1] + b, = 0 X[i] = Y[j] 1 ).

. , c[1..n, 1..m].
id

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

if c[i, j] > c[i 1, j] + d then


c[i, j] c[i 1, j] + d;
return c[n, m];
nm + (1) .
min{n, m} + (1).
c[i, j]
i i 1. c[i, j]
c[1..n, 1..m].
c[i, j 1]
t. c[i 1, j 1], c[i 1, j] c[i, j 1]
c[i, j], c[i, j 1] c[i 1, j 1],
. t c[i, j]. , c
c[i, j]. n, m
c, min{n, m} +
(1) .
5.1

(interval coloring problem), , . ,
.
d /
. , d . i, 1 i n,
si. , k, k. ,
d , .
GREEDY INTERVAL COLORING(A = [(s1, f1),...,(sn, fn)])
F max{fi: 1 i n}; c 1;
for k 0 to F do
for all j {i : 1 i n and fi = k} do
c c 1;

207

208

for all j {i : 1 i n and si = k} do


C[c] = j; c c + 1;
return C;
, (Fn). fi si , fi = sj, i j, i j,
.
,
k . , , O(n log n).
5.2
x , x1 x2 xn. z
, [z, z +
1], x [z, z + 1] .
,
(n). ,
, (n log n).
, =
[x1, x1 + 1]. , J
x1. x1, J
. ,

( ).
= / { = [x1, x1 + 1]}.
= / {}
( ). ,
, {I} ,
. .
, .

A A

( ) ,
,
.
5.3
,
, , ,
.
g2 , g1 g0 , :
0 20 g2 < 20, g 2 = X 20 .

= 20 g2, 0 5g1 < 5, g1 = X 5 .

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

G(V, E) , V1, V2 . xi TRUE, i V1 xj FALSE, j V2, G, (i, j), i V1 j V1 i V2 j


V2. , G , : {x1, x2, , xn} a {0, 1}
G. V1 = {i
V: A(xi) = TRUE } V2 = {j V : A(xj) = FALSE }.
, G, V1 V2. , G(V, E) .
8.1
L1, L2 NP. , NDTM 1, 2 L1 L2, . L1 L2 = {x * : x
L1 x L2 }. x L1 L2, N1(x) x 1 . -

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

555 h, 33 min, 20 sec

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)

g(n) =n logn, n =4)

(f(n) = n,

(f(n) = n,

g(n) =n logn, n = 1)

g(n) =n logn, n =4)

(f(n) = n,

(f(n) = n,

(f(n) = n,

(f(n) = n,

g(n) =n logn, n = 1)

g(n) =n logn, n =4)

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

2.4. , (1) = 1 n 2, T(n) = n(2n 1).


n

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


2.10
n 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

partition B = [13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 21]



3.6.
partition
3.2
partition, A[p,
, r], q, x . j , i ,
j ( q),
i j, j + 1 . , ,
x. , A[p,, r] x , partition (r p + 1) = (n).
3.3
quicksort (n log n)
, , partition . [5, 1, 2, 4, 7, 3, 6, 8]. , partition [3, 1, 2, 4] [7, 5, 6, 8]. [3, 1, 2, 4]
[2, 1] [3, 4], [7, 5, 6, 8] [6, 5] [7, 8]. , [5, 1, 2, 4, 7,
3, 6, 8] (n log n).
[9, 1, 2, 4, 7, 3, 6,
8, 13, 5, 10, 12, 15, 11, 14, 16].
, quicksort
(n2) , , partition
1 n 1.
.

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

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

...

...

(1/c2)(n) 2(1/c)(1/d) (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

value A[i] + value x0;


i i 1;
return value;
while n ,
, . , Horner (n).
4.1
, d n = 6.
MATRIX CHAIN MULT m[i, i], i = 1, ,
6, 0. , m[i, j], 1 i < j 6,
:
0
i = j
m[i, j] =
min{m[i, k ] + m[ k + 1, j] + di -1d k d j } i < j
i k < j
matrix chain mult 4.2,
,
. 4.2 i..j, , k
, k Ai..j = Ai..k Ak + 1..j.
6
5
j

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

. 6 . 6, , .. C = {1, 6, 8}, , .. C* = {1, 5, 7, 10}.


i

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.

m[i] = ( xi -1 , yi -1 ) i > 0 si < yi -1.

( 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

(li1 wi), (li2 wi), (li3 wi)},


wi Ci.
2
Ci, i = 1, 2, , m. 7m.
.
,
7m ci
, .
8.4
NP, NDTM
C,
.
NP , . C V C . V C ,
G C,
C G. ,
C , V C ,
G V C.
, G(V, E) G(V, E) |V|
K. NP .


. ,
.

,
. , , , .

.


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.


. , ,
.

You might also like