SlideShare a Scribd company logo
Giảng viên:
                       Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến




              2


                                         Giới thiệu


                                 Thuật toán Brute-Force


                                 Thuật toán Morris-Pratt


                           Cải tiến với Knuth-Morris-Pratt


                                 Thuật toán Rabin-Karp

                  Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                         1
3


                     Đối sánh chuỗi
                       Từkhóa: String matching, String searching, Pattern
                       searching, Text Searching

                       Mộttrong những thuật toán quan trọng và có ứng dụng
                       rộng rãi.




                              Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              4


                     Ứng dụng của đối sánh chuỗi:
                       Máy  tìm kiếm
                       Trình soạn thảo văn bản

                       Trình duyệt web

                       Sinh học phân tử (Tìm mẫu trong dãy DNA).

                       ..




                              Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                   2
5

                     Mục tiêu:
                       Kiểm tra sự tồn tại của một chuỗi ký tự (mẫu, pattern) trong
                        một chuỗi ký tự có kích thước lớn hơn nhiều (văn bản,
                        text).
                       Nếu tồn tại, trả về một (hoặc nhiều) vị trí xuất hiện.


                     Quy ước:
                       Mẫu cần tìm: P (chiều dài m).
                       Văn bản: T (chiều dài n).
                       P và T có cùng tập hữu hạn ký tự ∑. (∑ = {0, 1};
                        ∑={A,..,Z},…)
                      m≤n


                                  Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              6


                     Đối sánh chuỗi:
                       Bằng  cách lần lượt dịch chuyển (cửa sổ) P trên T.
                       P tồn tại trên T tại vị trí bắt đầu là i (0 ≤ i ≤ n – m) nếu
                           T[i   + j] = P[j] với mọi 0 ≤ j ≤ m - 1.


                     Ví dụ:
                      P=   abbaba
                       T = ababaabbabaa

                      => i = 5

                                  Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                            3
7


                     Các thuật toán tiêu biểu:
                       BruteForce
                       Morris-Pratt

                       Knuth-Morris-Pratt

                       Rabin-Karp

                       Boyer-Moore

                      …




                            Cấu trúc dữ liệu và giải thuật - HCMUS 2012




                            Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                               4
9


                      Lần lượt kiểm tra điều kiện P[0…m-1] =
                       T[i…i+m-1] tại mọi vị trí có thể của i.

                      Ví dụ
                        Tìm   kiếm P = aab trong T = acaabc




                               Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              10


                   bruteForceMatcher(T, P)
                       n ← length[T]
                       m ← length[P]
                       for i ← 0 to n - m
                         if P[0..m-1] = T[i…i+m-1]
                            return i




                               Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                  5
11


                      Trường hợp tốt nhất – không tìm thấy: O(n).

                      Trường hợp xấu nhất – không tìm thấy: O(n*m).

                      Trường hợp trung bình: O(n+m).




                             Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              12


                      Không cần thao tác tiền xử lý trên P.

                      Luôn luôn dịch chuyển mẫu (cửa sổ) sang phải
                       một vị trí.

                      Thao tác so sánh có thể thực hiện theo bất kỳ
                       chiều nào.

                      Trường hợp xấu nhất: O((n-m+1)*m).
                             Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                6
Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              14


                      Điểm hạn chế của thuật toán Brute-Force:
                        Không ghi nhớ được thông tin đã trùng khớp (trước)
                        khi xảy ra tình trạng không so khớp.

                        Phải   so sánh lại từ đầu (trên P) trong tất cả trường hợp




                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                           7
15


                      Ví dụ:
                        T: 10101011101001;
                        P: 10100


                          Brute Force: i = 0, j = 4, T[i+j] != P[j] => i = 1, j = 0
                            T : 10101011101001
                            P: 10100


                          Cách khác? i = 0, j = 4, T[i+j] != P[j] => i = 2, j = 2
                              T : 10101011101001
                              P:    10100

                                 Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              16


                      Ghi nhận lại những phần của T đã trùng với P
                       trước đó.

                      Cố gắng tăng số bước dịch chuyển P trên T
                       (thay vì 01 đơn vị).

                      Cố gắng bỏ qua một số bước so sánh giữa P
                       và T tại vị trí mới (thay vì j=0, gán j bằng một số
                       thích hợp).

                                 Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                            8
