1. Trang chủ
  2. » Công Nghệ Thông Tin

Strings and Pattern Matching Pattern Matching

32 339 1
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Strings And Pattern Matching
Tác giả Dương Anh Đức
Người hướng dẫn Nhập Môn Cấu Trúc Dữ Liệu Và Giải Thuật
Trường học Trường Đại Học
Chuyên ngành Cấu Trúc Dữ Liệu
Thể loại Bài Tập
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 32
Dung lượng 428,45 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 2Strings and Pattern Matching ̈ Brute Force, Rabin-Karp, Knuth-Morris-Pratt... Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải

Trang 1

Strings and

Pattern Matching

Trang 2

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 2

Strings and

Pattern Matching

̈ Brute Force,

Rabin-Karp, Knuth-Morris-Pratt

Trang 3

Bài toán tìm kiếm chuỗi ký tự

kiếm vị trí của một mẫu văn bản (text pattern)

một đoạn hay một quyển sách, …)

tâm chính của string searching là tốc độ và hiệu quả

Trang 4

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 4

với văn bản, mỗi lần 1 ký tự, cho đến khi các kýtự không khớp được tìm thấy:

̈ Thuật toán có thể được thiết kế sao cho nó sẽ

trong text hoặc cho đến khi đã xét đến cuối text

Trang 5

Thuật toán Brute Force

Trang 6

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 6

Algorithm Brute Force(P);

Input:String mẫu P với m ký tự

Ouput:Vị trí chuỗi mẫu P trong T hoặc báo không có do

if (text letter == pattern letter)

so sánh text letter kế với pattern letter kế else

chuyển pattern dịch sang phải 1 letter until (tìm thấy toàn bộ pattern hoặc đến cuối text)

Trang 7

Thuật toán Brute Force

Trang 8

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 8

̈ Độ phức tạp của thuật toán Brute Force: Giả sử

kích thước của mẫu là M ký tự và text có N ký tự

̊ Trường hợp xấu nhất: so sánh mẫu với mọi chuỗi con chiều dài M trong text

̊ Tổng số phép so sánh: M (N-M+1)

Trang 9

Thuật toán Brute Force

̈ Độ phức tạp của thuật toán Brute Force: Giả sử

kích thước của mẫu là M ký tự và text có N ký tự

text

Trang 10

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 10

Ví dụ, với M=5 ta có ví dụ sau:

Trang 11

Thuật toán Rabin-Karp

(hash value) của mẫu tìm kiếm và của chuỗi con

M ký tự cần so sánh trong văn bản

̈ Nếu các giá trị băm không bằng nhau, thuật toán

sẽ tính giá trị băm cho chuỗi con M ký tự kế tiếp

Trang 12

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 12

̈ Nếu các giá trị băm bằng nhau, thuật toán thực

chuỗi này

̈ Theo cách này, sẽ chỉ có một phép so sánh ứng

Force sẽ chỉ cần đến khi các giá trị băm bằng nhau

Trang 13

Thuật toán Rabin-Karp

̈ Hãy xem ví dụ dưới đây để rõ hơn một chút:

Trang 14

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 14

Trang 15

Thuật toán Rabin-Karp

̈ Mẫu có chiều dài M ký tự

̈ hash_p = giá trị băm của mẫu

̈ hash_t = giá trị băm của M ký tự đầu trong text

do

if (hash_p == hash_t)

So sánh brute force giữa mẫu và chuỗi con

Trang 16

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 16

̊ Chọn hàm băm nào để tính giá trị băm?

con hay không?

̊ Đã kết thúc quá trình tìm kiếm chưa?

̈ Để trả lời những câu hỏi trên ta cần quay lại toán

học một chút

Trang 17

Toán học với Rabin Rabin -Karp

̈ Xem chuỗi ký M tự như là một số M chữ số trong

cơ số b, với b là số ký tự trong bảng chữ cái

Chuỗi ký tự con t[i … i+M-1] được ánh xạ thành

h(i)=t[i]× bM-1+t[i+1]× bM-2+ +t[i+M-1]

Trang 18

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 18

Toán học với Rabin Rabin -Karp

̈ Hơn nữa,• có x(i) ta có thể tính x(i+1) cho chuỗi

h(i+1)=t[i+1]×bM-1+t[i+2]×bM-2+ +t[i+M]

h(i+1)=h(i)×b Shift left 1 digit

