Tải bản đầy đủ (.pdf) (73 trang)

Một họ thuật toán đối sánh mẫu chính xác nhanh SSABS TVSBS FQS và thực nghiệm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (809.51 KB, 73 trang )

i

LỜI CAM ĐOAN
Tôi xin cam đoan:
Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn
trực tiếp của thầy giáo hướng dẫn PGS TS. Hà Quang Thụy.
Mọi tham khảo trong luận văn đều được trích dẫn rõ ràng tác giả, tên công
trình, thời gian, địa điểm công bố.
Tôi xin cam đoan luận văn không phải là sản phẩm sao chép của bất kỳ tài
liệu khoa học nào.

Học viên

Nguyễn Thị Phương Thảo


ii

LỜI CẢM ƠN

Đầu tiên tôi xin gửi lời cảm ơn sâu sắc nhất tới PGS. TS Hà Quang Thụy
người hướng dẫn khoa học, đã tận tình chỉ bảo, giúp đỡ tôi thực hiện luận văn. Tôi
cũng xin lời lời cám ơn trân thành tới PGS. TS. Nguyễn Trí Thành và các anh chị
em Phòng Thí nghiệm Khoa học dữ liệu và Công nghệ Tri thức, Trường Đại học
Công nghệ, Đại học Quốc gia Hà Nội đã giúp đỡ và tạo điều kiện hỗ trợ tôi.
Tôi xin cảm ơn các thầy cô trường Đại học Công nghệ thông tin và Truyền
thông - Đại học Thái Nguyên đã giảng dạy và truyền đạt kiến thức cho tôi.
Tôi xin trân thành cảm ơn Ban giám hiệu trường Cao đẳng nghề Phú Thọ và
các đồng nghiệp trong khoa Công nghệ thông tin đã tạo mọi điều kiện giúp đỡ tôi
hoàn thành nhiệm vụ học tập.
Cuối cùng, tôi xin cảm ơn những người thân và các bạn bè chia sẻ, giúp đỡ


tôi hoàn thành luận văn này.
Mặc dù đã hết sức cố gắng hoàn thành luận văn với tất cả sự nỗ lực của bản
thân, nhưng luận văn vẫn còn những thiếu sót. Kính mong nhận được những ý kiến
đóng góp của quý Thầy, Cô và bạn bè đồng nghiệp.
Tôi xin chân thành cảm ơn!
Việt Trì, ngày 10 tháng 09 năm 2015

Nguyễn Thị Phương Thảo


iii

MỤC LỤC
LỜI CAM ĐOAN............................................................................................................. i
LỜI CẢM ƠN ................................................................................................................. ii
MỤC LỤC ..................................................................................................................... iii
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT .................................................... v
DANH MỤC CÁC BẢNG ............................................................................................. vi
DANH MỤC CÁC HÌNH VẼ ....................................................................................... vii
MỞ ĐẦU ........................................................................................................................ 1
CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ THUẬT TOÁN SÁNH MẪU.......................... 3
1.1. Bài toán sánh mẫu và phân loại ............................................................................ 3
1.1.1. Bài toán sánh mẫu .......................................................................................... 3
1.1.2. Phân loại bài toán sánh mẫu ........................................................................... 3
1.2. Một số ứng dụng của bài toán sánh mẫu ............................................................... 5
1.3. Một số thuật toán sánh mẫu truyền thống ............................................................. 5
1.3.1. Thuật toán Boyer–Moore ............................................................................... 6
1.3.2. Thuật toán Quick Search ................................................................................ 9
1.4. Khái quát về các thuật toán sánh mẫu chính xác ................................................. 10
1.5. Kết luận chương 1 .............................................................................................. 11

CHƯƠNG 2: HỌ THUẬT TOÁN SÁNH MẪU CHÍNH XÁC NHANH SSABS TVSBS – FQS ............................................................................................................... 13
2.1. Giới thiệu về các biến thể của thuật toán Quick Search....................................... 13
2.2. Thuật toán đối sánh mẫu nhanh SSABS ............................................................. 13
2.2.1. Giới thiệu ..................................................................................................... 13
2.2.2. Thuật toán .................................................................................................... 14
2.3. Thuật toán TVSBS ............................................................................................. 19
2.3.1. Giới thiệu ..................................................................................................... 19
2.3.2. Thuật toán .................................................................................................... 19
2.3.3. Ví dụ ............................................................................................................ 21
2.4. Thuật toán Faster Quick Search .......................................................................... 24
2.4.1. Giới thiệu ..................................................................................................... 24
2.4.2. Thuật toán .................................................................................................... 24
2.4.3. Ví dụ ............................................................................................................ 29
2.5. Kết luận chương 2 .............................................................................................. 32


iv
CHƯƠNG 3: CHƯƠNG TRÌNH THỰC NGHIỆM HỌ THUẬT TOÁN
ĐỐI
SÁNH MẪU CHÍNH XÁC NHANH VỚI BỘ CÔNG CỤ SMART ............................. 33
3.1. Giới thiệu ........................................................................................................... 33
3.2. Bộ công cụ Smart ............................................................................................... 33
3.2.1. Các thành phần chính trong bộ công cụ SMART.......................................... 33
3.2.2. Sử dụng bộ công cụ Smart ........................................................................... 43
3.3. Bộ trung gian PUTTY ........................................................................................ 44
3.4. Kết quả thực nghiệm và nhận xét........................................................................ 45
3.4.1. Thực nghiệm đánh giá hiệu năng hai thuật toán SSABS và TVSBS ............. 45
3.4.2. Thực nghiệm về kết quả sánh mẫu của hai thuật toán SSABS và TVSBS..... 49
3.5. Kết luận chương 3 .............................................................................................. 51
KẾT LUẬN VÀ HƯỚNG NGHIÊN CỨU TIẾP THEO ............................................... 53

TÀI LIỆU THAM KHẢO ............................................................................................. 54
PHỤ LỤC


v

DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT

MP70

Morris-Pratt

BM

Boyer-Moore

CLRS01

CLRS01

BDM

CR94

ACR99

Bakward-Oracle

BDM


BNDM

QS

Quick Search

KMP

Knuth-Morris-Pratt

brBc

Berry-Ravindran


vi

DANH MỤC CÁC BẢNG

Bảng 2.1. Các giá trị dịch chuyển cho = 4 được đưa ra bởi hàm brBc ............ 22
Bảng 2.2. Các hàng ES, next và shift cho một mẫu ví dụ................................... 30
Bảng 3.1. Danh sách tất cả các thuật toán sánh xâu từ năm 1970 trên SMART . 34
Bảng 3.2. Bộ các kho ngữ liệu thử nghiệm ........................................................ 38
Bảng 3.3. Bảng kết quả thử nghiệm 1 ................................................................ 46