17


                      Giả sử:
                       i  là vị trí bắt đầu sự đối sánh (trên T).
                        j là vị trí đang so sánh (trên P). (Ký tự tương ứng trên
                         T tại vị trí i+j).
                        T[i+j] != P[j] => không so khớp




                                 Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              18


                      Tìm:
                        Vị   trí mới i1 (trên T) và j1 (trên P) sao cho
                          i+j= i1+j1 (ngay tại vị trí đang xem xét)
                          v =T[i1 … i1+j1–1] là đoạn so khớp mới giữa P và T.

                      Khi đó:
                        Đoạn dịch chuyển cửa sổ: j – j1.(do j1 < j)
                        Có thể tìm i1 dựa trên j1.




                                 Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                         9
19


                      Vấn đề:
                        Tìm    giá trị j1 dựa trên j.


                      Cách thức:
                        Tính    sẵn các giá trị của j1 ứng với mỗi vị trí j (trên P).

                      Câu hỏi:
                        Có   thể làm được không? Tại sao?


                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              20


                      Bảng NEXT:
                        Bảng    chứa các giá trị j1 ứng với các giá trị j.

                      Ví dụ:

                         j         0       1       2        3       4         5   6
                         j1       -1       0       1        1       0         3   2




                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                              10
21


                      Hoàn toàn dựa trên P.

                      Cách thức:
                        NEXT[0]   = -1
                        Với mỗi vị trí j > 0, giá trị của NEXT[j] (j1) là số k lớn
                         nhất (k < j) sao cho:
                         k  ký tự đầu tiên khớp với k ký tự cuối cùng của chuỗi
                           trước vị trí j.
                          Nghĩa là P[0..k-1] = P[j-k ..j-1]



                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              22


                      Ví dụ:
                        P = AAATA

                        Bảng    NEXT:
                          NEXT[0]       = -1




                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                           11
23


                      P = AAATA
                      j=1
                      NEXT[1] = 0
                             A             A            A            T        A

                                           A            A            A        T   A




                            Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              24


                      P = AAATA
                      j=2
                      NEXT[2] = 1
                               A            A            A                T   A


                                            A            A                A   T   A




                            Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                           12
25


                      P = AAATA
                      j=3
                      NEXT[3] = 2
                            A           A             A           T           A


                                        A             A           A           T   A




                            Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              26


                      P = AAATA
                      j=4
                      NEXT[4] = 0

                        A       A   A       T     A


                                                  A       A      A        T   A




                            Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                           13
27


                        P = AAATA

                        Bảng   NEXT
                         NEXT[0] = -1
                         NEXT[1] = 0
                         NEXT[2] = 1
                         NEXT[3] = 2
                         NEXT[4] = 0


                                       0           1          2           3   4

                           NEXT        -1          0          1           2   0


                            Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              28


                      Xây dựng bảng NEXT cho P = 10100

                      Xây dựng bảng NEXT cho P = ABACAB

                      Xây dựng bảng NEXT cho P = GCAGAGAG

                      Xây dựng bảng NEXT cho P = AABAABA


                            Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                       14
29


                      P = 10100
                                             0        1          2             3       4
                          NEXT               -1       0          0             1       2



                      P = ABACAB

                                         0        1        2         3             4   5
                          NEXT          -1        0        0         1             0   1




                                 Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              30


                      Mục tiêu :
                        Xác     định vị trí mới i1 (trên T) và j1 (trên P) sao cho
                          i+j= i1+j1 (vị trí đang xem xét)
                          v =T[i1 … i1+j1–1] là đoạn so khớp mới giữa P và T.

                      Đã có j1 = NEXT[j]
                      Vậy, i1 = i + j – NEXT[j]




                                 Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                                15
31

                      Ví dụ:
                          T = AATAAAATA
                          P = AAATA
                                           0           1          2           3   4

                             NEXT          -1          0          1           2   0

                        i = 0 AATAAAATA
                        j = 0 AAATA


                        i = 0 AATAAAATA
                        j = 1 AAATA



                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              32

                      Ví dụ:
                        T = AATAAAATA
                        P = AAATA
                                           0           1          2           3   4

                             NEXT          -1          0          1           2   0

                        i = 0 AATAAAATA
                        j = 2 AAATA


                        i = 1 AATAAAATA                   (i = 0 + 2 – 1)
                        j = 1 AAATA                       (j = 1)


                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                           16
