4/14/2011
1
Strings and Strings and
Pattern Matching Pattern Matching
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
22
Strings and Strings and
Pattern Matching Pattern Matching
Brute Force, Brute Force,
RabinRabin Karp, Karp,
KnuthKnuth MorrisMorris PrattPratt
RegularRegular ExpressionsExpressions
4/14/2011
2
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
33
BàiBài tốntốn tìmtìm kiếmkiếm chuỗichuỗi kýký tựtự
ĐốiĐối tượngtượng củacủa bàibài tốntốn stringstring searchingsearching làlà tìmtìm
kiếmkiếm vịvị trítrí củacủa mộtmột mẫumẫu vănvăn bảnbản (text(text pattern)pattern)
trongtrong nộinội dungdung mộtmột vănvăn bảnbản lớnlớn hơnhơn (một(một câu,câu,
mộtmột đoạnđoạn hayhay mộtmột quyểnquyển sách,sách, ……))
CũngCũng nhưnhư phầnphần lớnlớn cáccác thuậtthuật tốntốn khác,khác, quanquan tâmtâm
chínhchính củacủa stringstring searchingsearching làlà tốctốc độđộ vàvà hiệuhiệu quảquả
CóCó nhiềunhiều thuậtthuật tốntốn tìmtìm kiễmkiễm chuỗichuỗi kýký tựtự kháckhác
nhaunhau TuyTuy nhiênnhiên,, chúngchúng tata sẽsẽ chỉchỉ khảokhảo sátsát baba thuậtthuật
tốntốn làlà:: BruteBrute ForceForce,, RabinRabin KarpKarp vàvà KnuthKnuth
MorrisMorris PrattPratt
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
44
ThuậtThuật tốntốn Brute Force Brute Force
ThuậtThuật tốntốn BruteBrute ForceForce soso sánhsánh mẫumẫu tìmtìm kiếmkiếm vớivới
vănvăn bản,bản, mỗimỗi lầnlần 11 kýký tự,tự, chocho đếnđến khikhi cáccác kýký tựtự
khơngkhơng khớpkhớp đượcđược tìmtìm thấythấy::
ThuậtThuật tốntốn cócó thểthể đượcđược thiếtthiết kếkế saosao chocho nónó sẽsẽ dừngdừng
khikhi gặpgặp sựsự xuấtxuất hiệnhiện đầuđầu tiêntiên củacủa mẫumẫu trongtrong texttext
hoặchoặc chocho đếnđến khikhi đãđã xétxét đếnđến cuốicuối texttext
4/14/2011
3
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
55
ThuậtThuật tốntốn Brute Force Brute Force
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
66
ThuậtThuật tốntốn Brute Force Brute Force
AlgorithmAlgorithm BruteBrute ForceForce(P)(P);;
InputInput::StringString mẫumẫu PP vớivới mm kýký tựtự
OuputOuput::VịVị trítrí chuỗichuỗi mẫumẫu PP trongtrong TT hoặchoặc báobáo khơngkhơng cócó
dodo
ifif (text(text letterletter ==== patternpattern letter)letter)
soso sánhsánh texttext letterletter kếkế vớivới patternpattern letterletter kếkế
elseelse
chuyểnchuyển patternpattern dịchdịch sangsang phảiphải 11 letterletter
untiluntil (tìm(tìm thấythấy tồntồn bộbộ patternpattern hoặchoặc đếnđến cuốicuối text)text)
4/14/2011
4
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
77
Thuật toán Brute Force Thuật toán Brute Force
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
88
Thuật toán Brute Force Thuật toán Brute Force
ĐộĐộ phứcphức tạptạp củacủa thuậtthuật tốntốn BruteBrute ForceForce:: GiảGiả
sửsử kíchkích thướcthước củacủa mẫumẫu làlà MM kýký tựtự vàvà texttext cócó
NN kýký tựtự
TrườngTrường hợphợp xấuxấu nhấtnhất:: soso sánhsánh mẫumẫu vớivới mọimọi
chuỗichuỗi concon chiềuchiều dàidài MM trongtrong texttext
TổngTổng sốsố phépphép soso sánhsánh:: MM (N(N M+M+11))
ĐộĐộ phứcphức tạptạp trongtrong trườngtrường hợphợp xấuxấu nhấtnhất ::
O(MN)O(MN)
4/14/2011
5
DươngDương AnhAnh ĐứcĐức –– NhậpNhập mônmôn CấuCấu trúctrúc DữDữ liệuliệu vàvà GiảiGiải thuậtthuật
99
Thuật toán Brute Force Thuật toán Brute Force
ĐộĐộ phứcphức tạptạp củacủa thuậtthuật tốntốn BruteBrute ForceForce:: GiảGiả sửsử
kíchkích thướcthước củacủa mẫumẫu làlà MM kýký tựtự vàvà texttext cócó NN kýký
tựtự
TrườngTrường hợphợp tốttốt nhấtnhất 11:: mẫumẫu xuấtxuất hiệnhiện ngayngay đầuđầu
texttext
ĐộĐộ phứcphức tạptạp trongtrong trườngtrường hợphợp tốttốt nhấtnhất 11:: O(M)O(M)
TrườngTrường hợphợp tốttốt nhấtnhất 22:: mẫumẫu khơngkhơng xuấtxuất hiệnhiện
trongtrong texttext
ĐộĐộ phứcphức tạptạp trongtrong trườngtrường hợphợp tốttốt nhấtnhất 22:: O(N)O(N)
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
1010
VíVí dụdụ, , vớivới M=5 M=5 tata cócó víví dụdụ sausau: :
4/14/2011
6
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
1111
ThuậtThuật tốntốn RabinRabin Karp Karp
nn ThuậtThuật tốntốn RabinRabin KarpKarp tínhtính cáccác giágiá trịtrị bămbăm
(hash(hash value)value) củacủa mẫumẫu tìmtìm kiếmkiếm vàvà củacủa chuỗichuỗi
concon MM kýký tựtự cầncần soso sánhsánh trongtrong vănvăn bảnbản
nn NếuNếu cáccác giágiá trịtrị bămbăm khơngkhơng bằngbằng nhau,nhau, thuậtthuật tốntốn
sẽsẽ tínhtính giágiá trịtrị bămbăm chocho chuỗichuỗi concon MM kýký tựtự kếkế tiếptiếp
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
1212
ThuậtThuật tốntốn RabinRabin Karp Karp
NếuNếu cáccác giágiá trịtrị bămbăm bằngbằng nhau,nhau, thuậtthuật tốntốn thựcthực
hiệnhiện phépphép soso sánhsánh BruteBrute ForceForce giữagiữa mẫumẫu vàvà
chuỗichuỗi nàynày
TheoTheo cáchcách này,này, sẽsẽ chỉchỉ cócó mộtmột phépphép soso sánhsánh ứngứng vớivới
mỗimỗi chuỗichuỗi concon trongtrong vănvăn bản,bản, vàvà BruteBrute ForceForce sẽsẽ
chỉchỉ cầncần đếnđến khikhi cáccác giágiá trịtrị bămbăm bằngbằng nhaunhau
4/14/2011
7
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
1313
ThuậtThuật tốntốn RabinRabin Karp Karp
HãyHãy xemxem víví dụdụ dướidưới đâyđây đểđể rõrõ hơnhơn mộtmột chútchút::
GiáGiá trịtrị bămbăm củacủa “AAAAA”“AAAAA” làlà 100100
GiáGiá trịtrị bămbăm củacủa “AAAAH”“AAAAH” làlà 3737
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
1414
Thuật toán RabinThuật toán Rabin Karp Karp
4/14/2011
8
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
1515
Thuật toán RabinThuật toán Rabin Karp Karp
MẫuMẫu cócó chiềuchiều dàidài MM kýký tựtự
hash_phash_p == giágiá tròtrò bămbăm củacủa mẫumẫu
hash_thash_t == giágiá tròtrò bămbăm củacủa MM kýký tựtự đầầu trongtrong texttext
dodo
ifif ((hash_phash_p ==== hash_thash_t))
SoSo sánhsánh brutebrute forceforce giữagiữa mẫumẫu vàvà chuỗichuỗi concon
hash_thash_t == giágiá tròtrò bămbăm củacủa MM kýký tựtự kếkế trongtrong texttext
untiluntil (kết(kết thúcthúc texttext hoặchoặc kếtkết quảquả soso sánhsánh ==== true)true)
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
1616
ThuậtThuật tốntốn RabinRabin KarpKarp
NhữngNhững câucâu hỏihỏi chungchung củacủa RabinRabin KarpKarp::
ChọnChọn hàmhàm bămbăm nàonào đểđể tínhtính giágiá trịtrị băm?băm?
CóCó tốntốn nhiềunhiều thờithời giangian đểđể “băm”“băm” cáccác chuỗichuỗi concon
hayhay khơng?khơng?
ĐãĐã kếtkết thúcthúc qq trìnhtrình tìmtìm kiếmkiếm chưa?chưa?
ĐểĐể trảtrả lờilời nhữngnhững câucâu hỏihỏi trêntrên tata cầncần quayquay lạilại tốntốn
họchọc mộtmột chútchút
4/14/2011
9
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
1717
TốnTốn họchọc vớivới RabinRabin KarpKarp
XemXem chuỗichuỗi kýký MM tựtự nhưnhư làlà mộtmột sốsố MM chữchữ sốsố trongtrong
cơcơ sốsố bb,, vớivới bb làlà sốsố kýký tựtự trongtrong bảngbảng chữchữ cáicái
ChuỗiChuỗi kýký tựtự concon t[it[i …… i+Mi+M 11]] đượcđược ánhánh xạxạ thànhthành
h(i)=t[i]h(i)=t[i]××bb
MM 11
+t[i+1]+t[i+1]××bb
MM 22
+ +t[i+M+ +t[i+M 1]1]
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
1818
TốnTốn họchọc vớivới RabinRabin KarpKarp
HơnHơn nữa,nữa, cócó x(i)x(i) tata cócó thểthể tínhtính x(i+x(i+11)) chocho
chuỗichuỗi concon kếkế tiếptiếp t[i+t[i+11 i+M]i+M] vớivới chichi phíphí cốcố
địnhđịnh (O((O(11)))) nhưnhư sausau::
h(i+h(i+11)=t[i+)=t[i+11]]××bb
MM 11
+t[i++t[i+22]]××bb
MM
22
++ +t[i+M]+t[i+M]
h(i+h(i+11)=h()=h(ii))××bb ShiftShift leftleft 11 digitdigit
t[t[ii]]××bb
MM
TrừTrừ chữchữ sốsố tráitrái nhấtnhất
+t[+t[i+Mi+M]] CộngchữsốCộngchữsố phảiphải nhấtnhất
4/14/2011
10
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
1919
TốnTốn họchọc vớivới RabinRabin Karp Karp
BằngBằng cáchcách này,này, tata khơngkhơng baobao giờgiờ thậtthật sựsự phảiphải tínhtính
mộtmột giágiá trịtrị mớimới ĐơnĐơn giản,giản, tata chỉchỉ phảiphải hiệuhiệu chỉnhchỉnh
giágiá trịtrị sẵnsẵn cócó khikhi dịchdịch chuyểnchuyển sangsang phảiphải 11 kýký tựtự
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
2020
TốnTốn họchọc vớivới RabinRabin KarpKarp
nn XétXét mộtmột víví dudu
¨¨ GiảGiả sửsử bộbộ chữchữ cáicái củacủa chúngchúng tata gồmgồm 1010 kýký tựtự [a,[a, b,b,
c,c, d,d, e,e, f,f, g,g, h,h, ii,, j]j]
¨¨ GiảGiả sửsử “a”“a” tươngtương ứngứng vớivới 11,, “b”“b” tươngtương ứngứng vớivới 22,,
……
¨¨ GiáGiá trịtrị bămbăm củacủa chuỗichuỗi “cah”“cah” sẽsẽ làlà::
3*100 + 1*10 + 8*1 = 3183*100 + 1*10 + 8*1 = 318
4/14/2011
11
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
2121
TốnTốn họchọc vớivới RabinRabin KarpKarp
NếuNếu MM lớn,lớn, giágiá trịtrị kếtkết quảquả sẽsẽ rấtrất lớnlớn (~b(~b
MM
)) ĐểĐể giảigiải
quyếtquyết vấnvấn đềđề này,này, tata sẽsẽ dùngdùng hàmhàm MODMOD ((%% trongtrong
C)C) đểđể chỉchỉ lấylấy phầnphần dưdư sausau khikhi chiachia chocho mộtmột sốsố
ngunngun tốtố pp
HàmHàm MODMOD đượcđược dùngdùng vìvì mộtmột sốsố tínhtính chấtchất sausau củacủa
nónó::
[(x mod p)+(y mod p)]mod p = ([(x mod p)+(y mod p)]mod p = (x+yx+y)mod p)mod p
(x mod p) mod p = x mod p(x mod p) mod p = x mod p
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
2222
TốnTốn họchọc vớivới RabinRabin KarpKarp
DoDo đóđó::
h(h(ii)=((t[)=((t[ii]]××bb
MM 11
modmod p)+(t[i+p)+(t[i+11]]××bb
MM 22
modmod p)p)
++ +(t[i+M+(t[i+M 11]mod]mod p))modp))mod pp
h(i+h(i+11)=(h()=(h(ii))××bb modmod pp //// ShiftShift leftleft 11 digitdigit
t[t[ii]]××bb
MM
modmod pp //// TrừTrừ chữchữ sốsố tráitrái nhấtnhất
++ t[t[i+Mi+M]] modmod p)p)//// CộngCộng chữchữ sốsố phảiphải nhấtnhất
modmod pp
4/14/2011
12
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
2323
TốnTốn họchọc vớivới RabinRabin KarpKarp
ĐộĐộ phứcphức tạptạp củacủa thuậtthuật tốntốn RabinRabin KarpKarp
NếuNếu pp làlà sốsố ngunngun tốtố đủđủ lớn,lớn, giágiá trịtrị bămbăm nóinói
chungchung sẽsẽ kháckhác nhaunhau vớivới cáccác chuỗichuỗi kháckhác nhaunhau
TrongTrong trườngtrường hợphợp này,này, việcviệc tìmtìm kiếmkiếm tốntốn chichi
phíphí O(N)O(N),, trongtrong đóđó NN làlà sốsố kýký tựtự cócó trongtrong texttext
TaTa lnln cócó thểthể tìmtìm đượcđược víví dụdụ trongtrong đó,đó, trongtrong
trườngtrường hợphợp xấuxấu nhất,nhất, chichi phíphí sẽsẽ làlà O(MNO(MN)) TuyTuy
nhiên,nhiên, trườngtrường hợphợp nàynày cócó lẽlẽ sẽsẽ chỉchỉ xảyxảy rara khikhi pp
qq nhỏnhỏ
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
2424
ThuậtThuật tốntốn KnuthKnuth MorrisMorris Pratt Pratt
ThuậtThuật tốntốn KnuthKnuth MorrisMorris PrattPratt (KMP(KMP)) kháckhác vớivới
thuậtthuật tốntốn brutebrute forceforce ởở chỗchỗ nónó lưulưu lạilại thơngthơng tintin vềvề
nhữngnhững lầnlần soso sánhsánh trướctrước đểđể dùngdùng chocho lầnlần soso sánhsánh
kếkế tiếptiếp
MộtMột hàmhàm••failurefailure function(f)function(f) đượcđược dùngdùng đểđể tínhtính baobao
nhiêunhiêu thơngthơng tintin ởở bướcbước trướctrước cócó thểthể đượcđược dùngdùng lạilại
ĐặcĐặc biệt,biệt, ff cócó thểthể địnhđịnh nghĩanghĩa nhưnhư prefixprefix dàidài nhấtnhất
củacủa mẫumẫu P[P[00,, ,j],j] đồngđồng thờithời làlà suffixsuffix củacủa P[P[11,, ,j],j]
((chúchú ý,ý, khơngkhơng phảiphải củacủa P[P[00,, ,j],j]))
4/14/2011
13
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
2525
VíVí dụdụ::
GiáGiá tròtrò củacủa KPMKPM failurefailure functionfunction::
HàmHàm nàynày chocho biếtbiết baobao nhiêunhiêu kýký tựtự ởở đầầu củacủa
mẫumẫu tínhtính đếnđến nơinơi xảyxảy rara sựsự kháckhác biệtbiệt khớpkhớp vớivới
texttext
NếuNếu sựsự kháckhác biệtbiệt xảyxảy rara ởở vòvò trítrí 44,, tata sẽsẽ biếtbiết a,a,
bb ởở vòvò trítrí 22,, 33 tươngtương ứngứng vớivới a,a, bb ởở vòvò trítrí 00,, 11
ThuậtThuật tốntốn KnuthKnuth MorrisMorris Pratt Pratt
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
2626
ThuậtThuật tốntốn so so khớpkhớp KPMKPM((mãmã giảgiả):):
returnreturn
““
KhongKhong
coco
PP
trongtrong
TT
””
AlgorithmAlgorithm KMPMatcKMPMatchh(T,P)(T,P)
InputInput::StringString TT (text)(text) vớivới nn kýký tựtự vàvà mẫumẫu PP vớivới mm kýký tựtự
OutputOutput::ChỉChỉ sốsố đầuđầu củacủa chuỗichuỗi concon đầuđầu tiêntiên trongtrong TT khớpkhớp vớivới P,P, hoặchoặc chocho biếtbiết
PP khơngkhơng phảiphải làlà chuỗichuỗi concon củacủa TT
ff ¬¬ KMPFailureFunctionKMPFailureFunction(P)(P);; ////xâyxây dựngdựng failurefailure functionfunction
ii ¬¬ 00;; jj ¬¬ 00;;
whilewhile ii << nn dodo
ifif P[j]P[j] == T[T[ii]] thenthen
ifif jj == mm 11 thenthen
returnreturn ii mm 11 //tìm//tìm đượcđược mộtmột chuỗichuỗi concon khớpkhớp
ii ¬¬ ii ++ 11
jj ¬¬ jj ++ 11
elseelse ifif jj >> 00 thenthen //khơng//khơng khớp,khớp, nhưngnhưng còncòn dữdữ liệuliệu
jj ¬¬ f(jf(j 11)) //j//j chỉchỉ đếnđến ngayngay sausau matchingmatching prefixprefix trongtrong PP
elseelse
ii ¬¬ ii ++ 11
returnreturn ““KhongKhong coco PP trongtrong TT””
4/14/2011
14
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
2727
Thuật toán KPM failure function Thuật toán KPM failure function
ii
¬¬
ii
++
11
AlgorithmAlgorithm KMPFailureFunctionKMPFailureFunction(P)(P);;
InputInput::StringString mẫumẫu PP vớivới mm kýký tựtự
OutputOutput::FailureFailure functionfunction ff ứngứng vớivới P,P, sẽsẽ ánhánh xạxạ jj vớivới chiềuchiều dàidài củacủa longestlongest
prefixprefix củacủa PP làlà suffixsuffix củacủa P[P[11,, ,j],j]
ii ¬¬ 11;; jj ¬¬ 00;;
whilewhile ii ££ mm 11 dodo
ifif P[j]P[j] == T[j]T[j] thenthen ////tata cócó jj ++ 11 kýký tựtự khớpkhớp nhaunhau
f(f(ii)) ¬¬ jj ++ 11
ii ¬¬ ii ++ 11
jj ¬¬ jj ++ 11
elseelse ifif jj >> 00 thenthen //// jj chỉchỉ đếnđến ngayngay sausau matchingmatching prefixprefix trongtrong PP
jj ¬¬ f(jf(j 11))
elseelse ////khơngkhơng khớpkhớp
f(f(ii)) ¬¬ 00
ii ¬¬ ii ++ 11
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
2828
ThuậtThuật tốntốn KnuthKnuth MorrisMorris Pratt Pratt
4/14/2011
15
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
2929
PhânPhân tíchtích độđộ phứcphức tạptạp củacủa thuậtthuật tốntốn
ĐịnhĐịnh nghĩanghĩa kk == ii jj
TrongTrong mỗimỗi lầnlần lặplặp củacủa vòngvòng lặplặp whilewhile mộtmột trongtrong
33 điềuđiều sausau sẽsẽ xảyxảy rara::
NếuNếu T[i]T[i] == P[j],P[j], thìthì ii tăngtăng lênlên 11,, jj cũngcũng vậy,vậy, kk
khơngkhơng đổiđổi
NếuNếu T[i]T[i] !=!= P[j]P[j] vàvà jj >> 00,, thìthì ii khơngkhơng đổiđổi vàvà kk
tăngtăng lênlên ítít nhấtnhất 11,, vìvì kk thaythay đổiđổi trongtrong khoảngkhoảng
từtừ ii jj đếnđến ii f(jf(j 11))
NếuNếu T[i]!=P[j]T[i]!=P[j] vàvà jj == 00,, thìthì ii tăngtăng lênlên 11 vàvà kk
tăngtăng
lênlên
11
vìvì
jj
khơngkhơng
đổiđổi
ThuậtThuật tốntốn KnuthKnuth MorrisMorris Pratt Pratt
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
3030
ThuậtThuật tốntốn KnuthKnuth MorrisMorris Pratt Pratt
NhưNhư vậy,vậy, mỗimỗi lầnlần lặp,lặp, ii hoặchoặc k,k, tăngtăng lênlên ítít nhấtnhất 11
nênnên sốsố lầnlần lặplặp tốitối đađa làlà 22nn
DĩDĩ nhiênnhiên tata đangđang giảgiả thiếtthiết ff đãđã đượcđược tínhtính trướctrước
TuyTuy nhiên,nhiên, cáchcách tínhtính ff gầngần giốnggiống nhưnhư KMPMatchKMPMatch
nênnên chichi phíphí tínhtính ff hồnhồn tồntồn tươngtương tựtự == O(m)O(m)
TổngTổng chichi phíphí:: O(O(nn ++ m)m)
4/14/2011
16
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
3131
Regular Expressions Regular Expressions
KýKý hiệuhiệu chocho phépphép tata mơmơ tảtả cáccác chũichũi kýký tựtự,, cócó thểthể
dàidài vơvơ hạnhạn
ee kýký hiệuhiệu chuỗichuỗi rỗngrỗng
abab ++ cc kýký hiệuhiệu tậptập hợphợp {{abab,, c}c}
a*a* kýký hiệuhiệu tậptập hợphợp {e,{e, a,a, aaaa,, aaaaaa,, }}
Dương Anh Đức Dương Anh Đức –– Nhập môn Cấu trúc Dữ liệu và Giải thuậtNhập môn Cấu trúc Dữ liệu và Giải thuật
3232
Regular Expressions Regular Expressions
VíVí dudu
((a+ba+b)*)* tấttất cáccác cáccác chuỗichuỗi kýký tựtự vớivới bộbộ chữchữ cáicái
{{a,ba,b}}
b*(b*(abab*a)*b**a)*b* cáccác chuỗichuỗi kýký tựtự vớivới mộtmột sốsố chẵnchẵn kýký
tựtự aa
((a+ba+b)*sun()*sun(a+ba+b)*)* cáccác chuỗichuỗi kýký tựtự cócó chứachứa chuỗichuỗi
concon “sun”“sun”
((a+ba+b)()(a+ba+b)()(a+ba+b)a)a chuỗichuỗi 44 kýký tựtự kếtkết thúcthúc bằngbằng aa