Tải bản đầy đủ (.pdf) (16 trang)

Bài giảng: Xữ lý tìm kiếm trên chuỗi kí tự doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.85 MB, 16 trang )

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

×