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

Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán tìm kiếm chuỗi - Nguyễn Tri Tuấn

29 69 0

Đ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

Định dạng
Số trang 29
Dung lượng 650,57 KB

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

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán tìm kiếm chuỗi cung cấp cho người học các kiến thức mở đầu về string searching, các bước xử lý, các cách tiếp cận, Brute-Force, Knuth-Morris-Pratt. Mời các bạn cùng tham khảo.

Trang 1

Data Structures & Algorithms

(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)

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

Trang 8

Brute-Force (tt)

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

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)

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 15

Morris-Pratt (tt)

 Ví d ụ :

i=1 A A TAAAATA j=1 AA ATA (không so khớp  i=i+j–NEXT[1]=2

j=NEXT[1]=0)

i=2 AATAAAATA j=0 A AATA (không so khớp  i=i+j–NEXT[0]=3

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

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)

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: 11/01/2020, 17:49

TỪ KHÓA LIÊN QUAN

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