vii

DANH MỤC CÁC HÌNH VẼ
Hình 3.1. Đăng nhập bằng bộ trung gian PUTTY .............................................. 45

Hình 3.2. Kết quả thực nghiệm 1 ....................................................................... 46
Hình 3.3. Kết quả thực nghiệm 2 tìm mẫu trong chuỗi ...................................... 50
Hình 3.4. Kết quả thực nghiệm 2 tìm mẫu trong file ......................................... 51


1

MỞ ĐẦU
Đối sánh xâu chính xác (exac string matching, sau đây gọi tắt là “sánh xâu
chính xác”), còn được gọi là sánh mẫu chính xác (exac pattern matching) là bài toán
tìm ra tất cả sự xuất hiện của một xâu p cho trước trong một văn bản t, trong đó p, t
đều là các xâu văn bản theo một bảng chữ cái; p được gọi là “mẫu” (pattern) còn t
là được gọi là “văn bản đích” (target text) [3, 8]. Một ví dụ gần gũi là cho một truy
vấn p và một trang web t, kiểm tra xem p có xuất hiện trong nội dung của t hay
không.
Theo Simone Faro và Thierry Lecroq [8], trong 40 năm gần đây, đối sánh
xâu là một trong những bài toán được nghiên cứu rộng rãi nhất trong khoa học máy
tính, chủ yếu vì các ứng dụng trực tiếp của nó cho rất nhiều lĩnh vực khác nhau như
xử lý văn bản - hình ảnh - tín hiệu (text, image and signal processing), phân tích và
nhận dạng giọng nói (speech analysis and recognition), truy hồi thông tin
(information retrieval), nén dữ liệu (data compression), sinh học và hóa học tính
toán (computational biology and chemistry). Bài toán sánh xâu chính xác trực tuyến
(onlineexac string matching) nhận được sự quan tâm rất lớn của cộng đồng nghiên
cứu. Trong thập kỷ 2001-2010, hơn 50 thuật toán mới được đưa ra, mở rộng thêm
số lượng khoảng 40 thuật toán đã có từ trước năm 2000 [2]. Hệ thống các thuật toán
này đã được phân tích, đánh giá công phu [5, 6, 7].
Theo Simone Faro và Thierry Lecroq, nhóm các thuật toán sánh mẫu nhanh
có nguồn gốc từ thuật toán QS [9] đã chứng tỏ được lợi thế, đặc biệt khi mẫu đối
sánh có độ dài ngắn. Chính vì lý do đó, luận văn này định hướng nghiên cứu một số
thuật toán sánh mẫu chính xác nhanh có nguồn gốc từ thuật toán QS, tập trung vào

họ thuật toán SSABS [8] – TVSBS [4] - FQS [3] do các thuật toán này đã tỏ ra ưu
việt trong bài toán sánh mẫu ngắn. Họ thuật toán này là ở nhánh thuật toán khác với
các thuật toán trong [1], hơn nữa, thuật toán FQS là mới được công bố vào năm
2014.
Nội dung chủ yếu của luận văn là nghiên cứu, phân tích chi tiết các thuật
toán sánh mẫu SSABS – TVSBS - FQS, khai thác công cụ [11] để tiến hành thực
nghiệm. Nội dung chính của luận văn gồm phần mở đầu, bốn chương nội dung,
phần kết luận. Nội dung của bốn chương nội dung được giới thiệu sơ bộ như sau:
Chương 1. Giới thiệu chung về thuật toán sánh mẫu trình bày các khái niệm và
đặc trưng của bài toán sánh mẫu, các ứng dụng của sánh mẫu, khái quát về các thuật
toán sánh mẫu chính xác nhanh.


2
Chương 2. Họ thuật toán sánh mẫu chính xác nhanh SSABS -TVSBS- FQS giới
thiệu về một lớp thuật toán sánh mẫu chính xác nhanh, trình bày và phân tích họ
thuật toán SSABS-TVSBS- FQS. Đồng thời, các bước tiến hóa và hiệu suất của ba
thuật toán này cũng được giới thiệu.
Chương 3. Chương trình thực nghiệm họ thuật toán đối sánh mẫu chính xác nhanh
với bộ công cụ Smart.
Phần kết luận tổng kết các kết quả chính cũng như các hạn chế của luận văn, đồng
thời, ý tưởng về các nghiên cứu tiếp theo cũng được giới thiệu.


3

CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ THUẬT TOÁN SÁNH MẪU
1.1. Bài toán sánh mẫu và phân loại
1.1.1. Bài toán sánh mẫu
Theo Simone Faro và Thierry Lecroq [6, 7, 8], bài toán sánh mẫu được phát

biểu như sau “Cho một bảng chữ cái S cỡ s, một văn bản T với độ dài n và một mẫu
p với độ dài m, bài toán sánh mẫu là việc tìm ra tất cả các lần xuất hiện của mẫu p
trong văn bản T đã cho’’.
Như đã được giới thiệu, do được ứng dụng trực tiếp trong rất nhiều lĩnh vực
như xử lý văn bản, hình ảnh và tín hiệu, phân tích giọng nói và nhận dạng, truy hồi
thông tin, nén dữ liệu, sinh học tính toán và hóa học tính toán cho nên bài toán sánh
mẫu được nghiên cứu rộng rãi trong khoa học máy tính. Từ năm 1970 tới nay đã có
hơn 80 thuật toán sánh mẫu đã được đề xuất và hơn 50% các thuật toán này đã được
đưa ra trong 10 năm qua [6, 7, 8].
Thời gian gần đây, bài toán sánh mẫu càng trở nên quan trọng và được quan
tâm nhiều do sự tăng trưởng nhanh chóng của các hệ thống truy hồi thông tin
(information retrieval) và các hệ thống tin - sinh học (bioinformatics). Một lý do
nữa, con người ngày nay không chỉ đối mặt với một lượng tài nguyên thông tin
khổng lồ mà còn đòi hỏi những yêu cầu tìm kiếm ngày càng phức tạp. Các mẫu đưa
vào không chỉ đơn thuần là một xâu ký tự mà còn có thể chứa các ký tự thay thế,
các khoảng trống và các biểu thức chính quy. Sự “tìm thấy” không đơn giản là chỉ
ra sự xuất hiện chính xác mẫu trong văn bản mà còn cho phép “một xấp xỉ” giữa
mẫu và sự xuất hiện của nó trong văn bản. Từ đó, bên cạnh vấn đề kinh điển là “tìm
kiếm chính xác”, nảy sinh một hướng nghiên cứu là "sánh mẫu xấp xỉ/tìm kiếm xấp
xỉ” (approximate pattern match/search) v.v.
1.1.2. Phân loại bài toán sánh mẫu
1.1.2.1. Sánh mẫu chính xác và sánh mẫu xấp xỉ
Phát biểu về bài toán sánh mẫu được trình bày trong mục trên đây [5] thực
chất là phát biểu cho bài toán sánh mẫu chính xác. Với bài toán sánh mẫu chính xác,
việc tìm ra tất cả các lần xuất hiện của chuỗi mẫu có thể được thi hành bằng một lần
quét duy nhất, diễn ra với nhiều lần thử trên các đoạn khác nhau của văn bản đích T.
Trong mỗi lần thử, chương trình sẽ kiểm tra sự giống nhau giữa mẫu với cửa sổ
hiện thời. Độ phức tạp của thuật toán tìm tất cả các lần xuất hiện của P trong T là O
(mn).



