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

What's hot

luan van thac si tim hieu lap trinh python va ung dung phat trien web
luan van thac si tim hieu lap trinh python va ung dung phat trien webluan van thac si tim hieu lap trinh python va ung dung phat trien web
luan van thac si tim hieu lap trinh python va ung dung phat trien web
Dịch vụ viết thuê Luận Văn - ZALO 0932091562
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệ
Hưởng Nguyễn
 
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPTBÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
MasterCode.vn
 
Xây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sựXây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sự
AskSock Ngô Quang Đạo
 
Quản lý giải vô địch bóng đá quốc gia
Quản lý giải vô địch bóng đá quốc giaQuản lý giải vô địch bóng đá quốc gia
Quản lý giải vô địch bóng đá quốc gia
Tran Van Cuong
 
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtĐề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Hưởng Nguyễn
 
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
The Nguyen Manh
 
Đề tài: Xây dựng phần mềm quản lí bán thuốc, HAY, 9đ
Đề tài: Xây dựng phần mềm quản lí bán thuốc, HAY, 9đĐề tài: Xây dựng phần mềm quản lí bán thuốc, HAY, 9đ
Đề tài: Xây dựng phần mềm quản lí bán thuốc, HAY, 9đ
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
Chuong03
Chuong03Chuong03
Chuong03
caovanquy
 
Bài gảng cơ sở an toàn thông tin PTIT
Bài gảng cơ sở an toàn thông tin PTITBài gảng cơ sở an toàn thông tin PTIT
Bài gảng cơ sở an toàn thông tin PTIT
NguynMinh294
 
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNGPHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
Thùy Linh
 
PP Hệ thống thông tin - Hệ thống quản lý khách sạn
PP Hệ thống thông tin - Hệ thống quản lý khách sạnPP Hệ thống thông tin - Hệ thống quản lý khách sạn
PP Hệ thống thông tin - Hệ thống quản lý khách sạn
Han Nguyen
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
pisu412
 
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải PhòngĐề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
Dịch vụ viết bài trọn gói ZALO: 0909232620
 
Phân tích thiết kế hệ thống thông tin PTIT
Phân tích thiết kế hệ thống thông tin PTIT Phân tích thiết kế hệ thống thông tin PTIT
Phân tích thiết kế hệ thống thông tin PTIT
NguynMinh294
 
Đề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đ
Đề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đĐề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đ
Đề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đ
Dịch vụ viết bài trọn gói ZALO: 0909232620
 
Tấn công sql injection sử dụng câu lệnh select union
Tấn công sql injection sử dụng câu lệnh select unionTấn công sql injection sử dụng câu lệnh select union
Tấn công sql injection sử dụng câu lệnh select union
Nguyễn Danh Thanh
 

What's hot (20)

luan van thac si tim hieu lap trinh python va ung dung phat trien web
luan van thac si tim hieu lap trinh python va ung dung phat trien webluan van thac si tim hieu lap trinh python va ung dung phat trien web
luan van thac si tim hieu lap trinh python va ung dung phat trien web
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệ
 
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPTBÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
 
Xây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sựXây dựng cơ sở dữ liệu trong quản lý nhân sự
Xây dựng cơ sở dữ liệu trong quản lý nhân sự
 
C2 2
C2 2C2 2
C2 2
 
Quản lý giải vô địch bóng đá quốc gia
Quản lý giải vô địch bóng đá quốc giaQuản lý giải vô địch bóng đá quốc gia
Quản lý giải vô địch bóng đá quốc gia
 
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtĐề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
 
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
 
Đề tài: Xây dựng phần mềm quản lí bán thuốc, HAY, 9đ
Đề tài: Xây dựng phần mềm quản lí bán thuốc, HAY, 9đĐề tài: Xây dựng phần mềm quản lí bán thuốc, HAY, 9đ
Đề tài: Xây dựng phần mềm quản lí bán thuốc, HAY, 9đ
 
Chuong03
Chuong03Chuong03
Chuong03
 
Bài gảng cơ sở an toàn thông tin PTIT
Bài gảng cơ sở an toàn thông tin PTITBài gảng cơ sở an toàn thông tin PTIT
Bài gảng cơ sở an toàn thông tin PTIT
 
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNGPHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
 
PP Hệ thống thông tin - Hệ thống quản lý khách sạn
PP Hệ thống thông tin - Hệ thống quản lý khách sạnPP Hệ thống thông tin - Hệ thống quản lý khách sạn
PP Hệ thống thông tin - Hệ thống quản lý khách sạn
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
 
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải PhòngĐề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
Đề tài: Xây dựng phần mềm quản lý thông tin nhân sự ĐH Hải Phòng
 
Phân tích thiết kế hệ thống thông tin PTIT
Phân tích thiết kế hệ thống thông tin PTIT Phân tích thiết kế hệ thống thông tin PTIT
Phân tích thiết kế hệ thống thông tin PTIT
 
Đề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đ
Đề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đĐề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đ
Đề tài: Xây dựng Website quản lý điểm trường Phổ thông, 9đ
 
Tấn công sql injection sử dụng câu lệnh select union
Tấn công sql injection sử dụng câu lệnh select unionTấn công sql injection sử dụng câu lệnh select union
Tấn công sql injection sử dụng câu lệnh select union
 
Các mô hình dữ liệu
Các mô hình dữ liệuCác mô hình dữ liệu
Các mô hình dữ liệu
 
C4 1
C4 1C4 1
C4 1
 

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