String matching
Boyer Moore Algorithm
Exact matching: slightly less naive algorithm
P: word
T: There would have been a time for such a word
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 would have been a time for such a word
word
word
skip!
word
word
skip!
2
Boyer-Moore
Sử 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
3
Boyer-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
4
Boyer-Moore: Bad character rule
5
Boyer-Moore: Bad character rule preprocessing
• Khi đã biết P, ta xây dựng một |Σ|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
6
Boyer-Moore: 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. 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
7
Case (c)
Boyer-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.
8
Boyer-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
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
khớp trong T. Bỏ qua các sắp xếp cho đến khi b khớp ngược
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ố
với nó trong P (a), hoặc P dịch chuyển qua b (b)
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.
9
Boyer-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ự không cần duyệt
10
Boyer-Moore: Trường hợp xấu nhất và tốt nhất
•
•
Xấu nhất: O(m)
•
Khi đó, thời gian là floor(m/n)
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)
11
So sánh Boyer-Moore
12