, , ( 2). , 10 2013 (): - : http://www.programirane.org -
Facebook : http://www.facebook.com/groups/168112146541301 1 - , 2
740 : , 2012. , , . . . = ++; pdf , , , . , . , pdf .
.............................................................................................................................
3
..........................................................................
13
...........................................................................
15 0 , , 17 0.1. .................................... 18 0.1.1. -
...................................................................................
18 0.1.2.
....................................................................
19 0.1.3.
...................................................................
20 0.1.4.
...............................................................................
20 0.1.5.
......................................................................................................
21 0.1.6.
......................................................................
21 0.1.7.
........................................................... 22 0.2.
................................................................................................................
23 0.3.
...................................................................................................
24 0.3.1.
.............................................................................
24 0.3.2.
.........................................................................................
25 0.3.3.
.................................................................................................
25 0.3.4.
....................................................................................................................
26 0.4. =
++...........................................................................................
26 0.4.1.
................................................................................
26 0.4.2.
...................................................................
27 0.4.3. C?
..........................................................................................................................
28 0.4.4.
.............................................................................
29 0.5.
...........................................................................................................................
29
.................................................................................................................................
29 0.5.1.
................................................................................................................
29 0.5.2.
...........................................................................................................
30 0.5.3.
....................................................................................................
30 1
......................................................................
33 1.1. ...........................................................
33 1.1.1.
..............................................................................
33 -
...........................................................................................................................33
-
....................................................................................................................................35
- . ...................................37 -
...........................................................................................................38
- , , n-
............................................................................................39
- .
........................................................................................40
-
...............................................................................................................................41
1.1.2. ...........................................................
43 1.1.3.
...................................................................................................................
44 -
................................................................................45
- . ...............................................47 -
..............................................................................50
- , ........................................51 4 1.1.4.
......................................................................................
52 -
.................................................................................................................52
- .
.....................................................................................54
1.1.5. , . ........................... 56 1.1.6.
................................................................................
59 - p- .........................................................61
- p- . .......................63 1.1.7.
..................................................................................................................
65 -
.............................................................65 -
....................................................................66
1.2.
............................................................................................................
67 1.2.1.
.......................................................................................................................
68 1.2.2.
......................................................................................................
69 1.2.3. - .
........................................................ 74 1.2.4.
-
...............................................................................................
76 1.2.5. ....................................... 77 1.3.
................................................................................
80 1.3.1.
.....................................................................................................................
80 -
...........................................................................................................................81
-
.......................................................................................................84
-
...................................................................................................86
1.3.2.
..........................................................................................................................
86 - ,
.............................................................................................................86
-
.............................................................................................................................88
1.3.3.
.....................................................................................................................
90 1.3.4.
.........................................................................................................
92 - ...........................92 - .........................93 -
...........................94 1.3.5.
.............................................................................................
96 -
.....................................................................................................96
1.4.
...................................................................................
97 1.4.1.
............................................................................................
99 1.4.2.
...............................................................................................
99 1.4.3. O(F):
..........................................................................................100
1.4.4. O(F):
.........................................................................................102
1.4.5. O(F):
.........................................................................................103
1.4.6.
..................................................................105
1.4.7.
..........................................................................106
1.4.8.
..................................................................107
-
.......................................................................................................
107 -
.......................................................................................
107 -
................................................................................................
107 - if-
...................................................................................................................
107 -
.................................................................................................................................
108 -
..................................................................................................................
108 -
.......................................................................................
109 -
...................................................................................................
110 -
............................................................................................................................
110 1.4.9.
.....................................................................................112
- ............................................................. 112
5 - ..............................................................
114 -
.....................................................................................
114 1.4.10.
........................................................117 -
..................................................................................................
117 -
....................................................................................................
118 -
...............................................................................................................
118 1.4.11.
..............................................................120
1.5.
...............................................................................................................120
1.5.1.
........................................................................................................120
1.5.2.
..................................................................................................................133
- , ,
....................................................................................
133 -
....................................................................................
137 -
.......................................................................................................
138 2 ...............................................143 2.1. , ,
........................................................................................................144
-
....................................................................................................................................
145 -
...............................................................................................................................
146 -
.....................................................................................................................................
147 2.1.1 ()
..................................................................147
-
....................................................................................................................................
147 -
...............................................................................................................................
149 2.1.2 ()
.............................................................................151
-
.......................................................................................................
152 -
........................................................................................................
153 - , ...........................................................
153 - , ...........................................................
154 - ....................................... 154 - ,
................................................................
155 2.2.
................................................................................................................158
-
.....................................................................................................
163 -
.....................................................................................................
164 -
..................................................................................
164 -
.........................................................................................................................
168 2.3.
........................................................................................................169
2.3.1. . -
.............................................................................172
2.3.2. B-
......................................................................................................................174
2.4. -
........................................................................................................................176
- -
.....................................................................................................................
176 -
.............................................................................................................................
177 2.4.1. -
.............................................................................................178
-
...................................................................
178 -
..............................................................................................
178 - -
.................................................................................
179 - - ..........................................................
179 - -
..............................................................................
180 2.4.2.
.......................................................................................................184
-
............................................................................................................184
-
.............................................................................................................
184 -
......................................................................................................
185 -
..............................................................................................................
185 -
..............................................................................................................185
6 -
........................................................................................
185 -
..................................................................................................
186 2.4.3. -
.......................................................................................186
2.5.
...............................................................................................................192
2.5.1.
........................................................................................................192
2.5.2.
..................................................................................................................196
3
...........................................................................................................199
3.1.
................................................................................................200
3.1.1.
.................................................................................................200
3.1.2.
...........................................................................................201
3.1.3. . .............203 3.1.4.
....................................................................................................206
3.1.5.
.............................................................................................207
3.1.6.
...........................................................................................208
3.1.7.
.....................................................................213
3.1.8.
........................................................................................215
3.1.9.
.........................................................................216
3.1.10. .....................219 3.2.
......................................................................................221
3.2.1.
......................................................................................221
3.2.2.
................................................................................................223
3.2.3.
..................................................................................................226
3.2.4.
.....................................................................................229
3.2.5.
......................................................................................232
3.3.
........................................................................................................233
3.3.1.
...............................................................................235
3.3.2.
.................................................................................236
3.3.3.
...............................................................................................237
3.3.4. ........................................................237
3.3.5.
..............................................................................................................237
3.3.6.
.........................................................................................................238
3.3.7.
.........................................................................238
3.3.8. -
...............................................................239
3.3.9. -
.............................................................................239
3.3.10.
...............................................................................................239
3.4.
...............................................................................................................240
3.4.1.
........................................................................................................240
3.4.2.
..................................................................................................................243
4
.................................................................................................................245
4.1.
.................................................................................................246
4.1.1. .........................................................248
4.1.2.
...........................................................249 4.2.
.
..................................................................251
4.3.
.................................................................................................................252
4.4.
.......................................................................................................256
4.5.
..............................................................................................258
4.6.
...............................................................................................................260
4.6.1.
........................................................................................................260
7 4.6.2.
..................................................................................................................261
5
.......................................................................................263
5.1.
...............................................................................................................263
5.2.
........................................................................267
5.2.1.
.......................................................................................................267
5.2.2. , .......................................................268
5.2.3. ( ) .............................................268 5.2.4.
............................................269 5.2.5.
........................................................................................269
5.2.6.
...............................................................270
5.3.
............................................................................................................271
5.3.1.
...................................................................................................271
5.3.2.
..............................................................................................274
5.4. ,
................................................................276
5.4.1. .......................................277 - -
................................................... 277 -
.........................................................................................
279 - ...................................................... 281
5.4.2.
.............................................................................................283
-
.............................................................................................
284 - -
...............................................................................................
284 -
..........................................................................................................
285 -
...........................................................................................
288 -
......................................................................................................
290 -
................................................................
293 - ...........................................................
293 - -
.......................................................................................
294 - - ............................................... 297 5.4.3.
...............................................................................................................................297
- ............................................................ 297
-
..............................................................................................
300 5.4.4. . .............................................300
5.4.5.
.............................................................................................................303
5.4.6.
...........................................................................................................................306
-
.............................................................................................................
307 -
............................................................................
311 -
......................................................................................................
312 5.5. . .........................................312 5.5.1. .
...................................................313 5.5.2.
.........................................................................................314
5.5.3.
.................................................................................................317
5.5.4.
..................................................................................................318
5.5.5.
..............................................................................................320
5.5.6.
..................................................................................322
5.5.7. .....................................................324
5.5.8. ......................................325 5.6.
.............................................................................................326
5.6.1.
........................................................................................326
5.6.2. .........................................328 5.6.3. .
.....................................330 8 5.6.4. k-
........................................................................333
5.7.
.........................................................................334
5.7.1.
....................................................................................334
-
.......................................................................................................
334 -
............................................................................................................
338 -
...........................................................................
340 5.7.2.
..............................................................................................340
-
..................................................................................
341 5.7.3.
............................................................................................343
5.7.4.
..................................................................................................................................346
5.7.5. ,
.......................................................................................348
- p- p-
..........................................................................................................
350 5.7.6. . ................................................353
5.8.
..............................................................................................354
5.8.1. .
.................................................................354
-
..................................................................
355 -
...................................................................
355 5.8.2.
..................................................................................................355
5.9.
...............................................................................................................357
5.9.1.
........................................................................................................357
5.9.2.
..................................................................................................................363
6 . NP- ..........................................369 6.1.
.............................................................................................369
6.1.1.
.....................................................................................................369
6.1.2.
....................................................................................................370
6.1.3.
..........................................................................................................370
6.1.4.
..........................................................................................................................370
6.2. NP-
................................................................................................................373
6.3.
.............................................................................................................374
6.3.1.
......................................................................376
6.3.2.
.....................................................................................................380
6.3.3. -
....................................................................383
6.3.4.
...........................................................................................................385
6.3.5.
............................................................................................388
6.3.6.
...........................................................................391
6.3.7.
................................................................................................395
6.4.
...........................................................................398
6.4.1. (
).............................................................398
6.5.
......................................................................................401
6.5.1. "X"-
"O".....................................................................................................402
6.5.2.
.........................................................................405
6.5.3. -
....................................................................................................406
6.5.4. - ...................................................408
6.6.
...............................................................................................................409
6.6.1.
........................................................................................................409
6.6.2.
..................................................................................................................413
- NP-
................................................................................................................
413 -
...........................................................................................................
425 7
.......................................................................................427
9 7.1. K-
......................................................................427
7.2.
.............................................................................................................................434
7.3.
.......................................................................................445
7.4.
....................................................................................................450
7.5.
................................................................................................456
7.6. .........................................458 7.7.
.................................................................................461
7.8.
.............................................................................................464
7.9.
..........................................................................................466
7.10. ......................................................471
7.11.
.......................................................................................................474
7.12.
.............................................................................................................475
7.12.1.
......................................................................................................475
7.12.2.
................................................................................................................478
8
.........................................................................481
8.1.
.............................................................................................................................481
8.2.
...........................................................................484
8.2.1.
.....................................................................................................484
8.2.2.
..........................................................................................................495
8.2.3.
..............................................................................................497
8.2.4. . ...............................................504 8.2.5.
............................................................508
8.2.6. -
........................................................................................513
8.2.7. -
........................................................................517
8.2.8.
...................................................................................522
8.2.9.
.................................................................................................526
8.3.
..............................................................................................528
8.3.1.
.......................................................................................................528
8.3.2.
.................................................................................................532
8.3.3.
.............................................................................................................533
8.3.4. .................................................537 8.3.5.
.....................................................539 8.3.6.
.................................................................................540
8.3.7.
..........................................................................................542
8.3.8.
...........................................................543
8.3.9.
............................................................................................................548
8.3.10.
.................................................................................................549
8.4.
.................................................................551
8.4.1.
.............................................................................................................552
8.4.2.
...............................................................................................................553
8.4.3.
.......................................................................................................555
8.4.4. ....................................................559
8.4.5.
............................................................................................561
8.4.6.
...................................................................................................564
8.4.7.
............................................................................................565
8.4.8.
.............................................................................................................568
8.4.9.
....................................................................................................571
8.4.10.
.........................................................................................574
10 8.4.11.
.............................................................................................................576
8.4.12. -
............................................................................................................579
8.4.13.
..............................................................................................582
8.5.
...............................................................................................................584
8.5.1.
........................................................................................................584
8.5.2.
..................................................................................................................591
9 ..................................595 9.1.
...............................................................................................................595
9.1.1.
...........................................................................................................596
9.1.2.
........................................................................598
9.1.3.
.................................................................601
9.1.4.
...................................................................................604
9.1.5.
.......................................................................................605
9.1.6.
.....................................................................................607
9.1.7.
...............................................................................................608
9.1.8. . .
...........................................................610 9.2.
.......................................................................................................616
9.2.1.
......................................................................617
-
..........................................................................................
618 9.2.2.
..........................................................................621
9.2.3.
..................................................................................................622
9.3.
........................................................................627
9.3.1.
.........................................................................................628
9.4.
...............................................................................................................629
9.4.1.
........................................................................................................629
9.4.2.
..................................................................................................................633
10
..............................................................................................637
10.1.
............................................................................................................................637
10.2.
........................................................................................................638
10.3.
................................................................................640
10.3.1.
...............................................................................................640
10.3.2.
................................................................................641
10.3.3.
........................................................................................643
10.3.4. ...........646 10.3.5.
.................................................................................................646
10.3.6.
.....................................................................................................648
10.3.7.
.............................................................................................649
10.3.8. . .........................650 10.3.9.
............................................................................653
10.3.10. : PackBits
..............................................................655
10.4.
....................................................................................................656
10.4.1. -
......................................................................................656
10.4.2.
...............................................................................................660
10.4.3.
.............................................................................671
10.4.4. K
......................................................................................................672
10.4.5.
............................................................................................673
10.5.
..............................................................................................681
10.5.1.
....................................................................683
11 10.5.2.
......................................................................................................686
10.5.3. :
MNP-5...................................................................688
10.6.
.......................................................................................................690
10.6.1.
.....................................................................................................................691
10.6.2.
...........................................................................................................695
10.6.3.
.............................................................................................696
10.6.4.
....................................................................697
10.6.5. LZ77.
..........................................................698
10.6.6. LZSS.
..............................................................................................698
10.6.7. FLZ. LZ77
......................................................................................699
10.6.8. LZW.
................................................................................700
10.6.9. GIF. CompuServe
.....................................................................706
10.6.10.
....................................................................707
10.6.11.
................................................................................708
10.6.12. LZW
..................................................................................................709
10.7.
..............................................................................................710
10.7.1.
..................................................................................710
10.7.2. JPEG
..............................................................................................................................711
10.7.3. . MPEG
.......................................................713 10.7.4.
......................................................................................................................715
10.7.5.
.......................................................................................716
10.8.
.............................................................................................................717
10.8.1.
......................................................................................................717
10.8.2.
................................................................................................................725
...........................................................................................................................727
......................................................................................................733
12 - (, ) - , . , , " " . , - , , "" Introduction to Algorithms
Cormen, Leiserson Rivest, . , "-", , . , . , . -. . , , , ( "" ) ..
, , . - . , . , , , . , - . " ", , , . , - . , , -, - . , , , - ,
.., , , .., , , , , . . , . , - . , , - , . , , , , . 1 2002 14 15
, . , : - , ; - , -mail . , ( ) , . - , ( ) . ! , , . , - : - ; - ,
; - ; - . ! , ! , 3 2005 . 16 0 , , "Think of all the psychic
energy expended in seeking a fundamental distinction between
'algorithm' and 'program'". ~ Epigrams in Programming [Adams-1980]
, , . , 1975 ( ), - , , , , . , , , , , . , , - . , , . 10 [, .] ,
, , . - , -. , ( ) computer science, . - , : ( : ), (:
informatique), (: informatik) . informatics , . , informatics : , -
computer science ( ), Microsoft Word . : (. International Olympiad
in Informatics), (. Balkan Olympiad in Informatics). ... , - , , .
0 - , 18 0.1. , - - , 0.1. ( ? ?) 0.1. . 0.1.1. - , - . - , - - . -
, . - : , , . 0 - , 19 , - . . - : " , - , ". , : , -, , , () , . ,
, , , , , . ( 0.1.1., 0.1.1. 0.1.1.). 0.1.1. : , . 0.1.1. - : , .
0.1.1. , . 0.1.2. , , - , , . - 0 - , 20 , , , ( , ). , , , , () .
, . , -, , , , -. , - . - - , -, . , ( . hacker, hacking) ( .
cracker, cracking) . , . ( ), , , . , . - - . , , , . 0.1.3. 10 -
.. . - - ( -, - , ). , , - . , : , . , . 0.1.4. , , . ""- Maxis . ,
, - . , - , . -- 0 - , 21 -. 0.1.5. , . , : - : , . - : , , . : ( )
( ). , , , , , . - , , : , . , : ? , , , -, . - . . -, . () , , . -
- . -, . 0.1.6. , , . , , . , , : , , . , , ( ). ( ) ( 0 - , 22 ).
() , . . - ( -) - "" . - - . , . . , - . - . 0.1.7. - : . , - - . :
. , (, , , .). , . , , . , , , 25 . , , . , . . - : ( ). , , , : ,
- ( ) . 0 - , 23 0.2. ( . lamer), . , , , [-1989]. , - , , . -, - ,
, , , . , , . , , : i++; /* i */ e , , Minesweeper Windows - , 1
[Prize-2000]. , , . , , 10 . , . , , ( . garbage collector) , Java,
, XX . , , - Google , . , , - + . , , " , O(n2)", - O(n3), n3 >
n2. , C - , . , , , . , , , , , A B C D E F . , , , . 0 - , 24 , 10
10 -, , 10 , 10% -. , brute-force- ftp ( . File Transfer Protocol )
, , hack- , - 5 ( ), . , ( /, ). , , - (, ). , . , : 0x000000FF
& (i >> 24) , - , : = |.|
\| =niinmfmn122_ , . , - , : , , . , , . , - , . , , -. ( ): , .
, , , : , . 0.3. , . , . , , . 0.3.1. al-Khowarizmi, VIII Al-jabr
wal muqabala (, - ). - , : 0 - , 25 Al-Khashi, XV t 16 . , , . ,
XII- Al-* , , , , [Knuth-1/1968]. , , : - ; - , ; - , - . ( ) - ,
(, - ). - , . , . . -, , . , , XX . 0.3.2. 300 . . . . , - m n: 1)
m - n, . 2) m : m n. 3) m 0, 1), m n. 4) (- ) n. 250 . . . . , , -
. , -, 250 . . . . , ( ), - . : . 780-850 . , , Abu Ja'far Mohammed
Ben Musa al-Khwarizmi "Hisab al-jabr w'al-muqabala". 1424 . ,
Ghiyath al-Din Jamshid Mas'ud al-Kashi t 16 . 0.3.3. 1845 .
(Gabriel Lame , , , ) , , 5 - . 0 - , 26 1910 . , . 0.3.4. 1900 . (
) - . 1920-30 . , . 1930 . -. 1936 . , , . ( , .) . XX ( ) , . - ,
, . , , XXI , . , , , , . 0.4. = ++ , . : - ; - ; - C , ; - , . : ,
, ? , : 1. = ++, = -++. 2. . 3. ++: ++ . 0.4.1. - . ( , , ), , , .
0 - , 27 , , . - - ( - - ). , , ++, Java. - ( ) , . -, . - , , " ".
, . , , . , / , - . - - , , . ( . -, , .). - ( ) ( -). 0.4.2. 1. "
" - , , , - . 2. " " - - , , . 3. "" 4. "" "" . , ( ) - "" . - . -
, - . , . - , -, . 5. " " 6. " . NP- " 7. " " 8. " " 9. " " 10. ""
0 - , 28 0.4.3. C? - . ( upgrade ++) , , -, . - ( ) "- " Java. , -,
"" , Java ( -). : - , - "" , - ( ). , ( ) . , , - , . , , -, - . ,
++? upgrade- , . , - ++ , , , . , : , , - , . , , - Algorithms in
Pascal, - , ++ Java. - ++. , ? , . : - , - , , - , -: - -. , , . :
( ), , 10 . Delphi. , . informatics, . Borland International , .
Delphi . Macintosh ( , ) Linux, Unix . : ++, Java, - . , -- Java,
Javascript, Perl, PHP - : , . 0 - , 29 0.4.4. (, , , - ..), , - ""
- . DOS ( Borland C++ 3.1), Windows ( Visual C++ 6.0). ANSI .
Windows, DOS, - / . 0.5. , , . . 0.5.1. -, , - , , . , " " ( ). , ,
. SAP Labs Rila Solutions . , ( ), - , - ( , deadline . 22:20 01:55
.). . - ( - ). ( ) , , , ( .). . , - , . , . - , , , , -, , , , , .
0 - , 30 , - , , . - ( -, . ). ( ), -. , . , " " - , bold , - .
0.5.2. , http://www.nakov.com/algoplus-bugs/submit-bug.php: (20),
(15), (12), (12), (6), (5), (3), (3), (3), (3), (3), (2), (2), (2),
(2), (2), (2), (2), (2), (2), (2), (2), (2), Ka (1), (1), (1), (1),
(1), (1), (1), (1), (1), (1), (1), (1), (1), (1) (1) . 0.5.3. . , ,
- - , . , , -, (, ) - ( ). :
http://www.facebook.com/groups/168112146541301 :
[email protected]; [email protected] [email protected];
[email protected] - , . - : http://www.programirane.org : ; ,
; ; ; ; ; - . 0 - , 31 1 " : , , , ." ~ 1.1. , -. , - , . 1.1.1. ,
, , . , , , , . -. , . . - -. - . , , () , - , . , , , , , ax2 + bx
+ c = 0 . - : A, B, C, ... . , , - ( ). , A a1, a2, ..., an : A =
{a1, a2, ..., an} , ai, i = 1,2,...,n, A aieA, aieA. - ( A - n),
|A|. n = 0, C. -, ( 1.1.1.): 1 - 34 , (a, b, ) , , , . A - a - b
1.1.1. . , , [,-1973]. , -. 1.1. A - B, A B. _B ( 1.1.1.). - , B ,
A () B. cB. A B A A B B B A (a) () () () 1.1.1. (), (), () () .
1.2. C A B, a , aeA aeB. C = AB. 1.3. C = AB A B C, , A B. 1.4. C =
A\B A B C, , A, B. 1.5. , . . -, . , , . (): {a, a, b} {a, b, b}
{a, b, a} {a, b} {b, a} 1.6. , , -. 1.7. n- , - n- (). 1 - 35 n- ,
. , (a, b, c) (a, c, b) .. : 1. A = {1,2,4,5,7} B = {2,3,4,5,6}. :
AB, AB, A\B, B\A. 2. A B , AB = A. B? 3. A B : AB = (AB) \ (AB). A
= {1,2,4,5,7} B = {2,3,4,5,6}. 4. - , A - B = B - A. : AB, AB, A\B,
B\A, AB? - , - . ( 3 "" : , ), . . , - , , . 1.8. ( N) -, 0, 1, 2,
3, .... , . - : , . , N - , . , n- . 1.9. Z : ..., 3, 2, 1 ( ), 0
(), 1, 2, 3, ... ( ). , [-1995]. - , , . -. ANSI C (American
National Standards Institute [ANSIC]) ( 1.1.1. Borland C DOS), -, :
|short| s |int| s |long| int ( , DOS 2 , Windows 4). , unsigned, ,
: (unsigned)(-1). 1 - 36 1.1.1a. Borland C DOS. 1.1.1a. , . , . , (
-) , ( . overflow) . 1.10. p/q, p q q -. Q. 1.11. , : x = n +
0,d1d2d3... , n , di 0 9. 0,d1d2d3... . , k kkkkd d dn xd d dn10110
100 10 10 100 102 1 2 1+ + + + + s s + + + + keN, k > 0. , di .
(.. ) . - 1/3 = 0,333333..... 3 . 1/3 = 0,(3) . - , 1/7 =
0,(142857). , , .. p/q (p,qeN, q > 0), t: t = 3,1415926535 ....
, t - 355/113, , ( 6 ) . 22/7. : , [-1995]. , - IEEE (Institute of
Electrical & Electronics Engineers). , . 1.1.1. Borland C DOS.
float 3,4.1038 , ..., 3,4.1038 32 double 1,7.10308 , ..., 1,7.10308
64 long double 3,4.104932 , ..., 1,1.104932 80 char 128, ..., 127 8
unsigned char 0, ..., 255 8 short int 32768, ..., 32767 16 int
32768, ..., 32767 16 long int 2147483648, .., 2147483647 32
unsigned short int 0, ..., 65535 16 unsigned long int 0, ...,
4294967295 32 1 - 37 1.1.1. Borland C. , ( . underflow): ( , ). :
1/3 . , , - c (c > 0) , ( ), - c , 0. : , , - . - . m n , m = 0.
q r (0 s r < m) , n = q.m + r. q n/m, r . r , , m n (n m) m|n. (
) / %. "", : q = n / m; r = n % m; 1.12. (n m) % z = 0, , n m z n m
(mod z). n. : ( ) n 10. , n . , n , , n : #include unsigned n =
4242; int main(void) { unsigned digits; for (digits = 0; n > 0;
n /= 10, digits++); printf(" %u %u\n", n, digits); return 0; }
digits.c : 1. m n, (m,n) : (7,3), (7,3), (7,3), (7,3), (3, 7),
(3,7), (3,7), (3,7). 2. m n (m = 0) - n = q.m + r, 0 s r < m,
(q, r ). [-1995] 3. . ? 1 - 38 - a1, a2, ... , an. S = a1 + a2 +
... + an - : ==niia S1, s s=n iia S1, ==n iia S.. 1 R(x), i : =) (
: x R iia S C Sn n : unsigned sum(unsigned n) { unsigned i, s = 0;
for (i = 1; i 0, y > 0 x. y b logb y. (x > 0, y > 0, b
> 0, b 1, c > 0, c 1): ) 4 (logloglog) 3 ( log . log) 2 ( log
log ) ( log) 1 ( loglogbxxx y xy x xyb b xccbbybb b bxbxb== + == =
- , 2 log x log2 x. ln x log x: H e = 2,71828... ( 1.1.6.) : 1. - ,
. 2. (1), (2) (3) , . - . n, neN ( n!) 1 n: [== =nii n n1... 2 . 1
! , 0! = 1. C n! : unsigned long factoriel(unsigned n) { unsigned
i; unsigned long r = 1; 1 - 41 for (i = 2; i ==0 , )! 1 .(0 , 1!n n
nnn n Sn - : > +==0 ,0 , 01n n SnSnn - ( 1.2.), . : 1. x y (xeR,
yeN). 2. - . - ( ). m n (mn) : .. , m n (n > 1, m > 1). m = n
. aij : , , ( 1.1.1.). 11 12 ... 1n a21 22 ... a2n m1 am2 ... amn
Amn = 1.1.1. mn. , -, , 22, 33, 44 - , ( ) . - - [Ayres-1962]. :
int A[m][n]; 1 - 42 - , struct data, : struct data { int a; int b;
... } A[m][n]; / - . - ( 1.1.1.). 11 12 ... 1 n a 21 22 ... a 2 n m
1 a m 2 ... a mn 11 12 ... 1 n a 21 22 ... a 2 n m 1 a m2 ... a mn
a) ) 1.1.1. : () () . /* */ for (i = 0; i < m; i++) for (j = 0;
j < n; j++) scanf("%d", &A[i][j]); /* */ for (i = 0; i <
n; i++) for (j = 0; j < m; j++) scanf("%d", &A[j][i]); /* */
for (i = 0; i < m; i++) { for (j = 0; j < n; j++)
printf("%.3d", A[i][j]); printf("\n"); } matrix.c Amn Bmn Cmn , cij
= aij + bij ( i = 1, 2,..., m, j = 1, 2, ..., .n), 1.1.1. 11 12 ...
1n a21 22 ... a2n ... m1 am2 ... amn b11 b12 ... b1n b21 b22 ...
b2n b m1 bm2 ... bmn Cmn = + = 11+b11 12+ b12 ... 1n+ b1n a21+ b21
22+ b22 ... a2n+ b2n m1+bm1 am2+ bm2 ... amn+ bmn 1.1.1. . for (i =
0; i < m; i++) 1 - 43 for (j = 0; j < n; j++) C[i][j] =
A[i][j] + B[i][j]; summat.c Amn Bnp Cmp, : ( )==nkkj ik ijb a c1.,
i = 1,2,...,m j = 1,2,...,p. -, m.p.n . n > m n > p, n3. for
(i = 0; i < m; i++) for (j = 0; j < p; j++) { C[i][j] = 0;
for (k = 0; k < n; k++) C[i][j] += A[i][k] * B[k][j]; }
multmat.c , , . - , nlog 7 (~ n2,81) , - . , -, 7.6., . : 1.
unsigned a[MAX][MAX]. void fillMatrix(unsigned a[][MAX], unsigned
n), a[][] : 0 20 19 17 14 1 0 18 16 13 2 5 0 15 12 3 6 8 0 11 4 7 9
10 0 2. unsigned a[MAX][MAX]. , - , n = 5 : 1 16 15 14 13 2 17 24
23 12 3 18 25 22 11 4 19 20 21 10 5 6 7 8 9 1.1.2. : a1, a2, ...,
an. - P = a1.a2..an. , ai = i, i = 1,2,...,n, P = 1.2 ... n = n!. 1
- 44 , 1.1.1., . n!. n! , -. 10! e 3628800, . 20! C. - , , , : P
((
+=niia110log 1, [x] - , - x. , , P [1+log10(P)], - : log P =
log(a1.a2. an) = log a1 + log a2 + + log an. n! #include #include
const unsigned long n = 123; int main(void) { double digits = 0;
unsigned i; for (i = 1; i 2 . 2. n > 17 . 3. - . 4. n > 5 .
5. . . n2+m2 n2+m2+1. . n2+1. . () n2 (n+1)2 . : 1. t(x) - , -? 2.
. 3. . - , , : [2, 2p1] p , , , p . 1 - 46 , , , - . (). p , (p1)!
1 (mod p). (p1)!, - - 2p1 . , 2p1: p(). , , p x, x > p, , p p =
x.y, y < p, .. - p. : #include #include const unsigned n = 23;
char isPrime(unsigned n) /* 1, , 0 */ { unsigned i = 2; if (n == 2)
return 1; while (i 1, i 2). , . - : #include unsigned n = 435; /* ,
*/ int main(void) { unsigned how, i, j; printf("%u = ", n); i = 1;
while (n != 1) { i++; how = 0; while (0 == n % i) { how++; n = n /
i; } for (j = 0; j < how; j++) printf("%u ", i); } printf("\n");
return 0; } numdev.c : . - , : a1, a2, ..., an. , P = a1.2. ...
.an. 1.1.2., - . , : , , 2 5, , 2, , 5. , , : 1) i (i = 1, 2,...,
n) ai ai = 2Mi.5Ni.bi, bi % 2 = 0, bi % 5 = 0. 2) P = cn iin iiN M.
5 . 2.. 1 .. 1 = =, (c ), a =niMi1 =niNi1. , : 25, 4, 20, 11, 13,
15 1 - 52 : 20.52.1, 22.50.1, 22.51.1, 20.50.11, 20.50.13, 20.51.3,
4 . : 25.4.20.11.13.15 = 4290000. - . . n!. = ((
] [log155nkkn. - , 2 5 n . #include const unsigned n = 10; int
main(void) { unsigned zeroes = 0, p = 5; while (n >= p) { zeroes
+= n / p; p *= 5; } printf(" %u! %u\n", n, zeroes); return 0; }
factzero.c : 1. , . 2. , - . 3. , n! 1.1.4. - 1.15. , 2p1, p e . 39
p, 2p1 : 2, 3, 5, 7, 13, 17, 19, 31, 61, 89, 107, 127, 521, 607,
1279, 2203, 2281, 3217, 4253, 4423, 9689, 9941, 11213, 19937,
21701, 23209, 44497, 86243, 110503, 132049, 216091, 756839, 859433,
1257787, 1398269, 2976221, 3021377, 6972593, 13466917 37 p 37 . (
1999 2001 .), 38- 39-, , -. p. .. - . : , - . , . 23- 1963 ., , 1 -
53 "2112131 " ( 1.1.4.). - , , : 2134669171 8107892 (??39- M )
269725931 2098960 (??38- M ) 230213771 909526 (37- M ) 229762211
895932 (36- M ) 213982691 420921 (35- M ) - , - . , ( -). - : , ""
38- , $50000. $250000 [Primes-3]. 1.1.4. 211213-1 . : p = 2, 3, 5,
7, 11, = 2p 1 . , . 1870 , - - , ( e - [Guinier-1991]).
(LucasLehmer Test, 1930) : : 1 = 4 n+1 = (En )2 2 : 4, 14, 194,
37634, . (-). m = 2p 1 ( p ) , : (Ep1) % (2p 1) = 0 - . . : 1. n ,
-. 2. n , -. . 3. 2n1 , n ? 1 - 54 - . 1.16. n , ( n ). 3 : 6 = 1 +
2 + 3, 28 = 1 + 2 + 4 + 7 + 14, 496 = 1 + 2 + 4 + 8 + 16 + 31 + 62
+ 124 + 248. : 8128, 33550336, 8589869056, , ( n = 1, 2, 3, ), 5- .
: . () 2p1 , 2p1.(2p1) . n - : pi n ( 10 2, 3, 5, 7, 13, 17, 19,
31, 61, 89). , n, . , : 2 . number[]: . : number[k-1] ( k ),
number[k-2] .. k- number[0]. , number[], : i = 0; number[i]++;
while (10 == number[i]) { number[i] = 0; number[++i]++; } if (i ==
k) k++; 2, , .. 9, - , while(10 == number[i]), . , : unsigned i,
carry = 0, temp; for (i = 0; i < k; i++) { temp = number[i] * 2
+ carry; number[i] = temp % 10; carry = temp / 10; } if (carry >
0) number[k++] = carry; , 10 , - mPrimes[]: #include #define MN 10
unsigned mPrimes[MN] = { 2, 3, 5, 7, 13, 17, 19, 31, 61, 89 };
unsigned k, number[200]; void doubleN(void) { unsigned i, carry =
0, temp; 1 - 55 for (i = 0; i < k; i++) { temp = number[i] * 2 +
carry; number[i] = temp % 10; carry = temp / 10; } if (carry >
0) number[k++] = carry; } void print(void) { unsigned i; for (i =
k; i > 0; i--) printf("%u", number[i-1]); printf("\n"); } void
perfect(unsigned s, unsigned m) { unsigned i; k = 1; number[0] = 1;
for (i = 0; i < m; i++) doubleN(); /* 2^i */ number[0]--; /*
{2,4,8,6} */ for (i = 0; i < m - 1; i++) doubleN();
printf("%2u-o = ", s); print(); /* */ } int main(void) { unsigned
i; for (i = 1; i = 0) */ /* base */ { char *saveRslt = rslt; while
(n > 0) { *rslt++ = getChar((char)(n % base)); n /= base; }
*rslt = '\0'; reverse(saveRslt); } base.c - 1, , p. A p- : - A p, .
- 0,125 : 0,125.2=0,25.2=0,5.2=1,0 0,125(10) = 0,001(2). A p- () .
- . convertLessThan1() A (0 s < 1) cnt , . void
convertLessThan1(char *rslt, double n, unsigned char base, unsigned
char cnt) /* 0 1 0 s < 1, , , . convertReal(): void
convertReal(char *rslt, double n, unsigned char base, unsigned char
cnt) /* n base */ { double integer, fraction; 1 - 63 /* */ if (n
< 0) { *rslt++ = '-'; n = -n; } /* */ fraction = modf(n,
&integer); /* */ convert(rslt, (unsigned long)integer, base);
/* ( ...) */ if ('\0' == *rslt) *rslt++ = '0'; else rslt +=
strlen(rslt); *rslt++ = '.'; /* */ convertLessThan1(rslt, fraction,
base, cnt); if ('\0' == *rslt) { *rslt++ = '0'; *rslt = '\0'; } }
base.c : 1. 157 : 3;5;7;14. 2. 0,321 : 3;5;7;14. 3. 157,321 :
3;5;7;14. 4. - p- . 5. p- . - p- . p- - A, . , , 12734(8), - :
12734(8) = 1.84 + 2.83 + 7.82 + 3.8 + 4 = 5596(10) , 10 . - , 8, .
- , n- n . (1) (2). (1) Pn(x) = a0xn+a1xn-1+...+an-1x+an (2) Pn(x)
= an+x(an-1+x(an-2+...+x(a2+x(a1+xa0))...)) calculate(): 1 - 64
char getValue(char c) /* c */ { return (c >= '0' && c =
0 */ { unsigned long result; for (result = 0; '\0' != *numb;
numb++) result = result*base + getValue(*numb); return result; }
base.c , - 1. . , p. double calculateLessThan1(const char *numb,
unsigned char base) /* numb (0 < numb < 1), base */ { const
char *end; double result; for (end = numb + strlen(numb) - 1,
result = 0.0; end >= numb; end--) result = (result +
getValue(*end)) / base; return result; } base.c , , : double
calculateReal(char *numb, unsigned char base) /* numb, base */ {
char *pointPos; char minus; double result; /* */ if ('-' == *numb)
{ minus = -1; numb++; } else minus = 1; if (NULL == (pointPos =
strchr(numb, '.'))) return calculate(numb, base); /* */ /* */
*pointPos = '\0'; result = calculate(numb, base); *pointPos = '.';
/* */ result += calculateLessThan1(pointPos+1, base); return
minus*result; 1 - 65 } base.c : 1. 126(8); 10101(2); 3F2B(16);
3CB(14). 2. 0,233(8); 0,01(2); 0,34(16); 0,2A(14). 3. 126,233(8);
10101,01(2); 3F2B,34(16); 3CB,2A(14). 4. p- . 1.1.7. - , , - : . ,
. , - , -, . . [1;3999] 7 ( ): I(1), V(5), X(10), L(50), C(100),
D(500) M(1000). 1989 MCMLXXXIX. - . - , - -, . : XI = 10 + 1 = 11
IX = 10 1 = 9 - . , - - . 1.1.7. 1(I) 2(II) 3(III) 4(IV) 5(V) 6(VI)
7(VII) 8(VIII) 9(IX) 10(X) 20(XX) 30(XXX) 40(XL) 50(L) 60(LX)
70(LXX) 80(LXXX) 90(XC) 100(C) 200(CC) 300(CCC) 400(CD) 500(D)
600(DC) 700(DCC) 800(DCCC) 900(CM) 1.1.7. . 1.1.7. . -, , - . , ,
3(III), 30(XXX) 300(CCC). 7(VII), 70(LXX) 700(DCC). , , - . , ( ) ,
, , , . - - , . , - decimal2Roman(). 1 - 66 -: const char
*roman1_9[]={"", "A", "AA", "AAA", "AB", "B", "BA", "BAA", "BAAA",
"AC"}; const char *romanDigits[] = {"IVX", "XLC", "CDM", "M" }; A,
B C 1.1.7., . void getRomanDigit(char *rslt, char x, unsigned char
power) { const char *pch; for (pch = roman1_9[x]; '\0' != *pch;
pch++) *rslt++ = romanDigits[power][*pch - 'A']; *rslt = '\0'; }
char *decimal2Roman(char *rslt, unsigned x) { unsigned char power;
char buf[10]; char oldRslt[MAX_ROMAN_LEN]; for (*rslt = '\0', power
= 0; x > 0; power++, x /= 10) { getRomanDigit(buf, (char)(x %
10), power); strcpy(oldRslt, rslt); strcpy(rslt,buf);
strcat(rslt,oldRslt); } return rslt; } rom2dec.c : 1. : 10; 19;
159; 763; 1991; 1979; 1997; 2002. 2. : 0; 10; 0,28; 3,14; 1/7. 3. .
- -. -, - , . , - , , - , . , 2 : if (value > old) rslt -=
2*old; 19(XIX) I , 21(XXI) . : roman2Decimal() ? , . . . unsigned
roman2Decimal(const char *roman, char *error) { unsigned rslt,
value, old; 1 - 67 const char *saveRoman = roman; char
buf[MAX_ROMAN_LEN]; old = 1000; rslt = 0; while ('\0' != *roman) {
switch (*roman++) { case 'I': value = 1; break; case 'V': value =
5; break; case 'X': value = 10; break; case 'L': value = 50; break;
case 'C': value = 100; break; case 'D': value = 500; break; case
'M': value = 1000; break; default: *error = 1; return
(unsigned)(-1); } rslt += value; if (value > old) rslt -= 2*old;
old = value; } return (*error =
strcmp(saveRoman,decimal2Roman(buf,rslt))) ? (unsigned)(-1) : rslt;
} dec2rom.c : 1. : DCLXXXIV, DCCLXIV, LX, LXX, LXXX, XL, XXL, XXXL.
2. . 3. , . 1.1.7. 1.2. : - , . UNIX "" ( GNU GNU is Not UNIX, WINE
WINE Is Not an Emulator, .). 1.18. , , - . - -: , . . , , . . P , ,
. - 1 - 68 - : P1 P2, P2 P3, , Pn P1. , P1, P2, P3, ..., Pn, () -.
: - , , , () . - . - , , , .. ( ), . , . - "" , .. (-, , , .). , ,
- . 1.2.1. , , 1.1.1. , , , : - n = 0 1. - n1 n. ( n 0 ). C, n!:
#include const unsigned n = 6; unsigned long fact(unsigned i) { if
(i < 2) return 1; return i * fact(i - 1); } int main(void) {
printf("%u! = %lu \n", n, fact(n)); return 0; } factrec.c n (
1.1.1.): unsigned long sum(unsigned n) { if (0 == n) return 0; else
return n + sum(n - 1); } 1 - 69 : , , () -, -, . ( 1.2.2.) , : , .
- n.sizeof(unsigned) n . : n! 1.1.1. - , , .. - . , n! - unsigned
long, . 1.2.2. . , , , , , . 1.2.2. . , , . ? , 1 - 70 , . , , , ,
, . , : , , , , ( 1.2.2.) , . K ? :
0,1,1,2,3,5,8,13,21,34,55,89,..., , 0 1, .. : F0 = 0, F1 = 1, Fi =
Fi-1 + Fi-2 1.2.2. . ( ), (Filius Bonaccii, .. ), 1202 . Liber
Abacci ( ) . , : - ; - ; - . , , 3 , 5 ( , ), 8 .. , - . ( 1.2.2.).
1 - 71 1.2.2. . - 1611 . , , - ( 1.2.2.). , - , , - , . 1.2.2. . ?
- , - ( , ). -, 1845 . ( 1.2.3.) - . . 61803 , 125 1=+= | | - -. A
B, : 1 - 72 ( ) | =+=AB ABA - | , XIX- : . | , . - . , |, . (
1.2.2.) : , , , - 1, 0. , - . 1.2.2. . - , n- , , - : unsigned long
fib(unsigned n) { if (n < 2) return 1; else return fib(n - 1) +
fib(n - 2); } fibrec.c , - . , n = 40. , ( n = 0 1), . . , - (
1.2.2.). 1 - 73 1.2.2. . , -. , , .. . , F10 F8 F10 = F9 + F8 F9 =
F8 + F7. - -. - , , . ( memoization) 8 . , , - : - , . , : unsigned
long fibIter(unsigned n) { unsigned long fn = 1, fn_1 = 0, fn_2;
while (n--) { fn_2 = fn_1; fn_1 = fn; fn = fn_1 + fn_2; } return
fn_1; } fib2.c , : unsigned long fibIter2(unsigned n) { unsigned
long f1 = 0, f2 = 1; while (n--) { f2 = f1 + f2; f1 = f2 - f1; }
return f1; } fib2.c , n , - - . , n- ? 1 - 74 , ( 1.4.8.): (((
||.|
\| ||.|
\| +=n nnF25 125 1.51 - n- . , - -, . n -, ( 7.3., [-1998c]). ,
5 - . , , . n- 8 ( 8.1.), - . : 1. , . 2. n- : . 1.2.3. - . - () .
1.19. a b. , d - - b, , a b. , : 1) d|a, d|b 2) d1|a d1|b, d1|d. :
d|a , d a . : d1 a b d. - a b (a,b) (a,b). : (12, 8) = (8, 12) =
(8, 4) = 4, (1, 10) = (7, 10) = 1. 1.20. 1, . - : (a1, a2, ..., an)
= ((a1, a2, ..., an1), an) (a,b), . - : 1) a > b, 4), 2). 2) a =
b , (a,b) b . a = b 3). 1 - 75 3) b = b a 1). 4) a = a b 1). - , ,
, -. ( ): a b, q1 r1. - b , r1 r2 .., : a = q1.b + r1 b = q2.r1 +
r2 r1 = q3.r2 + r3 ... rk1 = qk+1.rk + rk+1, rk+1 = 0 rk . - , :
(a, b) = (b, a % b) b = 0 ( (a, 0) = a) , , b 0 . ( ) - : unsigned
gcd(unsigned a, unsigned b) { unsigned swap; while (b > 0) {
swap = b; b = a % b; a = swap; } return a; } gcditer.c unsigned
gcd(unsigned a, unsigned b) { return (0 == b) ? a : gcd(b, a % b);
} gcdrec.c , - . : -, . , , - x y (x, yeZ), , : d = (a,b) = ax + by
: 1. : (10,5); (5,10); (15,25); (25,15); (7,8,9); (3,6,9);
(158,128,256); (64,28,72,18). 1 - 76 2. . 10/15 2/3. 3. , (a1, a2,
..., an) = ((a1, a2, ..., an1), an). 4. . 5. , (a, b) = (b, a % b).
6. , a b, x y (x, yeZ), (a,b) = ax + by? 7. , . 2; 5; 100; 1000 .
8. ( ) a, b c , a, b c , c > a > b, c > a + b 1, - , . d ,
d 0 < d s a. , / - . 1.2.4. - 1.21. a b. d (d > 0) , a|d b|d
- () a b. - a b (a,b) [a,b]. : [6, 15] = [15, 6] = 30, [1, 10] =
10, [5,10] = 10, [5, 12] = 60. , : (a1, a2, ..., an) = ((a1, a2,
..., an1), an) - , , : ) , (.) , (b a b ab a = - n . [] , , lcm():
#include const unsigned n = 4; const unsigned A[] = { 10, 8, 5, 9
}; unsigned gcd(unsigned a, unsigned b) { return (0 == b) ? a :
gcd(b, a % b); } unsigned lcm(unsigned a[], unsigned n) { unsigned
b; if (2 == n) return(a[0] * a[1]) / (gcd(a[0], a[1])); else { b =
lcm(a, n - 1); return(a[n - 1] * b) / (gcd(a[n - 1], b)); } } 1 -
77 int main(void) { printf("%u\n", lcm(A, n)); return 0; } lcm.c :
360 : 1. : [10,15]; [15,10]; [7,8,9]; [3,6,9]; [158,128,256];
[64,28,72,18]. 2. , [a1, a2, ..., an] = [[a1, a2, ..., an1], an].
3. , [a,b] = ab / (a,b). 4. , . 2; 5; 100; 1000 . 1.2.5. C, , . . :
n, , . , n = 7892 : 7, 8, 9, 2. . , : n%10 n/10. : - . , : #include
unsigned n = 7892; int main(void) { unsigned dig[20], i, k = 0;
while (n > 0) { dig[k] = n % 10; n = n / 10; k++; } for (i = k;
i > 0; i--) printf("%u ", dig[i-1]); printf("\n"); return 0; }
print.c - -. : 7892, 789 2. , n, (!) n/10 n%10. , , 1 - 78 . : void
printN(unsigned n) { if (n >= 10) printN(n / 10); printf("%u ",
n % 10); } printrec.c , , n s 9, .. - n . . - -. , , . - : n! , i (
, ): #include const unsigned n = 6; unsigned i; unsigned long
fact(void) { if (1 == i) return 1; return --i * fact(); } int
main(void) { i = n + 1; printf("%u! = %lu \n", n, fact()); return
0; } factrec.c : "" return --i * fact(); : factrec.c Borland C DOS,
Microsoft Visual C++ Windows. : n - 10k (1 s k s n). , n = 5 : 10,
100, 1000, 10000, 100000, 100000, 10000, 1000, 100, 10 . : 1. ( n)
: #include const unsigned n = 5; void printRed(unsigned k, unsigned
long result) { printf("%lu ", result); if (k < n) printRed(k +
1, result * 10); printf("%lu ", result); } 1 - 79 int main(void) {
printRed(1, 10); printf("\n"); return 0; } print1.c 2. - k :
#include const unsigned n = 5; unsigned k = 0; void
printRed(unsigned long result) { k++; printf("%lu ", result); if (k
< n) printRed(result * 10); printf("%lu ", result); } int
main(void) { printRed(10); printf("\n"); return 0; } print2.c 3.
result , : #include const unsigned n = 5; unsigned long result = 1;
unsigned k = 0; void printRed(void) { k++; result *= 10;
printf("%lu ", result); if (k < n) printRed(); printf("%lu ",
result); result /= 10; } int main(void) { printRed(); printf("\n");
return 0; } print3.c , ( -), - . : 1 - 80 1. factrec.c Borland C
DOS Microsoft Visual C++ Windows. ? 2. -. Borland C DOS Microsoft
Visual C++ Windows? ? unsigned i = 1; printf("%u %u", ++i, i); :
unsigned i = 1; printf("%u %u", i, ++i); 3. x -. Borland C DOS
Microsoft Visual C++ Windows? ? unsigned x, a = 3, b = 5; x =
a+++b; 4. . 1.3. , , - () . . ( ) . -, : , .. , 52 , 5 , ( : ). - ,
9. - : - , . - , ( ) . 1.3.1. 1.22. n- A = {a1, a2, ..., an}. n-,
A, A , . Pn, |Pn|. , |Pn| = n! , e {a, b, c} 3 , - (.. n-) : 1 - 81
(a, b, c) (a, c, b) (b, a, c) (b, c, a) (c, a, b) (c, b, a) , , 1
n. ( n- n ). - : 1: , n1 n1 . : /* i */ void permute(i) { if (i
>= n) { /* */ printPerm(); } else for (k = 0; k < n; k++) if
(!used[k]) { /* k */ used[k] = 1; /* k */ position[i] = k; /* i k
*/ permute(i+1); used[k] = 0; /* k */ } } permute() : , "" -. i- ,
- , (i+1)- . - used[], : - , used[k] == 1, used[k] == 0, (.. ""). i
== n , . , n! n (n ): #include #define MAXN 100 const unsigned n =
3; char used[MAXN]; unsigned mp[MAXN]; void print(void) { unsigned
i; for (i = 0; i < n; i++) printf("%u ", mp[i] + 1);
printf("\n"); } 1 - 82 void permute(unsigned i) { unsigned k; if (i
>= n) { print(); return; } for (k = 0; k < n; k++) { if
(!used[k]) { used[k] = 1; mp[i] = k; permute(i+1); /* if ( ) {
permute(i+1); } */ used[k] = 0; } } } int main(void) { unsigned i;
for (i = 0; i < n; i++) used[i] = 0; permute(0); return 0; }
permute.c : 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 -, if. , , - , , .
- ( 6) , . : , - , : ki i- , 2010 1== s sik iiik. , . , , 20, - , .
- . , (i1, i2, , in) (j1, j2, ,jn) k (1 s k < n) , ip = jp, p =
1, 2, , k1 ik < jk. -, : - , -. : k+1 k, . - used[]. , -
[-1998]: 2: 1) n = 1 : (1). 1 - 83 2) (p1, p2,, pk), k (1 s k <
n) . (k+1) 1,2, , (k+1)- : (pk+1,p1,p2,,pk) (p1, pk+1,p2,,pk)
(p1,p2,,pk, pk+1) , 2) k , - k+1 . - 2. - , -. #include #define
MAXN 100 const unsigned n = 3; unsigned a[MAXN]; void print(void) {
unsigned i; for (i = 0; i < n; i++) printf("%u ", a[i] + 1);
printf("\n"); } void permut(unsigned k) { unsigned i, swap; if (k
== 0) print(); else { permut(k - 1); for (i = 0; i < k - 1; i++)
{ swap = a[i]; a[i] = a[k-1]; a[k-1] = swap; permut(k - 1); swap =
a[i]; a[i] = a[k-1]; a[k-1] = swap; } } } int main(void) { unsigned
i; for (i = 0; i < n; i++) a[i] = i; permut(n); return 0; }
permswap.c : 1 2 3 2 1 3 3 2 1 2 3 1 1 3 2 3 1 2 : 1. , n- n! 2.
{a,b,c,d}, : ) 1 1 - 84 ) 2 . 3. 1 2. 4. , permswap.c 2. 5. . - , (
9) memoization ( 8) . , - . , : (1, 2, 3), (1, 3, 2), (2, 1, 3),
(2, 3, 1), (3, 1, 2), (3, 2, 1). 0 5. , n- 0 n!1. ( ) () [-1995]:
1) perm[] n, , . 2) pos = result = 0, p[] n , p[i] = i+1, i = 0,1,
..., n1. 3) pos < n, , r- p, r i, i , perm[pos] == p[i]. result
. 4) result = result*(n pos) + r. 5) pos++ 3). 1) num . k = n-1,
p[] n- , p[i1] = i, i = 1, 2, ..., n. 2) k > 0 : m = n - k;
perm[k] = num % m; if (k > 0) num /= m; k--; 3) k = 0. k < n
: m = perm[k]; perm[k] = p[m]; if (k < n) for (i = m+1; i <
n; i++) p[i-1] = p[i]; k++; , : #include #define MAXN 100 const
unsigned n = 6; const unsigned perm[MAXN] = { 5, 3, 6, 4, 2, 1 };
const unsigned long code = 551; 1 - 85 unsigned long
codePerm(unsigned n, const unsigned perm[]) { unsigned p[MAXN], i,
pos; unsigned long r, result; result = 0; for (i = 0; i < n;
i++) p[i] = i + 1; for (pos = 0; pos < n; pos++) { r = 0; while
(perm[pos] != p[r]) r++; result = result * (n - pos) + r; for (i =
r + 1; i < n; i++) p[i - 1] = p[i]; } return result; } void
decodePerm(unsigned long num, unsigned n, unsigned perm[]) {
unsigned long m,