1. Trang chủ
  2. » Tất cả

6 các thuật toán tìm kiếm chuỗi chuong 3 brute force + kmp

29 3 0
Tài liệu được quét OCR, nội dung có thể không chính xác
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 đề Các thuật toán tìm kiếm chuỗi (String Searching Algorithms)
Tác giả Nguyễn Tri Tuần
Trường học Đại học Khoa học Tự nhiên TP.HCM
Chuyên ngành Data Structures & Algorithms
Thể loại Giáo trình
Năm xuất bản 2008
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 29
Dung lượng 627,62 KB

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

Nội dung

Untitled Data Structures & Algorithms Các thuật toán tìm kiếm chuỗi (String Searching Algorithms) Nguyễn Tri Tuấn Khoa CNTT – ĐH KHTN Tp HCM Email nttuan@fit hcmus edu vn Autumn 2008 Data Structures &[.]

Trang 1

Data Structures & Algorithms

Các thu ậ t toán tìm ki ế m chu ỗ i

(String Searching Algorithms)

Nguy ễ n Tri Tu ấ n Khoa CNTT – Đ H.KHTN.Tp.HCM Email: nttuan@fit.hcmus.edu.vn

Trang 3

 Ý t ưở ng:

Đố i v ớ i v ị trí th ứ i c ủ a v ă n b ả n T (i=0…n-m), ta so sánh

các ký t ự c ủ a P t ươ ng ứ ng t ừ trái sang ph ả i:

P[0] v ớ i T[i], P[1] v ớ i T[i+1],…, P[m-1] v ớ i T[i+m-1]

P[j] vớ i T[i+j] (j = 0 m-1)

 Ví d ụ :

T = “ TWO RED ROADS CROSSING ”

n = length(T) = 22

Trang 6

return -1 ; // không tìm thy

}

Trang 7

Brute-Force (tt)

Đ ánh giá:

Tr ườ ng h ợ p x ấ u nh ấ t O(m*n) – t chng minh

Trang 8

Brute-Force (tt)

Đ ánh giá:

Tr ườ ng h ợ p t ố t nh ấ t O(n) – t chng minh

Tr ườ ng h ợ p trung bình O(n+m) – t chng minh

Trang 10

Đặt vấn đề

 Trong thu ậ t toán Brute-Force: khi x ả y ra không so kh ớ p

t ạ i m ộ t ký t ự , ta đ ã xóa b ỏ t ấ t c ả thông tin có đượ c b ở i

Trang 11

 H ướ ng gi ả i quy ế t c ủ a Morris-Pratt:

L ợ i d ụ ng thông tin đ ã bi ế t v ề các ký t ự đ ã so sánh

Bi ế n j th ể hi ệ n s ố ký t ự đ ã đượ c so kh ớ p gi ữ a m ẫ u (P) và v ă n b ả n (T) Khi g ặ p v ị trí không so kh ớ p, thay

vì gán j = 0 để quay l ạ i t ừ đầ u chu ỗ i P, ta s ẽ gán cho

j m ộ t giá tr ị thích h ợ p

Trang 13

Morris-Pratt (tt)

 Giai đ o ạ n ti ề n x ử lý – tính giá tr ị b ả ng NEXT

Xây d ự ng m ả ng NEXT[0 m-1] (có m ph ầ n t ử ) NEXT[j] ch ứ a giá tr ị dùng để d ị ch chuy ể n con tr ỏ j khi

x ả y ra s ự không kh ớ p t ạ i v ị trí j

Trang 17

Ví d ụ : P = AAATA

NEXT[1] = 0 (j=1)

NEXT[2] = 1

A

Trang 19

Morris-Pratt (tt)

// Hàm tính giá tr bng NEXT (Morris-Pratt)

void initNEXT_MP(char *p, int NEXT[]) {

}

Trang 21

Morris-Pratt (tt)

 Ví d ụ :

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

Trang 22

Morris-Pratt (tt)

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

P = GCAGAGAG 0 1 2 3 4 5 6 7

NEXT -1 0 0 0 1 0 1 0

Trang 24

 C ả i ti ế n c ủ a KMP so v ớ i Morris-Pratt

Khi xây d ự ng b ả ng NEXT, Knuth b ổ sung ki ể m tra

đ i ề u ki ệ n c ≠ a để tránh tr ườ ng h ợ p “mis-match” ngay

v ị trí đầ u tiên sau khi d ị ch chuy ể n j

Giải thích: nếu a == c, tức là c ≠ b (vì a ≠ b)  sẽ

“mis-match” ngay lần so sánh đầu tiên sau khi dịch chuyển j

Trang 25

Knuth-Morris-Pratt (tt)

 Tóm l ạ i: thu ậ t toán KMP

Giai đ o ạ n ti ề n x ử lý có m ộ t c ả i ti ế n nh ỏ : Tính độ d ị ch chuy ể n t ố t h ơ n  tránh so sánh cùng m ộ t ký t ự

trong T hai l ầ n

Giai đ o ạ n tìm ki ế m: hoàn toàn gi ố ng thu ậ t toán Morris-Pratt

Trang 26

} }

Trang 28

Thank you for your attention

Trang 29

Q & A

Ngày đăng: 25/03/2023, 13:09

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w