33

                      Ví dụ:
                          T = AATAAAATA
                          P = AAATA
                                           0           1          2           3   4

                             NEXT          -1          0          1           2   0

                       i = 2 AATAAAATA                    (i = 1 + 1 – 0)
                       j=0     AAATA                      (j = 0)

                       i = 3 AATAAAATA                    (i = 2 + 0 – (-1))
                       j=0      AAATA                     (j = 0)


                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              34

                      Ví dụ:
                        T = AATAAAATA
                        P = AAATA
                                           0           1          2           3   4

                             NEXT          -1          0          1           2   0

                       i = 3 AATAAAATA
                       j=3      AAATA

                       i = 4 AATAAAATA                    (i = 3 + 3 – 2)
                       j=2       AAATA                    (j = 2)


                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                           17
35


                      Ví dụ:
                       T  = AATAAAATA
                        P = AAATA
                                           0           1          2           3   4

                            NEXT           -1          0          1           2   0



                       i = 4 AATAAAATA
                       j=4         AAATA
                       (Hoàn toàn so khớp, vị trí xuất hiện của P trong T tại i=4)

                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              36


                      Tính NEXT: O(m)
                      Tìm kiếm: O(n)
                      Tổng: O(n+m)




                                Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                           18
37




                              Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              38


                      Thuật toán Knuth-Morris-Pratt cải tiến Morris-
                       Pratt bằng cách
                        bổ  sung thêm điều kiện a ≠ c (vì nếu a và c như nhau
                         thì sẽ không khớp ngay sau khi dịch chuyển).




                              Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                      19
39


                      Thay đổi cách tính bảng NEXT:
                        Nếup[i] ≠ p[j] thì NEXT[i] = j
                        Ngược lại NEXT[i] = NEXT[j]



                      Thao tác tìm kiếm vẫn không thay đổi




                               Cấu trúc dữ liệu và giải thuật - HCMUS 2012




              40


                      P = 10100
                                           0        1          2             3        4
                          MP               -1       0          0             1        2
                          KMP              -1       0         -1             0        2

                      P = ABACAB

                                       0        1        2         3             4    5
                          MP          -1        0        0         1             0    1
                          KMP         -1        0        -1        1             -1   0



                               Cấu trúc dữ liệu và giải thuật - HCMUS 2012




© FIT-HCMUS                                                                               20

More Related Content

DOC
Công thức đạo hàm
PDF
Kiến thức hình học lớp 4
PDF
Bat phuong trinh vo ti
PDF
Phương pháp đếm hình tam giác, hình vuông, hình chữ nhật
PPTX
chuong 1. co so logic
DOCX
TUYỂN TẬP 24 CHUYÊN ĐỀ BỒI DƯỠNG TOÁN LỚP 4 TỪ CƠ BẢN ĐẾN NÂNG CAO
PDF
đồ áN cấu trúc dữ liệu và thuật toán trò chơi nim
PDF
Các chuyên đề bồi dưỡng HSG môn Toán THCS hay nhất
Công thức đạo hàm
Kiến thức hình học lớp 4
Bat phuong trinh vo ti
Phương pháp đếm hình tam giác, hình vuông, hình chữ nhật
chuong 1. co so logic
TUYỂN TẬP 24 CHUYÊN ĐỀ BỒI DƯỠNG TOÁN LỚP 4 TỪ CƠ BẢN ĐẾN NÂNG CAO
đồ áN cấu trúc dữ liệu và thuật toán trò chơi nim
Các chuyên đề bồi dưỡng HSG môn Toán THCS hay nhất

What's hot (20)

PPTX
Tìm thành phần liên thông mạnh và bài toán 2-SAT
PPT
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 2
PPTX
Tích phân bội 3 (Phần 2).pptx
RTF
Bt dai so hoang
DOCX
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
PPTX
Hướng dẫn sử dụng YOLO v5.pptx
PDF
Tổng Hợp Công Thức Vật Lí Lớp 12
PDF
Bài toán cực trị trong hình học giải tích
DOC
Tóm tắt công thức vật lý 12, luyện thi đại học
DOC
74774655 chuỗi-ham
DOCX
Bai de quy
PPTX
chuong 4. dai so boole
PPTX
Hệ mật mã Elgamal
PDF
Kiến trúc máy tính và hợp ngữ bài 02
PDF
Lý thuyết và bài tập quang điện
PDF
Hd th sql server_tuan5_n_khanh
PDF
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
PDF
Một số dạng toán về đa thức qua các kỳ thi Olympic
PPT
Slide bài tập huấn GV về phần mềm Geogebra. Bài 5. Bắt đầu với không gian 3D,...
PDF
Bai tap va loi giai sql
 
