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

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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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 [...]... – Nhập môn Cấu trúc Dữ liệu và Giải thuật 31 Regular Expressions  Ví du  (a+b)* tất các các chuỗi ký tự với bộ chữ cái a+b)* {a,b} a,b}  b*(ab*a)*b* các chuỗi ký tự với một số chẵn ký b*(ab*a)*b* tự a  (a+b)*sun(a+b)* các chuỗi ký tự có chứa chuỗi a+b)*sun(a+b)* con “sun”  (a+b)(a+b)(a+b)a chuỗi 4 ký tự kết thúc bằng a a+b)(a+b)(a+b)a Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 32... nhiêu ký tự ở đầu của mẫu tính đến nơi xảy ra sự khác biệt khớp với text text  Nếu sự khác biệt xảy ra ở vò trí 4, ta sẽ biết a, b ở vò trí 2, 3 tương ứng với a, b ở vò trí 0, 1 Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 25 Thuật tốn so khớp KPM(mã giả): giả): Algorithm KMPMatch(T,P) KMPMatch  Input:String T (text) với n ký tự và mẫu P với m ký tự Input: tự  Output:Chỉ số đầu của chuỗi. .. Rabin-Karp Rabin Độ phức tạp của thuật tốn Rabin-Karp Rabin Nếu p là số ngun tố đủ lớn, giá trị băm nói chung sẽ khác nhau với các chuỗi khác nhau nhau  Trong trường hợp này, việc tìm kiếm tốn chi phí O(N), trong đó N là số ký tự có trong text O(N), text  Ta ln có thể tìm được ví dụ trong đó, trong trường hợp xấu nhất, chi phí sẽ là O(MN) Tuy O(MN) nhiên, trường hợp này có lẽ sẽ chỉ xảy ra khi p q... tính trước trước Tuy nhiên, cách tính f gần giống như KMPMatch nên chi phí tính f hồn tồn tương tự = O(m) Tổng chi phí: O(n + m) phí: O(n Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 30 15 4/14/2011 Regular Expressions  Ký hiệu cho phép ta mơ tả các chũi ký tự, có thể tự, dài vơ hạn  e ký hiệu chuỗi rỗng  ab + c ký hiệu tập hợp {ab, c} ab,  a* ký hiệu tập hợp {e, a, aa, aaa, } aa, aaa,... Output:Chỉ số đầu của chuỗi con đầu tiên trong T khớp với P, hoặc cho biết Output:  P khơng phải là chuỗi con của T  f ¬ KMPFailureFunction(P); //xây dựng failure function KMPFailureFunction(P); //xây  i ¬ 0; j ¬ 0;  while i < n do  if P[j] = T[i] then T[i  if j = m - 1 then  return i - m - 1 / /tìm được một chuỗi con khớp  i ¬i + 1  j ¬j + 1  else if j > 0 then //khơng khớp, nhưng còn dữ liệu  j... function Algorithm KMPFailureFunction(P); KMPFailureFunction(P);  Input:String mẫu P với m ký tự Input:  Output:Failure function f ứng với P, sẽ ánh xạ j với chiều dài của longest Output: prefix của P là suffix của P[1, ,j] P[1 ,j]  i ¬ 1; j ¬ 0;  while i £ m-1 do  if P[j] = T[j] then //ta có j + 1 ký tự khớp nhau //ta  f(i f(i) ¬ j + 1  i ¬i + 1  j ¬j + 1  else if j > 0 then // j chỉ đến ngay . 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. 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. 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

Ngày đăng: 13/07/2014, 22:20

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan