Title: KMP ????
1??? ?? ????
2??
- ??? ?? ????
- ??? ????
- KMP ????
- ???-?? ????
- ??-?? ????
- ?? ?? ????
- ?? ?? ????
- ?-?? ???
- ??-?? ???
- ??? ????
- ??? ??
- ?? ? ??? ???
3??? ?? ????
- ?? ?? ?
- ???(text) ??
- ??(pattern) ??? ???
- ???(string)
- ??? ????? ??? ?
- ???(text) ???
- ??(binary) ???
- ??? ?? ????? ??
- ????? ??? ??(false start) ??
- ???? ??? ???? ??? 0? ??? ??? ??
- ??? ??? ??? ??? ??? ?
4??? ????(1)
- ? ?? ?? ? ??? ????? ??
- ???? ???? ??? ?? ???? ???? ????
-
BruteForce(p, t) M ? ??? ?? N ? ???? ??
for (i ? 0, j ? 0 j lt M and i lt N i ? i 1, j
? j 1) do if (ti ? pj) then i ?
i - j j ? -1 if (j M) then
return i - M else return i end ButeForce()
5??? ????(2)
- ?? ???
- ??? ?? ?? ???? ???? ?? ???? ??? ???? ??? O(MN)? ?
6??? ??? ?? ??
1 0 0 1 1 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 1 1 1 0
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 1 0 0 1 1 1
1 0 0 1 1 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 1 1 1 0
7KMP ????(1)
- KMP Knuth, Morris and Pratt
- ???? ??? ??? ???? ? ??? ?? ??? ???? ?? ?? ????,
???? ??? ? ??? ??? ?? ???? ?? ??? ?? - ??? ????? ?? nextM? ??? ??? ??? ????
- nextM ???? ???? ?? ??? ?? ??
- ?? ??? O(MN)
8KMP ????(2)
KMP(p, t) M ? ??? ?? N ? ???? ??
InitNext(p) for (i ? 0, j ? 0 j lt M and i lt
N i ? i 1, j ? j 1) do while ((j 0)
and (ti ? pj)) do j ? nextj if (j
M) then return i - M else return i end
KMP()
9? ?? ??(1)
? 10100111 ? ?? ? ?? ??
10? ?? ??(2)
? abababca ? ?? ? ?? ??
11? ?? ?? ????
InitNext(p) M ? ??? ?? next0 ? -1
for (i ? 0, j ? -1 j lt M i ? i 1, j ? j 1)
do nexti ? j while ((j 0) and
(pi ? pj)) do j ? nextj end
InitNext()
12??? ??? KMP ????(1)
KMP(t) i ? -1 sm i ? i 1 s0 if
(ti ? '1') then goto sm i ? i 1 s1 if
(ti ? '0') then goto s0 i ? i 1 s2 if
(ti ? '1') then goto s0 i ? i 1 s3 if
(ti ? '0') then goto s1 i ? i 1 s4 if
(ti ? '0') then goto s2 i ? i 1 s5 if
(ti ? '1') then goto s0 i ? i 1 s6 if
(ti ? '1') then goto s1 i ? i 1 s7 if
(ti ? '1') then goto s1 i ? i 1 return
i-8 end KMP()
13??? ??? KMP ????(2)
- ?? ?? ??(finite state machine FSM)
- ??(state ??? ??)
- ??(transition ??? ??)
- ?? ??(match transition ???? ??) ????? ??
- ??? ??(non-match transition ???? ??) ???? ??
- ???(?? ?? ???)
- ???(??? ?? ???)
14??? ??? KMP ????(3)
15??? ?? ?? ??(1)
- InitNext ????? nexti ? j ??
- ??? ?? ?? ??
if (pi pj) then nexti ? nextj
else nexti
16??? ?? ?? ??(2)
- ??? ?? ?? ??? ??? KMP ???? ?? ??
- 10100111
- MN ? ??? ??? ?? ???? ?? ???? O(MN)
17??? ?? ?? ??(3)
- ??? ?? ?? ??? ??? KMP ???? ?? ??
- abababca
18???-?? ????
- ????? ???? ??? ??? ??
- ??? ?? ??(mismatched character heuristic) ??
- ???? ?? ???? ??? ??? ??? ??? ????? ??? ????? ??
- ?? ??? ??(good suffix heuristic) ??
- ???? ???? ??? ??? ???? ?? ?? ???? ????? ??? ????
???? ? - ? ?? ? ??? ???? ???? ??? ? ? ?? ??
- ??? ?? ?? ??? O (m n /m S)
- ???? ? ?? O (m n /m S) ??? ??? ???? ?? ??
19??? ?? ??? ?? ??? ??
20??? ?? ?? ????(1)
MisChar(p, t) M ? ??? ?? N ? ???? ??
InitSkip(p) for (i ? M-1, j ? M-1 j 0 i ?
i - 1, j ? j - 1) do while (ti ? pj) do
k ? skipindex(ti) if (M-j gt k)
then i ? i M - j else i ? i k
if (i N ) then return N j ? M - 1
return i1 end MisChar()
21??? ?? ?? ????(2)
- InitSkip() skip ??? ??
- ATION ? ?? skip ??
void InitSkip(char p) int i, j, M
strlen(p) for (i 0 i lt NUM i) skipi
M for (i 0 i lt M i) skipindex(pi)
M - i - 1
22??? ?? ?? ????(3)
- ??? ?? ??? ??? ???-?? ??? ?? ??
23??-?? ????(1)
- ???? ????? ?? ?? ?? ?? ???? ???? ????
- ??? ?? ???? O(MN)??? ?????? ??? ??? ?? ??? ???
???? - ???? ??
- ? ?? M ??? ???? ?? ????? ? ???? ????? ??? ????
???? ?? ? ???? ?? ??? ??? ??? ??
24??? ??
- ?? PM? ?? 10?? p? ?? ??
- ?? PM 31415?? ? ?, p? ??? ??
25?? ?
3 1 4 1 5 2
???
7
8
- d 10, q 13, m 5
- D 104 mod 13 3
- 14152 mod 13 ((31415 - 3?104)10 2) mod 13
- ((7 10?13 - 3?3)10
2) mod 13 - (11?10 2) mod 13
- 8
- - 31415 mod 13 7
- 128 mod 13 11
- 112 mod 13 8
26??-?? ????(2)
- --------------------------
- ???? 5.6 ??-?? ????
- --------------------------
- RabinKarp(p, t)
- dM ? 1 h1 ? 0 h2 ? 0
- M ? ??? ?? N ? ???? ??
- for (i ? 1 j lt M i ? i 1) do
- dM ? (ddM) mod q
- for (i ? 0 j lt M i ? i 1) do
- h1 ? (h1 d index(pi)) mod q
- h2 ? (h2 d index(ti)) mod q
-
- for (i ? 0 h1 ? h2 i ? i 1) do
- h2 ? (h2 d q - index(ti) dM) mod q
- h2 ? (h2 d index(tiM)) mod q
- if (i gt N-M) then return N
-
- return i
- end RabinKarp()
RabinKarp(p, t) dM ? 1 h1 ? 0 h2 ? 0 M
? ??? ?? N ? ???? ?? for (i ? 1 j lt M i ?
i 1) do dM ? (ddM) mod q for (i ? 0
j lt M i ? i 1) do h1 ? (h1 d
index(pi)) mod q h2 ? (h2 d
index(ti)) mod q for (i ? 0 h1 ? h2 i
? i 1) do h2 ? (h2 d q -
index(ti) dM) mod q h2 ? (h2 d
index(tiM)) mod q if (i gt N-M) then
return N return i end RabinKarp()
27?? ?? ????
- ?? ??(pattern matching)
- ??? ????? ??? ?? ??? ?? ?? ?
- ?? ??
- ? ??(concatenation)
- ???? ??? ?? ? ??? ????? ???? ??
- ? ???(or)
- ? ?? ?? ? ??? ???? ???? ??
- ? ??(closure)
- ??? ??? 0? ?? ???? ??
- ???(regular expression)
- ??? ????? ???? ?
- ???? ?? ? ?? ?? ???? ???? ??(symbol)?? ?????? ??
28?? ?? ??
- ?? ?? ??(pattern matching machine)
- ?? ??? ???? ?? ??
- ???(deterministic) ??
- ??? ?? ??? ?? ?? ??? ?? ???? ???? ?
- KMP ????? ?? ?? ?? ??
- ????(nondeterministic) ??
- ??? ???? ?? ?? ??? ??? ?? ?? ??? ??? ?? ?? ??? ?
- ??? ????? (ABAC)D? ?? ???? ?? ?? ????, ??? ??
??? ?? ??? ???.
29?? ?? ?? ??
??
??
???
30?? ?? ?? ?
- (ABAC)D? ?? ???? ?? ?? ??
- CDAABCAAABDDACDAAC
0 1 2 3 4 5 6 7 8 9
ch A B A C D
next1 5 2 3 4 8 6 7 8 9 0
next2 5 2 1 4 8 2 7 8 9 0
31?? ?? ???? ??
- ?? ?? ??? ??
- ?? ??? ??? ????? ??
- ??? ????? ?? ??? ????
- ??(deque double-ended queue)? ??
- ??? ?? ??? ??
- ????? ??? ???? ?? ??
- ??? ????? ??
- ??? ??? ????? ??? ??-?? ??(output-restricted
deque)? ?? - N ??? ???? ??? ????? M-?? ??? ??? ?? ?? ??? ????
NM ? ??? ?? ???? ??
32?? ?? ???? ?? ?
33?? ?? ????
- ?? ??(file compression)
- ????? ??? ???? ??? ?? ??
- ???? ??? ???? ???? ???? ??? ?? ??
- ??
- ??? ??
- ???? ???? ??? ??
- ???? ?? ???? ??? ??? ?? ?
34?-?? ???(1)
- ?-?? ???(run-length encoding)
- ??? ??? ?? ? ?? ?? ??? ?? ??? ??? ???? ??
- ???? ???? ??? ???? ????? ??
35?-?? ???(2)
- ??? ??? ?? ?? ??
- ?? ??? ??? ???? ?? ???? ??? ? ??
- ????? ??? ???? ??? ?? ??(escape character)? ????
?? ??(escape sequence)? ?? - ?? ?? ??
- ?? ??
- ??? ???? ???
- 1?? ?? ??
36??-?? ???
- ??-?? ???(variable-length encoding)
- ?? ???? ???? ?? ??? ???? ??? ???? ???? ?? ???
???? ???(encode)?? ?? ?? - ABRACADABRA ? ?? ??? ??
- 00001000101001000001000110000100100000010001010010
00001 - ABRACADABRA? ?? ?? ??
- 0 1 01 0 10 0 11 0 1 01 0
?? A B C D R
??? 5 2 1 1 2
?? 00001 00010 00011 00100 10010
?? A B C D R
??? 5 2 1 1 2
?? 0 1 10 11 01
37???(1)
- ???(trie)
- ??? ?? ??? ?? ?? ??? ???? ?? ?? ?? ???? ????
- ?? ???? ???? ??? ? ? ??
- ??? ?????? ?? ?? ???? ??? ? ??
- ?? ?? ??? ??? ?? ?? ?? ???? ???? ?? ??? ??? ?
38???(2)
- ABRACADABRA? ?? ? ?? ??? ???
- A 11, B 00, C 010
- D 10, R 011
- A 0, R 10, B 110
- D 1110, C 1111
39??? ???
- ??? ???(Huffman encoding)
- ?? ??? ? ?? ?? ???? ???? ???? ??
- ???? ?? ???? ???? ?? ?? ???? ??? ???? ??
- ???? ???? ??
- ??? ??? ??? ??? ?? ?? ??(weighted external path
length)? ?? ? - ??? ???? ??? ??
- ??? ??? ???? ?
40??? ?? ?? ??(1)
- ?? ??
- ??? ??? ????? ?? ??
- ABRACADABRA ? ???? ??
- ??? ?? ??
-
(a) ?? ??
(b) 5? 9 ??
41??? ?? ?? ??(2)
(c) 10? 11 ??
(d) 14? 12 ??
(e) 15? 21 ??
(f) 26? 27 ??
42??? ?? ?? ??(3)
(g) 36? 53 ??
43??? ??
- ??? ???? ??? ??? ??
- lenk ??? ??? ??
- codek ???? ??? ??? ??
A B C D E F
k 0 1 2 3 4 5 6
lenk 2 2 3 4 4 3 3
codek 0 3 2 6 7 4 5
00 11 010 0110 0111 100 101
44??? ??? ?? ?(1)
- VISION QUESTION ONION CAPTION GRADUATION
EDUCATION - ?? ???
- ?? ?? ??
45??? ??? ?? ?(2)
46??? ??? ?? ?(3)
k codek lenk
0 1 3 001
A 1 15 4 1111
C 3 28 5 11100
D 4 1 4 0001
E 5 0 4 0000
G 7 8 5 01000
I 9 4 3 100
N 14 6 3 110
O 15 5 3 101
P 16 9 5 01001
Q 17 23 6 010111
R 18 10 5 01010
S 19 29 5 11101
T 20 7 4 0111
U 21 6 4 0110
V 22 22 6 010110
47??? ????
- ???(cryptology)
- ???? ???? ?? ?? ???? ?? ? ??? ?? ?
- ??? ????
- ???? ???? ???? ??? ? ???? ?
- ?? ??(cryptography)
- ?? ?? ???? ??
- ?? ??(cryptanalysis)
- ?? ?? ???? ???? ??? ??
48??? ???
- ??? ???(cryptosystem)
- ??? ???? ???(encrypt)
- ??? ???? ???(decrypt)
- ??? ??(encryption method)
- ??? ??(decryption method)
- ? ????(key parameters)
49??? ??(1)
- ???? ???(Caesar cipher)
- ?? ??? ????? ????? ???
- ??? ?? ??? ???? N?? ????, ??? (NK)?? ??? ??
- K1? ? ???? ???? ?
? ? S A V E P R I V A T E R Y A N
??? T B W F A Q S J W B U F A S Z B O
50??? ??(2)
- ?? ???? ??? ???
- ??? ???? ????? ?? ??? ??? ??
- ?? ???? ?
-
- ? ???? ??? ???? ?
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Q H C B E J K A R W S T U V D I O P X Z F G L M N Y
? ? S A V E P R I V A T E R Y A N
??? X H G J Q I P W G H Z J Q P N H D
51??? ??(3)
- ????(Vigenere) ???
- ??? ? ??? ?? ?? ?? ???? ??
- ???? ???? ?
- ???(Vernam) ???
- ???? ????? ?? ??? ??? ??? ?? ? ?
- ???? ???? ??? ??? ???
? A B C A B C A B C A B C A B C A B
? ? S A V E P R I V A T E R Y A N
??? T C Y F B S S K Y B V H A T A B P
52??? ??(4)
- ???? ???
- ??? ???(exclusive-or) ?? ??
x XOR y
0 0 0
0 1 1
1 1 0
1 0 1
? 1 1 0 0 0 1 1 1 0 0 1 1
? ? 1 0 0 1 1 0 0 0 1 1 1 0
??? 0 1 0 1 1 1 1 1 1 1 0 1
???
? 1 1 0 0 0 1 1 1 0 0 1 1
??? 0 1 0 1 1 1 1 1 1 1 0 1
? ? 1 0 0 1 1 0 0 0 1 1 1 0
? ?
53??? ??(4)
- ???/??? ??
- (encryption/decryption machine)
- ??? ??? ??? ???? ??? ?? ?? ???? ???? ? ??
- "?? ?(pseudo-key)" ??
- ? ???? ???? ??
- ???? ?? ?? ????? ?? ??
54?? ? ??? ???(1)
- ?? ? ??? ???(public-key cryptosystem)
- ???? ?? ???? ??? ???? ?? ???
- ???? ?? ?
- ???? ???? ?? ?? ?? ???? ???? ? ??
- ???? ?? ?
- ???? ??? ?? ?? ?(secret key)? ???? ???
- ?? ? ??? ???? ?? ??
- P ?? ?, S ?? ?, M ???
- ? S(P(M)) M
- ? ?? (S, P) ?? ???? ??.
- ? P??? S? ???? ?? M? ???? ??? ???? ??.
- ? S? P? ?? ??? ? ??? ??.
55?? ? ??? ???(2)
- ?? ? ??? ???? ???? ??
- ??? ? ??? ????? ???? ?? ????? ???, ??? ? ???? ??
??? ???? ?? ????? ?? - ? 1)
- 130?? ?? ???? ???? ?? 7?? ??
- 63?? ? ??? ??? ?? ?? ? ?? ??? ???? ?? 4106?? ??
- ? 2)
- 200?? ??? ?? ? ??? ??? ?????? ???? ????? ??? ??
??? ??
56RSA ????
- RSA (Rivest, Shamir and Adleman) ????
- ?? ? ??? ????? ???? ???? ????
- ???? ?? ??? ???
- ???
- ???
57RSA ???? ?? ?(1)
- ???? ??? ?? ??
- 3 ?? ??? ??
- s 97(??? ?? ? ?), x 47, y 79
- N? ??
- N x y ??? 47 79 3713
- p? ??
- ps mod (x - 1)(y - 1) 1? ?? p? ??
- p 97 mod 46 78 1
- p 97 mod 3588 1
- p 97 3589
- p 3589 97 37
- ?? ? p 37
58RSA ???? ?? ?(2)
- ??? ??
- SAVE PRIVATE RYAN? A? 01, B? 02, C? 03 ?? ????
??? - 190122050016180922012005001825011400
- ??? ??
- 190137 mod 3713 0335
- 220537 mod 3713 1472
- 001637 mod 3713 1447
- 180937 mod 3713 3060
- 220137 mod 3713 1548
- 200537 mod 3713 1608
- 001837 mod 3713 3091
- 250137 mod 3713 0654
- 140037 mod 3713 1414
- ???? ???
- 033514721447306015481608309106541414
59RSA ???? ?? ?(3)
- ??? ??
- ??? ??
- 033597 mod 3713 1901
- 147297 mod 3713 2205
- 144797 mod 3713 0016
-
- ???? ???
- 190122050016180922012005001825011400