Tìm thành phần liên thông mạnh và bài toán 2-SAT
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 2
Tích phân bội 3 (Phần 2).pptx
Bt dai so hoang
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
Hướng dẫn sử dụng YOLO v5.pptx
Tổng Hợp Công Thức Vật Lí Lớp 12
Bài toán cực trị trong hình học giải tích
Tóm tắt công thức vật lý 12, luyện thi đại học
74774655 chuỗi-ham
Bai de quy
chuong 4. dai so boole
Hệ mật mã Elgamal
Kiến trúc máy tính và hợp ngữ bài 02
Lý thuyết và bài tập quang điện
Hd th sql server_tuan5_n_khanh
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Một số dạng toán về đa thức qua các kỳ thi Olympic
Slide bài tập huấn GV về phần mềm Geogebra. Bài 5. Bắt đầu với không gian 3D,...
Bai tap va loi giai sql
 
Ad

Similar to Ctdl 08-string matching-01 (20)

PDF
Cấu trúc dữ liệu cơ bản 1
PPT
Bai giang thuat toan tim kiem va sap xep
PPTX
SLIDE CAU TRUC DL_GT.pptx
PDF
Cấu trúc dữ liệu cơ bản - Giới thiệu
DOCX
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
DOC
Baitap ktlt
PDF
Cautrucdulieu full
 
PPT
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
PDF
Baitap ktlt
DOCX
Luận Văn Đề Cương Dùng Cho Ngành Công Nghệ Thông Tin Cấu Trúc Dữ Liệu Và Giả...
PDF
Cơ sở dữ liệu và giải thuật Vũ Song Tùng
PDF
Cấu trúc dữ liệu cơ bản - Ôn tập
PDF
CTDL_02_SXTK Cấu trúc dữ liệu và giải thuật
PPT
Ctdl 01 t_quan
PDF
Cấu truc-dữ-liệu-va-thuật-giải-1
PDF
Tìm kiếm và sắp nội
PDF
BAOCAO.pdf
PDF
Cac van de co so kh may tinh
PDF
C10 generic algorithms
PDF
C10 generic algorithms
Cấu trúc dữ liệu cơ bản 1
Bai giang thuat toan tim kiem va sap xep
SLIDE CAU TRUC DL_GT.pptx
Cấu trúc dữ liệu cơ bản - Giới thiệu
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Baitap ktlt
Cautrucdulieu full
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Baitap ktlt
Luận Văn Đề Cương Dùng Cho Ngành Công Nghệ Thông Tin Cấu Trúc Dữ Liệu Và Giả...
Cơ sở dữ liệu và giải thuật Vũ Song Tùng
Cấu trúc dữ liệu cơ bản - Ôn tập
CTDL_02_SXTK Cấu trúc dữ liệu và giải thuật
Ctdl 01 t_quan
Cấu truc-dữ-liệu-va-thuật-giải-1
Tìm kiếm và sắp nội
BAOCAO.pdf
Cac van de co so kh may tinh
C10 generic algorithms
C10 generic algorithms
Ad

