Trình bày về giải thuật Boyer Moore trong Cấu trúc dữ liệu giải thuật, Phân tích đánh giá thuật toán và một số lĩnh vực tương tự. Xử lý bài toán tìm chuỗi con chung lớn nhất. Trình bày về giải thuật Boyer Moore trong Cấu trúc dữ liệu giải thuật, Phân tích đánh giá thuật toán và một số lĩnh vực tương tự. Xử lý bài toán tìm chuỗi con chung lớn nhất.
Trang 1String matching
Boyer Moore Algorithm
Trang 2Exact matching: slightly
less naive algorithm
P: word
T: There wo u ld have been a time for such a word
w, o trùng lặp, sau đấy không trùng (r ≠ u)
Khi u không tìm được trong P thì ta có thể bỏ qua 2 lần dịch chuyển
T: There wo u ld have been a time for such a word
wo r d
wo r d
word word
skip!
skip!
Trang 3Sử dụng kiến thức có được từ so sánh các ký tự để
bỏ qua việc sắp xếp về sau mà chắc chắn sẽ không
phù hợp dựa trên các luật:
1 “Bad character rule”: Nếu không trùng lặp, sử
dụng kiến thức về ký tự văn bản không phù hợp
để bỏ qua các sắp xếp
2 “Good suffix rule”: Nếu một số ký tự trùng lặp, sử
dụng kiến thức về các ký tự được khớp để bỏ qua các sắp xếp
3 For longer skips: Thử căn chỉnh theo một hướng,
sau đó thử so sánh các ký tự theo hướng đối diện
Trang 4Boyer-Moore: Bad
character rule
Khi không phù hợp, đặt b là các ký tự không khớp
trong T Bỏ qua các sắp xếp cho đến khi (a) b khớp ngược với nó trong P, hoặc (b) P di chuyển qua b
Trang 5Boyer-Moore: Bad
character rule
Trang 6Boyer-Moore: Bad
character rule
preprocessing
• Khi đã biết P, ta xây dựng một |Σ|x n bảng Đặt b là Σ|Σ|x n bảng Đặt b là x n bảng Đặt b là
ký tự trong T không khớp nhau và i là sai lệch của việc không khớp trong P Số lần bỏ qua được cho bởi phần tử trong hàng thứ b và cột thứ i
Trang 7Cho t là chuỗi con của T kết hợp với một hậu tố của P Trường hợp (a): bỏ qua các dịch chuyển cho đến khi t khớp với các ký
tự đối diện trong P, hoặc trường hợp (b) tiền tố của P khớp với một hậu tố của t, hoặc trường hợp (c) P di chuyển qua t, tùy điều nào xảy ra trước tiên
Boyer-Moore: Good suffix
rule
7
Trang 8Boyer-Moore: Good suffix
rule
• Giống như Bad suffix rule, số lần bỏ qua có thể sử dụng Good suffix rule có thể được tính toán trước vào một vài bảng
• Quy tắc ở trang trước đó là yếu tố hậu tố tốt; cũng có một nguyên tắc hậu tố mạnh mẽ tốt
• Với Good suffix rule (và những sửa đổi nhỏ khác), Boyer-Moore cho độ phức tạp là O (m) trong trường hợp xấu nhất
Trang 9Boyer-Moore: Kết hợp lại
• Sau mỗi lần dịch chuyển, sử dụng Bad character rule hay good
suffix rule tuỳ trường hợp nào bỏ qua được nhiều ký tự hơn
Bad character rule: Khi không
khớp, đặt b là các ký tự không khớp
trong T Bỏ qua các sắp xếp cho đến
khi b khớp ngược với nó trong P (a),
hoặc P dịch chuyển qua b (b)
Good suffix rule: Cho t là chuỗi con của T kết
hợp với một hậu tố của P Bỏ qua các liên kết cho đến khi (a) t phù hợp với các ký tự đối diện trong P, hoặc (b) tiền tố của P khớp với một hậu
tố của t, hoặc (c) P di chuyển qua t, tùy điều kiện nào xảy ra trước.
Trang 10Boyer-Moore: Kết hợp lại
• Ở đây, T có 29 ký tự, ta đã dịch chuyển qua 15 ký tự, 11 ký tự
Trang 11Boyer-Moore: Trường hợp xấu nhất và tốt nhất
• Xấu nhất: O(m)
• Tốt nhất: Khi mọi so sánh đều không khớp và mọi trường
hợp đều là trong trường hợp Bad character Rule và đều bỏ
qua toàn bộ P (giống step 1 ở slide trước)
• Khi đó, thời gian là floor(m/n)
Trang 12So sánh Boyer-Moore