-t[i]×bM Trừ chữ số trái nhất +t[i+M] Cộng chữ số phải nhất

Trang 19

Toán học với Rabin Rabin -Karp

tính một giá trị mới Đơn giản, ta chỉ phải hiệu chỉnh giá trị sẵn có khi dịch chuyển sang phải 1ký tự

Trang 20

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 20

Toán học với Rabin Rabin -Karp

Trang 21

Toán học với Rabin Rabin -Karp

̈ Nếu M lớn, giá trị kết quả sẽ rất lớn (~bM) Để

giải quyết vấn đề này, ta sẽ dùng hàm MOD (%

số nguyên tố p

của nó:

Trang 22

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 22

Toán học với Rabin Rabin -Karp

h(i)=((t[i]×bM-1mod p)+(t[i+1]×bM-2mod p)

+ +(t[i+M-1]mod p))mod p h(i+1)=(h(i)×b mod p //Shift left 1 digit

- t[i]×bM mod p //Trừ chữ số trái nhất

+ t[i+M] mod p) //Cộng chữ số phải nhất

mod p

Trang 23

Toán học với Rabin Rabin -Karp

̊ Nếu p là số nguyên tố đủ lớn, giá trị băm nói chung sẽ khác nhau với các chuỗi khác nhau

phí O(N), trong đó N là số ký tự có trong text

̊ Ta luôn có thể tìm được ví dụ trong đó, trong trường hợp xấu nhất, chi phí sẽ là O(MN) Tuy

Trang 24

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 24

Thuật toán Knuth-Morris-Pratt

thuật toán brute-force ở chỗ nó lưu lại thông tinvề những lần so sánh trước để dùng cho lần sosánh kế tiếp

bao nhiêu thông tin ở bước trước có thể được dùng lại

̈ Đặc biệt, f có thể định nghĩa như prefix dài nhất

của mẫu P[0, ,j] đồng thời là suffix của P[1, ,j]

(chú ý, không phải của P[0, ,j])

Trang 25

Thuật toán Knuth-Morris-Pratt

̈ Ví dụ:

̈ Hàm này cho biết bao nhiêu ký tự ở đầu của mẫu

Trang 26

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 26

Algorithm KMPMatch(T,P) Input:String T (text) với n ký tự và mẫu P với m ký tự.

Output:Chỉ số đầu của chuỗi con đầu tiên trong T khớp với P, hoặc cho biết

else if j > 0 then //không khớp, nhưng còn dữ liệu

else

return “Khong co P trong T”

Algorithm KMPMatch(T,P) Input:String T (text) với n ký tự và mẫu P với m ký tự.

Output:Chỉ số đầu của chuỗi con đầu tiên trong T khớp với P, hoặc cho biết

P không phải là chuỗi con của T.

f ← KMPFailureFunction(P); //xây dựng failure function

while i < n do

if P[j] = T[i] then

if j = m - 1 then return i - m - 1 //tìm được một chuỗi con khớp

else if j > 0 then //không khớp, nhưng còn dữ liệu

j ← f(j-1) //j chỉ đến ngay sau matching prefix trong P else

return “Khong co P trong T”

Trang 27

Thuật toán KPM failure function

Trang 28

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 28

Thuật toán Knuth-Morris-Pratt

Trang 29

Thuật toán Knuth-Morris-Pratt

̈ Phân tích độ phức tạp của thuật toán

Trang 30

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 30

Thuật toán Knuth-Morris-Pratt

̈ Như vậy, mỗi lần lặp, i hoặc k, tăng lên ít nhất 1

nên số lần lặp tối đa là 2n

̈ Dĩ nhiên ta đang giả thiết f đã được tính trước

nên chi phí tính f hoàn toàn tương tự = O(m)

̈ Tổng chi phí: O(n + m)

Trang 31

Regular Expressions

̈ Ký hiệu cho phép ta mô tả các chuõi ký tự, có

thể dài vô hạn

̊ ε ký hiệu chuỗi rỗng

̊ ab + c ký hiệu tập hợp {ab, c}

̊ a* ký hiệu tập hợp {ε, a, aa, aaa, }

Trang 32

Dương Anh Đức – Nhập môn Cấu trúc Dữ liệu và Giải thuật 32

Ngày đăng: 18/09/2013, 21:53

TỪ KHÓA LIÊN QUAN