Ctdl 08-string matching-01

  • 1. Giảng viên: Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến 2 Giới thiệu Thuật toán Brute-Force Thuật toán Morris-Pratt Cải tiến với Knuth-Morris-Pratt Thuật toán Rabin-Karp Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 1
  • 2. 3  Đối sánh chuỗi  Từkhóa: String matching, String searching, Pattern searching, Text Searching  Mộttrong những thuật toán quan trọng và có ứng dụng rộng rãi. Cấu trúc dữ liệu và giải thuật - HCMUS 2012 4  Ứng dụng của đối sánh chuỗi:  Máy tìm kiếm  Trình soạn thảo văn bản  Trình duyệt web  Sinh học phân tử (Tìm mẫu trong dãy DNA).  .. Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 2
  • 3. 5  Mục tiêu:  Kiểm tra sự tồn tại của một chuỗi ký tự (mẫu, pattern) trong một chuỗi ký tự có kích thước lớn hơn nhiều (văn bản, text).  Nếu tồn tại, trả về một (hoặc nhiều) vị trí xuất hiện.  Quy ước:  Mẫu cần tìm: P (chiều dài m).  Văn bản: T (chiều dài n).  P và T có cùng tập hữu hạn ký tự ∑. (∑ = {0, 1}; ∑={A,..,Z},…) m≤n Cấu trúc dữ liệu và giải thuật - HCMUS 2012 6  Đối sánh chuỗi:  Bằng cách lần lượt dịch chuyển (cửa sổ) P trên T.  P tồn tại trên T tại vị trí bắt đầu là i (0 ≤ i ≤ n – m) nếu  T[i + j] = P[j] với mọi 0 ≤ j ≤ m - 1.  Ví dụ: P= abbaba  T = ababaabbabaa => i = 5 Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 3
  • 4. 7  Các thuật toán tiêu biểu:  BruteForce  Morris-Pratt  Knuth-Morris-Pratt  Rabin-Karp  Boyer-Moore … Cấu trúc dữ liệu và giải thuật - HCMUS 2012 Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 4
  • 5. 9  Lần lượt kiểm tra điều kiện P[0…m-1] = T[i…i+m-1] tại mọi vị trí có thể của i.  Ví dụ  Tìm kiếm P = aab trong T = acaabc Cấu trúc dữ liệu và giải thuật - HCMUS 2012 10 bruteForceMatcher(T, P) n ← length[T] m ← length[P] for i ← 0 to n - m if P[0..m-1] = T[i…i+m-1] return i Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 5
  • 6. 11  Trường hợp tốt nhất – không tìm thấy: O(n).  Trường hợp xấu nhất – không tìm thấy: O(n*m).  Trường hợp trung bình: O(n+m). Cấu trúc dữ liệu và giải thuật - HCMUS 2012 12  Không cần thao tác tiền xử lý trên P.  Luôn luôn dịch chuyển mẫu (cửa sổ) sang phải một vị trí.  Thao tác so sánh có thể thực hiện theo bất kỳ chiều nào.  Trường hợp xấu nhất: O((n-m+1)*m). Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 6
  • 7. Cấu trúc dữ liệu và giải thuật - HCMUS 2012 14  Điểm hạn chế của thuật toán Brute-Force:  Không ghi nhớ được thông tin đã trùng khớp (trước) khi xảy ra tình trạng không so khớp.  Phải so sánh lại từ đầu (trên P) trong tất cả trường hợp Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 7
  • 8. 15  Ví dụ:  T: 10101011101001;  P: 10100  Brute Force: i = 0, j = 4, T[i+j] != P[j] => i = 1, j = 0  T : 10101011101001  P: 10100  Cách khác? i = 0, j = 4, T[i+j] != P[j] => i = 2, j = 2  T : 10101011101001  P: 10100 Cấu trúc dữ liệu và giải thuật - HCMUS 2012 16  Ghi nhận lại những phần của T đã trùng với P trước đó.  Cố gắng tăng số bước dịch chuyển P trên T (thay vì 01 đơn vị).  Cố gắng bỏ qua một số bước so sánh giữa P và T tại vị trí mới (thay vì j=0, gán j bằng một số thích hợp). Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 8
  • 9. 17  Giả sử: i là vị trí bắt đầu sự đối sánh (trên T).  j là vị trí đang so sánh (trên P). (Ký tự tương ứng trên T tại vị trí i+j).  T[i+j] != P[j] => không so khớp Cấu trúc dữ liệu và giải thuật - HCMUS 2012 18  Tìm:  Vị trí mới i1 (trên T) và j1 (trên P) sao cho  i+j= i1+j1 (ngay tại vị trí đang xem xét)  v =T[i1 … i1+j1–1] là đoạn so khớp mới giữa P và T.  Khi đó:  Đoạn dịch chuyển cửa sổ: j – j1.(do j1 < j)  Có thể tìm i1 dựa trên j1. Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 9
  • 10. 19  Vấn đề:  Tìm giá trị j1 dựa trên j.  Cách thức:  Tính sẵn các giá trị của j1 ứng với mỗi vị trí j (trên P).  Câu hỏi:  Có thể làm được không? Tại sao? Cấu trúc dữ liệu và giải thuật - HCMUS 2012 20  Bảng NEXT:  Bảng chứa các giá trị j1 ứng với các giá trị j.  Ví dụ: j 0 1 2 3 4 5 6 j1 -1 0 1 1 0 3 2 Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 10
  • 11. 21  Hoàn toàn dựa trên P.  Cách thức:  NEXT[0] = -1  Với mỗi vị trí j > 0, giá trị của NEXT[j] (j1) là số k lớn nhất (k < j) sao cho: k ký tự đầu tiên khớp với k ký tự cuối cùng của chuỗi trước vị trí j.  Nghĩa là P[0..k-1] = P[j-k ..j-1] Cấu trúc dữ liệu và giải thuật - HCMUS 2012 22  Ví dụ:  P = AAATA  Bảng NEXT:  NEXT[0] = -1 Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 11
  • 12. 23  P = AAATA  j=1  NEXT[1] = 0 A A A T A A A A T A Cấu trúc dữ liệu và giải thuật - HCMUS 2012 24  P = AAATA  j=2  NEXT[2] = 1 A A A T A A A A T A Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 12
  • 13. 25  P = AAATA  j=3  NEXT[3] = 2 A A A T A A A A T A Cấu trúc dữ liệu và giải thuật - HCMUS 2012 26  P = AAATA  j=4  NEXT[4] = 0 A A A T A A A A T A Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 13
  • 14. 27  P = AAATA  Bảng NEXT  NEXT[0] = -1  NEXT[1] = 0  NEXT[2] = 1  NEXT[3] = 2  NEXT[4] = 0 0 1 2 3 4 NEXT -1 0 1 2 0 Cấu trúc dữ liệu và giải thuật - HCMUS 2012 28  Xây dựng bảng NEXT cho P = 10100  Xây dựng bảng NEXT cho P = ABACAB  Xây dựng bảng NEXT cho P = GCAGAGAG  Xây dựng bảng NEXT cho P = AABAABA Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 14
  • 15. 29  P = 10100 0 1 2 3 4 NEXT -1 0 0 1 2  P = ABACAB 0 1 2 3 4 5 NEXT -1 0 0 1 0 1 Cấu trúc dữ liệu và giải thuật - HCMUS 2012 30  Mục tiêu :  Xác định vị trí mới i1 (trên T) và j1 (trên P) sao cho  i+j= i1+j1 (vị trí đang xem xét)  v =T[i1 … i1+j1–1] là đoạn so khớp mới giữa P và T.  Đã có j1 = NEXT[j]  Vậy, i1 = i + j – NEXT[j] Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 15
  • 16. 31  Ví dụ:  T = AATAAAATA  P = AAATA 0 1 2 3 4 NEXT -1 0 1 2 0  i = 0 AATAAAATA  j = 0 AAATA  i = 0 AATAAAATA  j = 1 AAATA Cấu trúc dữ liệu và giải thuật - HCMUS 2012 32  Ví dụ:  T = AATAAAATA  P = AAATA 0 1 2 3 4 NEXT -1 0 1 2 0  i = 0 AATAAAATA  j = 2 AAATA  i = 1 AATAAAATA (i = 0 + 2 – 1)  j = 1 AAATA (j = 1) Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 16
  • 17. 33  Ví dụ:  T = AATAAAATA  P = AAATA 0 1 2 3 4 NEXT -1 0 1 2 0 i = 2 AATAAAATA (i = 1 + 1 – 0) j=0 AAATA (j = 0) i = 3 AATAAAATA (i = 2 + 0 – (-1)) j=0 AAATA (j = 0) Cấu trúc dữ liệu và giải thuật - HCMUS 2012 34  Ví dụ:  T = AATAAAATA  P = AAATA 0 1 2 3 4 NEXT -1 0 1 2 0 i = 3 AATAAAATA j=3 AAATA i = 4 AATAAAATA (i = 3 + 3 – 2) j=2 AAATA (j = 2) Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 17
  • 18. 35  Ví dụ: T = AATAAAATA  P = AAATA 0 1 2 3 4 NEXT -1 0 1 2 0 i = 4 AATAAAATA j=4 AAATA (Hoàn toàn so khớp, vị trí xuất hiện của P trong T tại i=4) Cấu trúc dữ liệu và giải thuật - HCMUS 2012 36  Tính NEXT: O(m)  Tìm kiếm: O(n)  Tổng: O(n+m) Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 18
  • 19. 37 Cấu trúc dữ liệu và giải thuật - HCMUS 2012 38  Thuật toán Knuth-Morris-Pratt cải tiến Morris- Pratt bằng cách  bổ sung thêm điều kiện a ≠ c (vì nếu a và c như nhau thì sẽ không khớp ngay sau khi dịch chuyển). Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 19
  • 20. 39  Thay đổi cách tính bảng NEXT:  Nếup[i] ≠ p[j] thì NEXT[i] = j  Ngược lại NEXT[i] = NEXT[j]  Thao tác tìm kiếm vẫn không thay đổi Cấu trúc dữ liệu và giải thuật - HCMUS 2012 40  P = 10100 0 1 2 3 4 MP -1 0 0 1 2 KMP -1 0 -1 0 2  P = ABACAB 0 1 2 3 4 5 MP -1 0 0 1 0 1 KMP -1 0 -1 1 -1 0 Cấu trúc dữ liệu và giải thuật - HCMUS 2012 © FIT-HCMUS 20