Khi chiều dài của mẫu là ngắn, thời gian tìm kiếm dài. Độ dài của các mẫu ngày càng tăng, thời gian tìm kiếm rút ngắn rõ ràng. Điều đó cho thấy rằng thời gian tìm kiếm các ký tự đôi ít hơn một chút so với ký tự đơn. Đó là bởi vì hai loại mẫu này đều có cùng khoảng cách dịch chuyển là "1". Khi khoảng cách thay đổi, thời gian kết hợp của ký tựđôi dài hơn so với ký tựđơn.
Khi độ dài của mẫu là dài, thời gian tìm kiếm ngắn. Khi một mẫu ngắn
Khi tỷ lệ của mẫu ngắn tăng, thời gian tìm kiếm sẽ giảm dần. Rõ ràng là mẫu ngắn có ảnh hưởng lớn đến hiệu suất của WM. Điều đó là do những lý do sau:
(1) Công nghệ dịch chuyển ký tự xấu là vô nghĩa đối với các mẫu ngắn. Công nghệ dịch chuyển ký tự xấu được sử dụng trong WM đểđảm bảo hiệu suất làm việc. Tuy nhiên, khi cửa sổđối sánh nhỏ, công nghệ dịch chuyển ký tự xấu sẽ mất lợi thế của nó. Kích thước của cửa sổ đối sánh được xác định bởi độ dài của mẫu ngắn nhất. Một khi có tồn tại mẫu ký tự đơn hoặc ký tự đôi, khoảng cách dịch chuyển sẽ luôn là "1", và hiệu suất sẽ giảm rất nhiều.
(2) Cơ chế lọc dựa trên công nghệ băm ít ảnh hưởng lên các mẫu ngắn. Công nghệ băm được sử dụng để lọc các khối ký tự trong văn bản, thông qua các hậu tố và tiền tố hai lớp lọc, tốc độ của sánh mẫu được nâng cao. Tuy nhiên, với các mẫu ngắn, cơ chế bộ lọc mất đi chức năng của mình. Ngoài ra, đối với một số mẫu dài có chứa các mẫu ngắn, đối sánh một phần thường xảy ra. Nó ảnh hưởng đến hiệu suất của WM.
Ta ước tính thời gian chạy của thuật toán này với giảđịnh rằng cả văn bản và các mẫu ngẫu nhiên được phân bố đồng đều. Trong thực tế, văn bản và mẫu không phải là ngẫu nhiên, nhưng đây là một ước tính thô về hiệu suất của thuật toán. Ta thấy rằng thời gian tuyến tính dự kiến ít hơn (nhưng không nhiều) so với kích thước của văn bản.
Giả sử N là kích thước của văn bản, P là số lượng mẫu, m là kích thước của một mẫu, M =mP là tổng kích thước của tất cả các mẫu, và giả định rằng
N≥ M. Gọi c là kích thước của bảng chữ cái. Ta xác định kích thước của khối
được sử dụng để làm địa chỉ của bảng SHIFT là B = logC2M. Bảng SHIFT chứa tất cả các chuỗi có thể có của b, vì vậy cb =c[logc2M] ≤ 2Mc mục trong bảng
SHIFT. Bảng SHIFT được xây dựng trong thời gian O(M) bởi vì mỗi chuỗi con của B được xem xét một lần và phải mất thời gian để kiểm tra nó. Chúng ta phân chia thời gian quét vào hai trường hợp. Trường hợp đầu tiên nếu giá trị
SHIFT≠0, trong trường hợp này dịch chuyển được áp dụng và không có nhiều công việc cần được thực hiện tại vị trí đó trong văn bản. Thứ hai là trường hợp phức tạp hơn khi giá trị SHIFT=0, trong trường hợp này chúng ta cần phải đọc nhiều hơn các mẫu, văn bản và tham khảo ý kiến của bảng HASH.
Bổ đề 1: Xác suất mà một chuỗi ngẫu nhiên của B dẫn đến một sự dịch chuyển giá trị của i, 0≤ i≤m- B +1, là ≤1/2m.
Chứng minh: Với hầu hết các chuỗi P = M / m dẫn đến một giá trị SHIFT của i dịch chuyển trong khoảng 0≤ i≤m-B+1. Nhưng số lượng của tất cả các
chuỗi có thể có của B ít nhất là 2M. Vì vậy, xác suất của một chuỗi ngẫu nhiên
để dẫn đến một giá trị SHIFT của i là 1/2m. Điều này là đúng khi giá trị
SHIFT=0.
Bổ đề 1 có nghĩa là giá trị kỳ vọng của một sự dịch chuyển là M/2. Để
tính toán hàm băm ta mất O(B), như vậy tổng thời gian làm việc trong các trường hợp khác không có sự dịch chuyển là O(BN/m). Lọc thêm bởi các tiền tố
làm cho xác suất của sai số là vô cùng nhỏ. Chính xác hơn, chúng ta hãy giả sử
rằng B’= B. Xác suất một mẫu nào đó có tiền tố và hậu tố như mẫu khác là <1/M, xác suất đó là không đáng kể. Vì vậy, khối lượng công việc đối với trường hợp giá trị SHIFT là 0 cũng là O(B), trừ khi thực sự có một đối sánh (trong trường hợp ta cần phải kiểm tra toàn bộ mẫu với khoảng thời gian O(M)). Kể từ khi giá trị SHIFT 0 xảy ra < 1/2m của thời gian (bổ đề 1), tổng thời gian dự kiến cho bước này là O(BN/m).
Thuật toán này nhanh hơn so với các thuật toán trước đó và có thể hỗ trợ
một số lượng rất lớn - hàng chục ngàn các mẫu. Ngoài ứng dụng là tìm kiếm mẫu, kết hợp nhiều mẫu thay cho dữ liệu lập chỉ mục hoặc sắp xếp trong một số ứng dụng liên quan đến bộ dữ liệu kích thước trung bình và nhỏ.
Trong một dự án khác, để tìm tất cả các file tương tự trong một hệ thống tập tin lớn [Ma94], chúng ta cần một cấu trúc dữ liệu để xử lý các loại tìm kiếm. Các cấu trúc dữ liệu cần thiết được lưu trữ trên đĩa, và hoạt động trên đã được kích hoạt bởi người sử dụng. Tìm kiếm từ khoá duy nhất là một trong những vấn
đề cấu trúc dữ liệu cơ bản nhất và có nhiều tùy chọn để xử lý nó, kỹ thuật phổ
biến nhất là sử dụng băm hoặc cấu trúc cây. Nhưng khi chúng ta phải tìm kiếm nhiều từ khóa cùng một lúc, ngay cả với các băm hiệu quả, hầu hết các trang sẽ được lấy vào. Và nếu dữ liệu được lấy từ đĩa theo bất kỳ một cách nào, kết hợp nhiều mẫu sẽ cung cấp một giải pháp đơn giản mà hiệu quả. Ta không cần sắp xếp hoặc cung cấp bất kỳ cấu trúc khác, chỉ cần đặt một bản ghi cùng với nhận dạng của nó trên mỗi dòng. Sau đó, ta sử dụng agrep với khả năng đa mẫu. Những lợi ích của phương pháp này là:
1) không cần bất kỳ không gian bổ sung cho các cấu trúc dữ liệu. 2) không cần tiền xử lý hoặc tổ chức cấu trúc dữ liệu (ví dụ, phân loại) 3) tìm kiếm linh hoạt hơn, ví dụ: các từ khóa có thể được tìm thấy trong bất kỳ chuỗi nào.
Tất nhiên, nếu tổng số trang vượt xa số lượng của các từ khóa cần phải
kích thước trung bình và nhỏ, đây là một giải pháp tốt. Ta tin rằng nó có thể được sử dụng trong một loạt các tình huống tương tự. Một ví dụ khác là vấn đề
giao nhau. Phương pháp phổ biến cho việc tìm kiếm tất cả các bản ghi chung của hai tập tin là sắp xếp hai tập tin và hợp nhất. Với phương pháp này, không cần phải sắp xếp, và tiền xử lý chỉ thực hiện trên các tập tin nhỏ.
Ứng dụng khác là “so sánh và thay thế”, được gọi là mar. Mỗi mẫu kết hợp với một mẫu thay thế. Khi một mẫu phát hiện ra, nó được thay thế ở đầu ra bằng “thay thế” của nó. Một chi tiết tinh tế trong thuật toán là chúng ta phải thay
đổi chiều dài của các mẫu cho phù hợp sau khi nó được phát hiện để tránh thay thế chồng chéo.
2.2. Một thuật toán WM với bảng băm cô đọng
Mục này giới thiệu một phiên bản cải tiến thuật toán WM do Liuling Dai và Yuning Xia đề xuất vào năm 2008 [DX08] giải quyết bài toán sánh mẫu trong trường hợp mẫu ngắn.
2.2.1. Phác thảo của thuật toán
Tương tự như các thuật toán WM, thuật toán cơ sở duy trì ba bảng, tức là, bảng HASH, SHIFT và PREFIX. Bảng HASH dùng để xác định xem có những
đối sánh nào có thể xảy ra và so khớp ký tự với ký tự nếu cần thiết. Sử dụng bảng SHIFT để xác định khoảng cách dịch chuyển thích hợp cho các cửa sổ
kiểm tra. Cuối cùng, các bảng PREFIX được sử dụng để loại trừ các chuỗi mẫu có cùng giá trị băm nhưng có tiền tố khác nhau.
Trong mỗi lần kiểm tra, thuật toán sử dụng các ký tự cuối cùng trong cửa sổ kiểm tra để tìm kiếm các bảng HASH và kiểm tra các khả năng so sánh có thể. Thuật toán cũng sử dụng các ký tự mà chỉ cần vượt qua cửa sổ kiểm tra, nhìn lên bảng SHIFT là xác định được khoảng cách dịch chuyển.
Thuật toán bao gồm giai đoạn tiền xử lý và giai đoạn so sánh (tìm mẫu). Giai đoạn tiền xử lý phân tích các chuỗi mẫu cho trước và tạo ra ba bảng. Giai
đoạn sánh mẫu chọn ra các chuỗi mẫu từ một văn bản T dựa trên các bảng. Giả sử rằng có n thành phần trong X và chiều dài của chuỗi mẫu ngắn nhất là m. Trong giai đoạn tiền xử lý, chúng ta chỉ xem xét các ký tự m đầu tiên của mỗi chuỗi mẫu. Do đó, kích thước của cửa sổ kiểm tra trong giai đoạn đối sánh cũng được thiết lập là m.
Để tiết kiệm bộ nhớ, ta thiết lập kích thước của hai bảng băm đến 256, tức là kích thước của bảng chữ cái ASCII. Đối với bất kỳ ký tự c thuộc Σ, 0≤c≤ 255,
bảng HASH được định nghĩa là: HASH[c]= danh null, (2)
Bảng SHIFT được định nghĩa như sau:
SHIFT[c]= + = ∈ = − khi m c i s X s i i i m , 1 } ] [ , | max{ , (3)
Kích thước của bảng PREFIX bằng số chuỗi mẫu. Để tạo ra PREFIX, thuật toán lặp lại tất cả các chuỗi mẫu X và đặt mục tương ứng của PREFIX là:
PREFIX[i] = X[i][0] (4) Trong giai đoạn tìm mẫu, thuật toán kiểm tra các khả năng so sánh và di chuyển các cửa sổ kiểm tra dựa trên ba bảng được tạo ra trong giai đoạn tiền xử
lý. Để thuận tiện cho mô tả, chúng ta biểu thị cửa sổ kiểm tra trong một thử
nghiệm nhất định là W. Khi HASH [W[m - 1] không phải là null, tức là có một
đối sánh. Trong trường hợp này, thuật toán liệt kê danh sách các khả năng so xâu mẫu từ bảng HASH. Đối với mỗi chuỗi trong danh sách này, trước tiên thuật toán kiểm tra lại ký tự đầu tiên từ bảng PREFIX. Nếu kiểm tra thành công, nó kiểm tra lại từng ký tự trong văn bản.
Sau mỗi lần kiểm tra, cho dù có thành công hay không, thuật toán vẫn di chuyển cửa sổ kiểm tra bằng cách SHIFT[W[m]] ký tự. Điều đó có nghĩa là khoảng cách dịch chuyển được quyết định bởi ký tự ngay khi nó vượt qua khoảng cuối cùng của cửa sổ kiểm tra W.
2.2.2. Cải tiến của thuật toán
Trong hầu hết các ứng dụng, các ký tự trong bảng chữ cái Σ không phân phối đồng đều. Ví dụ, khi phân tích văn bản, ta thấy tần số của ký tự in lớn hơn nhiều so với ký tự chưa in ra. Và trong số ký tự in, chữ và số xuất hiện thường xuyên hơn các dấu chấm câu. Hơn nữa, chữ cái "e" xuất hiện thường xuyên hơn "z" trong văn bản tiếng Anh.
nếu không có chuỗi mẫu s mà s[m-1]=c sách mẫu mà ký tự thứ m-1 là c
Kỹ thuật băm nguyên thủy được sử dụng trong các thuật toán cơ bản.
Điều này sẽ gây ra va chạm nghiêm trọng trong một số mục trong HASH và SHIFT. Những va chạm lần lượt được kiểm tra nhiều hơn, khoảng cách dịch chuyển ít hơn và hiệu quả như vậy thấp. Để thực hiện các thuật toán hiệu quả
hơn, người ta đề xuất kỹ thuật khối ký tự vào các thuật toán cơ sở.
Trong mỗi lần kiểm tra, thuật toán cải tiến sử dụng giá trị băm của khối ký tự, nhìn lên bảng HASH để kiểm tra các khả năng đối sánh có thể. Khối ký tự
này bao gồm hai ký tự cuối cùng của cửa sổ kiểm tra. Nó sử dụng một giá trị
băm của khối ký tự bao gồm các ký tự cuối cùng của cửa sổ kiểm tra và ngay lập tức (khối ký tự này được gọi là khối tiếp theo) tìm kiếm SHIFT để có được khoảng cách dịch chuyển.
Kích thước của bảng HASH được thiết lập là một hằng số, ví dụ như
MAXHASH. Trong giai đoạn tiền xử lý, thuật toán sử dụng khối ký tự đuôi bao gồm hai ký tự bc = (s[m -2]s[m -1]) của mỗi chuỗi mẫu từ X để khởi tạo bảng HASH. Bảng HASH được định nghĩa là:
HASH[c]= danh null,
Hàm Hash sắp xếp đều khối ký tựđuôi của chuỗi mẫu X vào bảng HASH. Ta định nghĩa nó như sau:
hash (bc) = (bc [0] << 5 + bc [ 1 ]) % MAXHASH
Tương tự như vậy, khoảng cách dịch chuyển sau mỗi lần kiểm tra được quyết định dựa trên kỹ thuật băm và các khối ký tự. Sau mỗi lần kiểm tra, khoảng cách dịch chuyển an toàn được quyết định bởi các quy tắc như sau :
Trường hợp 1: sbc là chuỗi con của một số chuỗi mẫu. Giả sử rằng vị trí tối đa của sbc trong những chuỗi mẫu là Q (0 ≤ q ≤ m - 2), thì khoảng cách dịch chuyển an toàn tối đa là m - q - 1 ký tự .
Trường hợp 2: sbc không xuất hiện trong bất kỳ thành phần nào của X. Tuy nhiên, ký tự thứ hai của sbc phù hợp với ký tự đầu tiên của một số chuỗi mẫu. Khoảng cách dịch chuyển an toàn tối đa là m.
Trường hợp 3: nếu không thuộc trường hợp 1 hoặc trường hợp 2 thì khoảng cách dịch chuyển an toàn tối đa là m + 1. Cho một giá trị băm h, ta xác
định các chuỗi mẫu ps và ps1 như sau:
nếu không có chuỗi mẫu s mà hash[bc]=h sách mẫu mà hash[bc]=hash
Ps(h)={s|∃ i∈[0,m-1), shift (s[i], s[i+1])=h} Ps1(h)={s|∃ x∈∑, shift (x,s[0]=h}
Bảng SHIFT được định nghĩa như sau:
SHIFT[h] = + = + ∈ = − − , 1 } ] 1 [ ], [ ( ), ( | max{ , 1 m m h i s i s shift h ps s i i i m
Kích thước của bảng SHIFT được thiết lập là hằng số MAXSHIFT. Ta xác định hàm băm shift như sau: shift (c1,c2) = (c1 < < 5 + c2 )% MAXSHIFT
Trong giai đoạn so mẫu, thuật toán sánh mẫu cải tiến dựa trên kỹ thuật băm và khối ký tự. Trong cửa sổ kiểm tra W, chỉ khi HASH[hash(W[m - 2],
W[m - 1])] không phải là null, có thể có một hoặc nhiều khả năng đối sánh xảy ra. Sau mỗi lần kiểm tra, thuật toán di chuyển các cửa sổ kiểm tra bằng cách
SHIFT[shift(W[m-1],W[m])] ký tự. Đó là khoảng cách dịch chuyển được quyết
định bởi khối ký tự sbc.
Theo Liuling Dai, Yuning Xia, thuật toán WM sử dụng bảng băm là một thuật toán nhẹ và hiệu quả, phù hợp với nhiều mẫu. Thuật toán này mở rộng các thuật toán QS với đa mẫu và đơn giản hóa thuật toán WM. Kết quả thử nghiệm cho thấy rằng thuật toán này rất nhanh với các mẫu có kích thước nhỏ (dưới 25).
Đây thuộc loại thuật toán mới có thể phục vụ trong môi trường máy tính nhúng hoặc các ứng dụng với vài mẫu.
2.3. Thuật toán WM đồng thời cao
Thuật toán WM đồng thời cao (High Concurrence WM: HCWM) là phiên bản cải tiến WM do Baojun Zhang và cộng sự đề xuất năm 2009 [ZCP09, ZCP09a]. Trong HCWM, các mẫu ngắn được xử lý tốt. Khi các mẫu dài và các mẫu ngắn kết hợp với nhau mang lại hiệu suất cao.
2.3.1. Cải tiến của thuật toán
Trong HCWM, những cải tiến sau đây được thực hiện.
(1) Chia tất cả các mẫu thành bộ bốn mẫu "PS1-PS4" theo chiều dài của chúng, mẫu có duy nhất 1 ký tự, mẫu có hai ký tự, mẫu ba ký tự, và các mẫu ký tự dài có chiều dài bằng hoặc cao hơn bốn ký tự.
nếu ps(h)= φ, ps1(h) ≠φ
(2) Với "PS1" và "PS2", khoảng cách dịch chuyển luôn là "1", bảng SHIFT không cần thiết. Đối với "PS3" và "PS4", "SHIFT3" và "SHIFT4" được thành lập. Phương pháp này tương tự như WM.
(3) Bốn bảng HASH "HASH1-HASH4" được thành lập cho "PS1-PS4".
Ngoại trừ "HASH4", các bảng HASH khác được thành lập bởi giá trị băm của toàn bộ mẫu. Đối với "HASH4", phương pháp này tương tự như WM, sử dụng