4
Trong bài toán tìm kiếm văn bản trên tập văn bản T, bài toán sánh mẫu được
thực hiện đối với mọi cặp gồm mẫu (truy vấn) q và mọi văn bản tT. Trong trường
hợp độ dài n của t rất lớn và số lượng văn bản trong T rất nhiều (|T|>>1) thì thời
gian tìm kiếm văn bản phù hợp với câu hỏi q sẽ là rất tốn kém. Chính vì lý do đó,
nghiên cứu đề x`uất các thuật toán sánh mẫu mới, cải tiến các thuật toán sánh mẫu
sẵn có để nâng cao tốc độ sánh mẫu luôn là một chủ đề nghiên cứu được cộng đồng
hết sức quan tâm.
Thực tiễn cũng tồn tại nhiều tình huống tìm kiếm xấp xỉ trong đó cho phép
có sự "sai khác không đáng kể" giữa mẫu P và xâu con S' của xâu S. Cũng chính vì
lý do đó, bài toán sánh mẫu xấp xỉ (Approximate Pattern Matching) được đặt ra,
trong đó, hãy tìm ra một (hay tất cả) các xâu con S' của xâu S mà S' "sai khác không
đáng kể" với mẫu P [11]. Tồn tại một số tiêu chí cho độ đo "sai khác không đáng
kể", chẳng hạn như số lượng ký tự cùng vị trí trong hai xâu S' và P là khác nhau
chiếm tỷ lệ rất nhỏ so với độ dài m của xâu P.
Thông thường, các thuật toán sánh mẫu làm việc với mẫu có độ dài ngắn
(m30), tuy nhiên trong thực tiễn, bài toán sánh mẫu có độ dài mẫu lên tới con số
hàng chục ngàn. Người ta gọi các bài toán sánh mẫu với mẫu dài như vậy là bài
toán sánh mẫu "nặng" để phân biệt với bài toán sánh mẫu "nhẹ" mà độ dài mẫu
không quá 30. Thực tiễn cũng chỉ ra rằng hầu hết các ứng dụng của sánh mẫu là
sánh mẫu nhẹ.
1.1.2.2. Sánh mẫu trực tuyến và sánh mẫu ngoại tuyến
Sánh mẫu ngoại tuyến (offline pattern matching) là trường hợp bài toán sánh
mẫu khi mà cả mẫu P và văn bản T đã có sẵn. Một trường hợp đặc biệt chính là cả
mẫu P và văn bản T đã có trong bộ nhớ. Trong sánh mẫu ngoại tuyến, việc tiền xử
lý dữ liệu đối với P và T có thể được tiến hành từ trước để tạo điều kiện tạo nên các
cơ chế phù hợp (bao gồm các cấu trúc dữ liệu bổ sung thích hợp) để tăng tốc độ quá
trình sánh mẫu. Thông tin cơ bản như độ dài của P và T được coi như một thông tin
tiên liệu về quá trình sánh mẫu.

Sánh mẫu trực tuyến (online pattern matching) là trường hợp bài toán sánh
mẫu khi mà văn bản T chưa được biết toàn bộ, chẳng hạn như trường hợp tiến hành
sánh một mẫu P đã cho với một văn bản T đang được đọc từ Internet. Tiền xử lý dữ
liệu không cho phép tiền xử lý dữ liệu, khi đó nhiều thông tin liên quan chưa thể
biết, chẳng hạn như độ dài của văn bản T.


5
1.2. Một số ứng dụng của bài toán sánh mẫu
Bài toán sánh mẫu không chỉ được ứng dụng trong miền xử lý văn bản (text
processing) mà còn được ứng dụng trong nhiều miền ứng dụng khác, chẳng hạn
như, xử lý hình ảnh và tín hiệu (image and signal processing), phân tích và tổng
hợp tiếng nói (speech analysis and recognition), nén dữ liệu (data compression),
truy hồi thông tin (informationretrieval), sinh học và hóa học tính toán
(computational biology and chemistry) [5, 6, 7].
Trên thực tế có rất nhiều ứng dụng sánh mẫu như: cơ chế sánh mẫu của hệ
điều hành (chẳng hạn, lệnh grep, fgrep ... tìm kiếm một file theo tên file trong hệ
điều hành UNIX), cơ chế kiểm tra một file có bị nhiễm virus hay không (sánh mẫu
“xâu đặc tả virus” với nội dung file), máy tìm kiếm (search engine) trên Internet tìm
kiếm các trang web có chứa mẫu p là cụm từ khóa tìm kiếm, xác định mẫu gene
bệnh xuất hiện trong đoạn gene của người (các xâu văn bản trong bảng chữ cái gồm
bốn chữ cái A, C, G, T) ...
1.3. Một số thuật toán sánh mẫu truyền thống
Tất cả các thuật toán sánh mẫu truyền thống đều quét văn bản T với sự trợ
giúp của một cửa sổ có độ dài tương đương với độ dài của mẫu, trong đó, cửa sổ là
một chuỗi m ký tự liên tiếp trên văn bản. Trong mỗi lần kiểm tra, chương trình sẽ
xem xét sự giống nhau giữa mẫu với cửa sổ hiện thời, nếu kết quả đúng thì ghi
nhận một lần xuất hiện của mẫu trong xâu. Sau đó, cửa sổ sẽ được dịch sang bên
phải trên văn bản cho lần kiểm tra tiếp theo.
Trong mỗi lần xem xét, quá trình được bắt đầu từ việc so sánh lần lượt từng

phần tử từ trái sang phải của cửa sổ với phần tử tương ứng của mẫu. Nếu xuất hiện
một sự không phù hợp có thể dừng việc xem xét cửa sổ hiện thời với mẫu, nếu
ngược lại thì quá trình được tiếp tục cho tới phần tử cuối cùng trong cửa sổ. Các
thuật toán sánh mẫu là khác nhau ở trật tự so sánh ký tự trên mẫu và khoảng cách
mà cửa sổ được di chuyển trên văn bản sau mỗi lần kiểm tra.
Nhiều thuật toán sánh mẫu đã được đề xuất mà mỗi thuật toán có những ưu,
nhược điểm tùy theo độ dài mẫu, sự thiết lập chu kỳ và bảng chữ cái. Simone Faro
và Thierry Lecroq [6] đã trình bày một phân tích đánh giá 85 thuật toán sánh mẫu
chính xác, đưa ra mười lớp tình huống sánh mẫu chính xác và tương ứng là 10 thuật
toán điển hình cho từng tình huống bài toán sánh mẫu.
Các thuật toán sánh mẫu chính xác được phát triển dựa trên một số thuật
toán sánh mẫu truyền thống mà điển hình là các Boyer–Moore và Quick Search
như giới thiệu dưới đây.


6
1.3.1. Thuật toán Boyer–Moore
Boyer–Moore (BM) là một thuật toán tìm kiếm xâu hiệu quả được Boyer và
Moore đưa ra vào năm 1977 [6, 8]. Thuật toán BM được xếp là loại thuật toán đo
lường đạt chuẩn trong tài liệu về sánh xâu chính xác kể từ khi nó được giới thiệu.
Thuật toán BM xử lý trước mẫu P và sử dụng thông tin thu thập được trong suốt
bước tiền xử lý để bỏ qua các khối văn bản trong khi đối sánh, kết quả đạt được
nhanh hơn rất nhiều thuật toán sánh xâu khác. Nhìn chung, thuật toán BM chạy
nhanh hơn khi chiều dài của mẫu tăng lên.
Đầu tiên, BM xử lý trước mẫu P để xây dựng hàng dịch chuyển xuất hiện
(được viết tắt là bad_shift) với độ dài |Σ|, được xác định bằng việc sử dụng công
thức:
bad_shift() = min (m-1-k: {0 k Sau đó, BM sử dụng quy tắc ký tự xuất hiện. Quy tắc này quy định rằng một
khi xuất hiện lỗi đối sánh, thuật toán nhảy tới vị trí tiếp theo, được xác định bằng

hàng bad_shift mà không cần thực hiện những so sánh theo thuật toán Brute Force.
BM cũng sử dụng quy tắc dịch chuyển khớp, BM bắt đầu so sánh giữa văn
bản T và mẫu P từ phải sang trái. Khi có một lỗi đối sánh xảy ra trong P [i] ≠ T [j +
i] với 0 < i < m và 0 < j < n, dịch chuyển khớp của mẫu P[i+1,…,m-1] đối sánh
văn bản T[i+j+1,…,j+m-1]; dịch chuyển khớp của mẫu P[i+1,…,m-1] được gọi là
phép dịch chuyển khớp tốt. Thuật toán tính toán hàng dịch chuyển tốt có độ dài
m+1 xác định vị trí nhảy kế tiếp bằng việc sử dụng khoảng cách dịch chuyển tối đa
có thể từ cấu trúc của mẫu. Giá trị dịch chuyển tổng thể sau đó được xác định bằng
việc lựa chọn khoảng cách dài hơn giữa cả hai hàng dịch chuyển khớp và dịch
chuyển xuất hiện. Thuật toán cổ điển Quick Search và biến thể cải tiến của các tác
giả đều không sử dụng quy tắc dịch chuyển khớp; Do đó, phương trình hàng dịch
chuyển khớp tương ứng không hiển thị ở đây. Thuật toán gốc BM có thời gian chạy
trong trường hợp xấu nhất là O(mn) và thời gian chạy thực trong trường hợp tốt nhất
là O(n/m). Nhìn chung, nó có hiệu suất rất tốt và có những chỉnh sửa đổi đơn giản
để đạt được thời gian tổng thể trong trường hợp xấu nhất trong giới hạn:
O(n + m + |Σ|).
Trong thuật toán này có hai cách dịch cửa sổ:
Cách thứ 1: Dịch sao cho những phần đã so sánh trong lần trước khớp với những
phần giống nó trong lần sau.


7
Trong lần thử tại vị trí j, khi so sánh đến ký tự i trên mẫu thì phát hiện ra sự
khác nhau giữa ký tự x[i]=a của mẫu và ký tự y[i+j]=b của văn bản, lúc đó
x[i+1..m-1]=y[i+j+1..j+m-1]=u và y[i+j-1]=b và x[i]y[i+j] khi đó thuật toán sẽ
dịch cửa sổ sao cho đoạn u=y[i+j+1..j+m-1] giống với một đoạn mới trên mẫu
(trong các phép dịch ta chọn phép dịch nhỏ nhất)
y
x


b

u

a

u
shift

x

c

u

Dịch sao cho u xuất hiện lại và c ≠ a
Nếu không có một đoạn nguyên vẹn của u xuất hiện lại trong x, ta sẽ chọn
sao cho phần đôi dài nhất của u xuất hiện trở lại ở đầu mẫu.

y
x

b

u

a

u
shift

x

u

Dịch để một phần đôi của u xuất hiện lại trên x
Cách thứ 2: Coi ký tự đầu tiên không khớp trên văn bản là b=y[i+j] ta sẽ dịch sao
cho có một ký tự giống b trên xâu mẫu khớp vào vị trí đó (nếu có nhiều vị trí xuất
hiện b trên xâu mẫu ta chọn vị trí phải nhất).

y
x

b

u

a

u
shift

x

b

không chứa b

Dịch để ký tự b ăn khớp với văn bản.



8
Nếu không có ký tự b nào xuất hiện trên mẫu ta sẽ dịch cửa sổ sao cho ký tự
trái nhất của cửa sổ vào vị trí ngay sau ký tự y[i+j-1]=b để đảm bảo sự ăn khớp.
y

b

u

x

a

u
shift

x

không chứa b

Dịch khi b không xuất hiện trong x
Trong hai cách dịch chuyển, thuật toán sẽ chọn cách dịch có lợi nhất.
Trong cài đặt ta dùng mảng bmGs để lưu cách dịch 1, mảng bmBc để lưu phép dịch
thứ 2 (ký tự không khớp). Việc tính toán mảng bmBc thực sự không có gì nhiều để
bàn.

min{i : 1  i  m  1, x[m  1  i]  c} nếu c xuất hiện trong x
bmBc[c]= 
m
ngược lại

(1.2)
Nhưng việc tính trước mảng bmGs khá phức tạp, ta không tính trực tiếp
mảng này mà tính gián tiếp thông qua mảng suff.
suff[i]=max{k | x[i-k+1..i]=x[m-k..m-1]}
Các mảng bmGs và bmBc có thể được tính toán trước trong thời gian tỉ lệ
với O(m+). Thời gian tìm kiếm (độ phức tạp tính toán) của thuật toán BoyerMoore là O(m*n). Tuy nhiên với những bản chữ cái lớn thuật toán thực hiện rất
nhanh. Trong trường hợp tốt chi phí thuật toán có thể xuống đến O(n/m) là chi phí
thấp nhất của các thuật toán tìm kiếm hiện đại có thể đạt được.
Thuật toán Boyer-Moore có thể đạt tới chi phí O(n/m) là nhờ có cách dịch
thứ 2 “ký tự không khớp”. Cách chuyển cửa sổ khi gặp “ký tự không khớp” cài đặt
vừa đơn giản lại rất hiệu quả trong các bảng chữ cái lớn nên có nhiều thuật toán
khác cũng đã lợi dụng các quét mẫu từ phải sang trái để sử dụng cách dịch này.
Tuy nhiên chi phí thuật toán của Boyer-Moore là O(m*n) vì cách dịch thứ
nhất của thuật toán này không phân tích triệt để các thông tin của những lần thử
trước, những đoạn đã so sánh rồi vẫn có thể bị so sánh lại. Có một vài thuật toán đã


9
cải tiến cách dịch này để đưa đến chi phí tính toán của thuật toán Boyer-Moore là
tuyến tính.
1.3.2. Thuật toán Quick Search
Thuật toán Quick Search (QS) là một sự đơn giản hóa của thuật toán BoyerMoore mà không theo quy tắc dịch chuyển khớp. QS xử lý trước mẫu P sử dụng
một hàng bad_shift đã qua sửa đổi (được gọi là qbad_shift) của độ dài |Σ| trong độ
phức hợp thời gian của Θ(m + |Σ|). Sự sửa đổi hàng bad_shift của QS được xác
định như sau:
qbad_shift(σ) = min (m-k: {0 k m-1 p[m  k  1] = σ, σ}  {m+1})
Các bước tiền xử lý của thuật toán QS được thể hiện trong Thuật toán 1.
Trong Thuật toán 1, hàng qsBc là hàng ký tự dịch chuyển xuất hiện Quick Search,
được khởi tạo giá trị m từ Hàng 1 tới Hàng 3. Hàng 4-6 thực hiện Biểu thức (1.2).
Ví dụ, trong trường hợp P = “GCAGTCAG” với m = 8 và Σ = {A, C, G, T}. Mỗi

yếu tố trong hàng bad_shiftqsBc[A, C, G, T] được khởi tạo đến 8. Sau khi thực hiện
lệnh forloop từ Hàng 4 đến Hàng 6, ta có hàng bad_shift là qsBc[A, C, G, T] =
[2,3,1,4].
Thuật toán 1: Tiền xử lý của Thuật toán Quick search PREQS(P, m)
1 for i ← 0 to |Σ|-1
2 qsBc[i] ← m
3 end for
4 for i ← 0 to m − 1
5 qsBc[P[i]] ← m − i
6 end for
7 return qsBC[]
Trong Thuật toán 1, Dòng 1-3 chạy trong |Σ| các bước; Dòng 4-6 chạy trong
m các bước. Do vậy, tổng thời gian tiền xử lý là O(m + |Σ|).
Thuật toán 2 thể hiện thuật toán Quick Search. Trước tiên, quy trình tiền xử
lý được gọi là preQs, để tính toán hàng dịch chuyển xuất hiện. Từ Hàng 3-9 sử dụng
whileloop để so sánh văn bản T và mẫu P. Hàng 4 so sánh P[0, ..., m − 1] và T[j, ...,
j + m − 1], trong đó 0 ≤ j ≤ n − m. Khi lỗi đối sánh xảy ra, thuật toán QS chuyển
sang một vị trí mới được quyết định bởi ký tự xuất hiện trong T, bằng việc sử dụng
giá trị dịch chuyển thích hợp cho biểu tượng, đó là T[j + m]
Thuật toán 2: Thuật toán Quick search


10
QS(P, m, T, n, |Σ|)
1 shift ← preQS(P,m)
2j←0
3 while (j ≤ n − m)
4 Compare P[0, ..., m − 1] and T[j, ..., j + m − 1]
5 if all matched then do
6 output j

7 end if
8 j ← j + shift[T[j + m]]
9 end while
Giai đoạn tìm kiếm của QS có độ phức tạp thời gian trong trường hợp xấu
nhất là O(mn). Trong mỗi thời gian, khoảng cách dịch chuyển được duy trì và ký tự
xuất hiện được tìm thấy trong so sánh cuối cùng của P[0] tới văn bản phù hợp (QS
bắt đầu so sánh từ phải sang trái).
Ví dụ: Nếu T = Anvà P = BAm-1, trong trường hợp này, khoảng cách dịch
chuyển qsBc[A] = 1. Đó là, khi mỗi ký tự xấu xuất hiện, khoảng cách dịch chuyển
sẽ là 1. Thêm vào đó, ký tự xuất hiện này được tìm thấy trong so sánh cuối cùng của
P[0] với vị trí văn bản tương ứng, bởi vì so sánh của QS thực hiện từ phải sang trái.
Tuy nhiên, trường hợp cực xấu này hiếm xảy ra. Giống như BM, nhìn chung QS có
hiệu suất thực tiễn rất tốt.
1.4. Khái quát về các thuật toán sánh mẫu chính xác
Theo Simone Faro và Thierry Lecroq [7], bài toán sánh xâu chính xác bao
gồm việc tìm ra tất cả những lần xuất hiện của một mẫu đối sánh (p) trong một văn
bản (t). Đây là một vấn đề đã được nghiên cứu nhiều trong khoa học máy tính, chủ
yếu do nó có những ứng dụng trực tiếp đến nhiều mặt như xử lý văn bản, hình ảnh
và tín hiệu, phân tích giọng nói và nhận dạng, truy vấn thông tin, nén dữ liệu, sinh
học tính toán và hóa học tính toán.
Trong suốt thập kỷ qua (2001-2010) có hơn 50 thuật toán mới được đưa ra để
áp dụng cho vấn đề này, mở rộng thêm số lượng thuật toán đã có (khoảng 40 thuật
toán) được trình bày trước năm 2000. Các tác giả sẽ xem xét những thuật toán đối
sánh chuỗi hiệu quả nhất được trình bày trong thập kỷ qua để đưa ra một cách hệ
thống trong số hàng chục bài đã xuất bản trong lĩnh vực này.
Các tác giả thực hiện so sánh 85 thuật toán đối sánh chuỗi chính xác với 12
văn bản thuộc về những loại khác nhau. Các tác giả chia các mẫu đối sánh làm 4
loại theo chiều dài m: rất ngắn (m4), ngắn (4 < m  32), dài (32 < m  256) và rất



11
dài (m > 256). Các tác giả tiến hành theo cùng một cách như vậy đối với việc chia
mẫu đối sánh theo khổ chữ cái s: rất nhỏ (s<4), nhỏ (4 s<32), rộng (32  s < 128)
và rất rộng (s>128). Theo các kết quả thử nghiệm, các tác giả kết luận rằng các
thuật toán sau đạt hiệu quả nhất trong các tình huống sau đây:
- SA: các mẫu đối sánh rất ngắn và bảng chữ cái rất nhỏ.
- TVSBS: các mẫu đối sánh rất ngắn và bảng chữ cái nhỏ, và các mẫu đối
sánh dài và bảng chữ cái rộng.
- FJS: các mẫu rất ngắn và bảng chữ cái rộng và rất rộng.
- EBOM: các mẫu ngắn và bảng chữ cái rộng và rất rộng.
- SBNDM-BMH và BMH-SBNDM: mẫu ngắn và bảng chữ cái rất rộng.
- HASHq: các mẫu rộng, ngắn và bảng chữ cái nhỏ.
- FSBNDM: các mẫu dài và bảng chữ cái rộng và rất rộng.
- SBNDMq : các mẫu dài và bảng chữ cái nhỏ.
- LBNDM : các mẫu rất dài và bảng chữ cái rất rộng.
- SSEF [7]: các mẫu rất dài.
Nhưng trong số các thuật toán này chỉ có một thuật toán là SA được thiết kế
trong suốt thập kỷ qua, 4 thuật toán khác được dựa trên sự so sánh các kí tự, một
thuật toán dựa trên automata trong khi 6 thuật toán còn lại là những thuật toán bit
song song.
Để giảm thiểu các công việc phát triển các thuật toán đối sánh chuỗi chính
xác, các tác giả phát triển một công cụ thông minh (công cụ nghiên cứu các thuật
toán đối sánh chuỗi, tham khảo tại cung cấp
khung tiêu chuẩn cho các nhà nghiên cứu trong đối sánh chuỗi. Nó giúp cho người
sử dụng kiểm tra, thiết kế, đánh giá và hiểu được các giải pháp hiện có để giải
quyết vấn đề đối sánh chuỗi chính xác. Hơn nữa nó cung cấp bổ sung hầu hết tất cả
các thuật toán đối sánh chuỗi và một dữ liệu vùng đệm văn bản mở rộng.
1.5. Kết luận chương 1
Chương 1 trình bày các nghiên cứu về các bài toán sánh mẫu. Bài toán sánh
mẫu có thể chia làm 2 loại là: sánh mẫu chính xác và sánh mẫu xấp xỉ; hoặc sánh

mẫu trực tuyến và sánh mẫu ngoại tuyến. Trong đó, bài toán sánh xâu chính xác bao
gồm việc tìm ra tất cả những lần xuất hiện của một mẫu đối sánh (p) trong một văn
bản (t). Đây là một trong những bài toán được nghiên cứu rộng rãi nhất trong khoa
học máy tính, chủ yếu vì các ứng dụng trực tiếp của nó cho rất nhiều lĩnh vực khác


12
nhau như xử lý văn bản - hình ảnh - tín hiệu (text, image and signal processing),
phân tích và nhận dạng giọng nói (speech analysis and recognition), truy hồi thông
tin (information retrieval), nén dữ liệu (data compression), sinh học và hóa học tính
toán (computational biology and chemistry).
Chương này tập trung nghiên cứu và trình bày các thuật toán sánh mẫu
truyền thống là thuật toán Boyer - Moore và thuật toán QuickSearch.


13

CHƯƠNG 2: HỌ THUẬT TOÁN SÁNH MẪU CHÍNH XÁC NHANH
SSABS - TVSBS – FQS
2.1. Giới thiệu về các biến thể của thuật toán Quick Search
Trong [7], Simone Faro và Thierry Lecroq cung cấp một khái quát về các
thuật toán sánh mẫu được phát triển dựa trên thuật toán Quick Search. Một số thuật
toán điển hình như sau:
- Thuật toán SSABS được công bố năm 2004 [8] là một kết hợp chiến lược
chuyển dịch của thuật toán QS và chiến lược kiểm thử nghiệm của thuật toán Raita.
Thuật toán TVSBS được công bố năm 2006 [4] là phiên bản cải tiến của SSABS.
Hai thuật toán này có độ phức tạp thời gian trong trường hợp xấu nhất là O(nm) với
n, m tương ứng là kích thước của mẫu và xâu văn bản.
- Thuật toán Franek-Jennings-Smyth được công bố năm 2007 là một thuật
toán kết hợp đơn giản các trường hợp độ phức tạp thời gian tồi nhất của thuật toán

Knuth-Morris-Pratt với các hành vi trung bình tốt hơn của thuật toán QS.
- Thuật toán Forward BOM (Forward-Backward-Oracle-Matching) được
công bố năm 2008 là một thuật toán kết hợp các ý tưởng tiến bộ của thuật toán
Extended-BOM và thuật toán QS.
Luận văn này tập trung vào một nhóm thuật toán biến thể của thuật toán
Quick Search mà được kiểm định là có lợi thế khi mẫu ngắn với bảng chữ nhỏ hoặc
mẫu dài với bảng chữ lớn [6] với đại diện là thuật toán TVSBS. Các mục dưới đây
trình bày lần lượt ba thuật toán thuộc nhóm này là SSABS (Sheik-Sumit-AnindyaBalakrishnan-Seka) [8], TVSBS (Thathoo-Virmani-Sai-Balakrishnan-Sekar) [4] và
FQS (faster quick search) [3].
2.2. Thuật toán đối sánh mẫu nhanh SSABS
2.2.1. Giới thiệu
Thuật toán SSABS được S. S. Sheik và cộng sự công bố vào năm 2004 [8]
và được đặt tên theo tên năm tác giả S. S. Sheik - Sumit K. Aggarwal - Anindya
Poddar - N. Balakrishnan - K. Sekar.
Theo S. S. Sheik và cộng sự, hầu hết các thuật toán sánh mẫu nổi tiếng làm
việc theo hai giai đoạn: giai đoạn tiền xử lý và giai đoạn tìm kiếm. Trong giai đoạn
tiền xử lý, các thuật toán này xử lý mẫu và sử dụng thông tin này trong giai đoạn
tìm kiếm để giảm thiểu tổng số lượng so sánh ký tự và do đó giảm thời gian thực
hiện tổng thể. Hiệu quả của một thuật toán chủ yếu phụ thuộc vào giai đoạn tìm
kiếm. Mục tiêu chính của các thuật toán đối sánh mẫu là để giảm thiểu số lượng so


14
sánh ký tự giữa mẫu và văn bản nhằm làm tăng hiệu quả tổng thể. Sự cải tiến trong
hiệu quả của một tìm kiếm có thể đạt được bằng cách thay đổi trật tự các ký tự được
so sánh mỗi lần thử nghiệm và bằng việc lựa chọn yếu tố dịch chuyển cho phép
bước nhảy của một số ký tự được xác định trước trong văn bản sau mỗi lần thử
nghiệm.
Các thuật toán đối sánh mẫu quét văn bản với sự hỗ trợ của một cửa sổ, có
kích thước tương đương với độ dài của mẫu. Bước đầu tiên là gắn kết các phần cuối

cùng bên trái của cửa sổ và văn bản, sau đó so sánh với các ký tự tương ứng của cửa
sổ và mẫu. Sau mỗi một đối sánh hoặc lỗi đối sánh của mẫu, cửa sổ văn bản được
dịch chuyển sang bên phải. Vấn đề đặt ra ra là có bao nhiêu ký tự được yêu cầu dịch
chuyển cửa sổ trên văn bản. Các giá trị dịch chuyển này dựa trên phương pháp luận
được sử dụng bởi các thuật toán khác nhau. Quy trình đó được lặp đi lặp lại cho tới
khi phần cuối cùng bên phải của cửa sổ nằm trong phần cuối cùng bên phải của văn
bản.
2.2.2. Thuật toán
Trật tự các so sánh được thực hiện bằng việc so sánh ký tự cuối cùng của cửa
sổ và mẫu, sau khi đối sánh, thuật toán tiếp tục so sánh ký tự đầu tiên của cửa sổ và
mẫu. Như vậy, một sự tương đồng ban đầu có thể được thiết lập giữa mẫu và cửa
sổ, các ký tự còn lại được so sánh từ phải qua trái cho tới khi đối sánh hoàn toàn
hoặc lỗi đối sánh xảy ra. Sau mỗi lần thử nghiệm, bước nhảy của cửa sổ đạt được
bằng giá trị dịch chuyển qsBc đối với ký tự được đặt ở vị trí liền kề với cửa sổ.
Do sự phụ thuộc của các ký tự lân cận mạnh hơn so với các ký tự khác nên
cần so sánh ký tự cuối cùng trước tiên và ký tự đầu tiên thứ hai sau đó tiếp tục so
sánh các ký tự theo trình tự từ phải sang trái của mẫu và cửa sổ. Vì vậy, sẽ tốt hơn
nếu tạm dừng việc so sánh các ký tự lân cận nhau. Xác xuất việc đánh giá một đối
sánh chính xác giữa mẫu với cửa sổ được tăng lên với một lượng tối thiểu so sánh
bằng cách kết hợp sự tương đồng ban đầu. Thêm vào đó, sự tối đa hóa bước nhảy
cho cửa sổ giúp giảm thiểu số lượng so sánh ký tự với ký tự và làm tăng hiệu suất.
Giai đoạn tiền xử lý:
Giai đoạn này được thực hiện bằng việc sử dụng hàm dịch chuyển qsBc đối
với tất cả các ký tự trong bảng chữ cái được thiết lập. Một bảng được hình thành với
cỡ σ, chứa ký tự và giá trị bước nhảy tương ứng của nó. Giá trị qsBc cho một bảng
chữ cái cụ thể được xác định như vị trí của ký tự trong mẫu từ phải sang trái, nếu
điều đó không diễn ra trong mẫu thì giá trị sẽ bằng (m+1). Giá trị bước nhảy cho
mỗi ký tự được lưu trữ trong bảng qsBc được sử dụng trong giai đoạn tìm kiếm.
Trong giai đoạn tìm kiếm, sau mỗi lần thử, bước nhảy của cửa sổ được tính toán



15
bằng việc đạt được giá trị dịch chuyển của ký tự ngay sau cửa sổ. Giá trị bước nhảy
tối đa đối với cửa sổ được nhận ra khi ký tự (ký tự ngay sau cửa sổ) không có mặt ở
trong mẫu. Xác suất của một ký tự xuất hiện trong mẫu ít hơn khi cỡ bảng chữ cái
lớn điều đó giúp cho việc đạt được bước nhảy tối đa của cửa sổ. Trong thuật toán
này ta xem xét hàm dịch chuyển qsBC của Quick-search vì những lí do sau:
(1) Giá trị qsBc thường được xác định ≥ 1, do đó nó có thể làm việc một cách
độc lập và ra một thuật toán nhanh. Mặt khác, bmBc đôi khi mang lại giá trị dịch
chuyển ≤ 0 và trong các trường hợp như vậy nó không được sử dụng một cách độc
lập. Do vậy, nó phải làm việc cùng với bmGs (dịch chuyển khớp của Boyer-Moore)
để tính toán bước nhảy của cửa sổ.
(2) qsBC = bmBC, trừ các ký tự cuối cùng trong mẫu. Do đó, qsBc luôn luôn
có giá trị dịch chuyển nhiều hơn bmBc trong thực tế.
(3) qsBc không phụ thuộc vào trật tự các so sánh giữa mẫu và cửa sổ. Vì
qsBc được xác định liên quan tới một ký tự nằm ngoài phạm vi so sánh hiện tại của
mẫu.
Giai đoạn tìm kiếm:
Bước 1 và bước 2 của giai đoạn này giải quyết trật tự so sánh ký tự với ký tự
giữa cửa sổ và mẫu.
Bước 1: Để tìm ra sự tương đồng ban đầu giữa mẫu và cửa sổ, trước tiên, ký
tự cuối cùng của mẫu và cửa sổ được so sánh, trong trường hợp có đối sánh, ký tự
đầu tiên của mẫu và ký tự tương ứng trong cửa sổ được so sánh. Nếu những ký tự
này đối sánh, thuật toán đi vào bước tiếp theo, nếu không nó sẽ đi tới bước cuối
cùng.
Bước 2: Sau khi tạo một sự tương đồng ban đầu giữa cửa sổ và mẫu, các ký
tự còn lại được so sánh theo trật tự từ phải sang trái cho đến khi một lỗi đối sánh
xảy ra hoặc tất cả các ký tự (m – 2) đối sánh. Nếu tất cả các ký tự đối sánh, thuật
toán hiển thị vị trí tương ứng (j) của cửa sổ trên văn bản. Sau đó thuật toán đi vào
bước cuối cùng.

Bước 3: Trong bước này, sự tính toán khoảng cách mà cửa sổ được dịch
chuyển được tính toán sử dụng qsBc, đã được tạo ra trong suốt giai đoạn tiền xử lý,
đối với ký tự đầu tiên ngay sau cửa sổ.
Quy trình này lặp lại cho tới khi cửa sổ đạt được vị trí ngoài (n - m +1).
Phân tích thuật toán:


16
Trong giai đoạn tiền xử lý: Thời gian tính toán của của thuật toán là O(m + σ) và độ
phức tạp không gian là O(σ).
Trong giai đoạn tìm kiếm: Trong trường hợp tốt nhất độ phức tạp thời gian là
O([(n/(m + 1))]) . Các ký tự không xảy ra trong mẫu có giá trị dịch chuyển (m+1)
được xác định bởi qsBc được tính toán trong suốt giai đoạn tiền xử lý. Việc xem xét
trường hợp tốt nhất là các ký tự trong mẫu hoàn toàn khác so với các ký tự trong
văn bản, đối sánh m ký tự của mẫu trong văn bản thu được giá trị dịch chuyển
(m+1) tại mỗi lần thử nghiệm và do đó độ phức tạp thời gian là O([(n/(m + 1))]).
Trong trường hợp xấu nhất độ phức tạp thời gian là O(m(n-m+1)). Thực tế
tất cả các ký tự trong văn bản được đối sánh không hơn m thời gian, tổng số các so
sánh ký tự đối với n ký tự của văn bản không thể nhiều hơn m(n+1); Sự dịch
chuyển bằng 1 và các ký tự được đối sánh trong mỗi lần thử nghiệm. Điều này được
nhận ra khi các ký tự trong mẫu tương đồng chính xác với các ký tự trong văn bản.
Độ phức tạp thời gian trung bình không thể được xác định một cách chính
xác vì nó chủ yếu phụ thuộc vào cỡ bảng chữ cái và xác xuất lần xuất hiện của mỗi
ký tự riêng lẻ trong văn bản.
2.2.3. Ví dụ
Gene người bao gồm 37490 trình tự gene (NCBI site, U.S.A., i.
nih.gov/genomes/H_sapiens/protein/).
Toàn bộ trình tự theo định dạng FASTA: >gi|4504279|ref|
NP_002098.1|H3histone,family3A[Homosapiens]MARTKQTARKSTGGKAPRK
QLATKAARKSAPSTGGVKKPHRYRPGTVALREIRRYQKSTELLIRKLPFQR

LVREIAQDFKTDLRFQSAAIGALQEASEAYLVGLFEDTNLCAIHAKRVTIMPKDI
QLARRIRGERA
Phần trình tự được xem xét để chạy thử
MARTKQTARKSTGGKAPRKQLATKAARKSAPSTGGVKKPHRYRPGTV
T=MARTKQTARKSTGGKAPRKQLATKAARKSAPSTGGVKKPHRYRPGTV
P=KAPRKQL
n=47 m=7

Giai đoạn tiền xử lý


17

A
qsBc[a]

A C D E

F

G H I

K L

M N P

Q R S

T


V W Y

6

8

8

3

8

2

8

8

8

8

8

8

8

1


8

5

4

8

8

8

Một bảng được thành lập với cỡ σ, lưu trữ ký tự và giá trị bước nhảy tương
ứng của nó.
Giai đoạn tìm kiếm.
Thử nghiệm đầu tiên :
MARTKQTARKSTGGKAPRKQLATKAARKSAPSTGGVKKPHRYRPGTV
1
KAPRKQL
shift = qsBc[A] =6
Trước tiên, các ký tự cuối cùng của mẫu và cửa sổ được so sánh. Trong
trường hợp lỗi đối sánh, cửa sổ di chuyển dựa trên giá trị dịch chuyển xuất hiện
qsBc y[j+m].
Lần thử thứ hai :
MARTKQTARKSTGGKAPRKQLATKAARKSAPSTGGVKKPHRYRPGTV
1
KAPRKQL
shift = qsBc[G] =8
Tại đây một lần nữa, so sánh các ký tự cuối cùng của mẫu và văn bản được
thực hiện, và trong khi có lỗi đối sánh, cửa sổ được dịch chuyển dựa trên giá trị

dịch chuyển y[j+m].
Lần thử thứ ba :
MARTKQTARKSTGGKAPRKQLATKAARKSAPSTGGVKKPHRYRPGTV
2 7 65 4 31
KAPRKQL
shift = qsBc[A] = 6
Trong trường hợp này, mẫu được đưa ra đối sánh với văn bản và so sánh
được thực hiện như sau: Trước tiên, ký tự cuối cùng của mẫu và cửa sổ được so
sánh, sau đó đến ký tự đầu tiên, tiếp theo là các ký tự còn lại theo trình tự từ phải
sang trái. Sau đó cửa sổ được di chuyển dựa trên giá trị dịch chuyển y[j+m].


18
Thử nghiệm thứ 4:
MARTKQTARKSTGGKAPRKQLATKAARKSAPSTGGVKKPHRYRPGTV
1
KAPRKQL
shift = qsBc[K] = 3
Trong lần này, lỗi đối sánh xảy ra giữa các ký tự cuối cùng của mẫu và văn
bản. Do đó, cửa sổ được dịch chuyển dựa trên giá trị dịch chuyển như trên.
Thử nghiệm thứ 5 :
MARTKQTARKSTGGKAPRKQLATKAARKSAPSTGGVKKPHRYRPGTV
1
KAPRKQL
shift = qsBc[P] = 5
Lần này cũng như vậy, lỗi đối sánh xảy ra, cửa sổ được di chuyển dựa trên
giá trị dịch chuyển như trên.
Thử nghiệm thứ 6 :
MARTKQTARKSTGGKAPRKQLATKAARKSAPSTGGVKKPHRYRPGTV
1

KAPRKQL
shift =qsBc[V] = 8
Tại đây một lần nữa, so sánh các ký tự cuối cùng của mẫu và văn bản không
thành, do đó cửa sổ được dịch chuyển dựa trên giá trị dịch chuyển.
Thử nghiệm thứ 7 :
MARTKQTARKSTGGKAPRKQLATKAARKSAPSTGGVKKPHRYRPGTV
1
KAPRKQL
Tổng số lần thử nghiệm: 7
Tổng số ký tự được so sánh : 13


×