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

Nghiên cứu thuật toán tối ưu hóa bầy đàn cho bài toán tìm kiếm văn bản

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 (2.18 MB, 77 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC VINH

NGUYỄN QUỐC ANH

NGHIÊN CỨU THUẬT TỐN TỐI ƢU HĨA
Gõ văn
của bạn
BẦY ĐÀN CHO
BÀIbản
TỐN
TÌM KIẾM VĂN BẢN

LUẬN VĂN THẠC SĨ CƠNG NGHỆ THƠNG TIN

ĐỒNG THÁP, 3/2017


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC VINH

NGUYỄN QUỐC ANH

NGHIÊN CỨU THUẬT TỐN TỐI ƢU HĨA
BẦY ĐÀN CHO BÀI TỐN TÌM KIẾM VĂN BẢN

Chun ngành: CƠNG NGHỆ THƠNG TIN
Mã số: 60.48.02.01
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

Ngƣời hƣớng dẫn khoa học: TS. PHAN LÊ NA



ĐỒNG THÁP, 3/2017


i

LỜI CAM ĐOAN
Tơi xin cam đoan đây là cơng trình nghiên cứu của riêng tôi. Các số liệu
và kết quả nghiên cứu trong luận văn là trung thực và chƣa hề đƣợc sử dụng
để bảo vệ một học vị nào. Các thơng tin đƣợc lƣợc trích từ nguồn tài liệu
chính thống và đƣợc chỉ rõ nguồn gốc rõ ràng. Nếu sai tơi hồn tồn chịu
trách nhiệm.
Tác giả luận văn

Nguyễn Quốc Anh


ii

LỜI CẢM ƠN
Trong quá trình học tập, nghiên cứu và thực hiện luận văn thạc sĩ
“Nghiên cứu thuật toán tối ƣu hóa bầy đàn cho bài tốn tìm kiếm văn bản”, tôi
xin gửi lời cảm ơn chân thành nhất đến Lãnh đạo Trƣờng Đại học Vinh và
Trƣờng Đại học Đồng Tháp đã tạo điều kiện thuận lợi, cùng quý Thầy, Cơ đã
tận tình truyền đạt những tri thức khoa học, giúp đỡ cho tơi trong q trình
học tập và nghiên cứu tại Trƣờng Đại học Đồng Tháp.
Đặc biệt, tôi xin đƣợc bày tỏ lòng cảm ơn sâu sắc nhất đến nhà khoa học
TS. Phan Lê Na, ngƣời Cô đã nhiệt tình, tận tâm giúp đỡ, hƣớng dẫn tơi rất
chu đáo trong quá trình học tập và thực hiện luận văn. Cùng nhiều nhà khoa
học khác đã góp ý, giúp đỡ tơi để luận văn này đƣợc hồn thành.

Tơi khơng qn sự động viên khuyến khích từ gia đình, bạn bè, đồng
nghiệp, giúp tơi có thêm nghị lực để hồn việc học tập, nghiên cứu của mình.
Xin chân thành cảm ơn!
Đồng tháp, tháng 3 năm 2017
Tác giả luận văn
Nguyễn Quốc Anh


iii

MỤC LỤC
LỜI CAM ĐOAN ............................................................................................ i
LỜI CẢM ƠN ................................................................................................. ii
DANH MỤC CÁC TỪ VIẾT TẮT ............................................................... vi
DANH MỤC HÌNH, BẢNG, SƠ ĐỒ ........................................................... vii
MỞ ĐẦU ......................................................................................................... 1
1. Sự cần thiết của vấn đề nghiên cứu............................................................. 1
2. Mục tiêu nghiên cứu.................................................................................... 2
3. Đối tƣợng và phạm vi nghiên cứu............................................................... 2
4. Nội dung nghiên cứu ................................................................................... 2
5. Kết cấu của luận văn ................................................................................... 3
CHƢƠNG 1. CƠ SỞ LÝ THUYẾT ............................................................... 4
1.1. Giới thiệu bài tốn tìm kiếm văn bản ....................................................... 4
1.2. Phân loại bài tốn tìm kiếm văn bản ........................................................ 5
1.2.1. Tìm đơn mẫu ......................................................................................... 5
1.2.2. Tìm đa mẫu............................................................................................ 7
1.2.3. Tìm mẫu mở rộng.................................................................................. 8
1.2.4. Tìm kiếm xấp xỉ .................................................................................... 9
1.3. Một số thuật tốn tìm kiếm văn bản....................................................... 11
1.3.1. Thuật tốn Brute Force........................................................................ 11

1.3.2. Thuật toán Knuth-Morris-Pratt ........................................................... 12
1.3.3. Thuật toán Boyer-Moore ..................................................................... 14


iv

1.3.4. Thuật toán Karp-Rabin........................................................................ 17
1.3.5. Các thuật toán khác ............................................................................. 18
CHƢƠNG 2. GIỚI THIỆU THUẬT TỐN TỐI ƢU HĨA BẦY ĐÀN
PARTICLE SWARM OPTIMIZATION ...................................................... 21
2.1. Giới thiệu................................................................................................ 21
2.2. Thuật toán PSO ...................................................................................... 21
2.3. Đặt trƣng của thuật toán PSO................................................................. 25
2.4. Các bƣớc quan trọng trong việc áp dụng thuật toán PSO ...................... 25
2.5. Các tham số của thuật toán..................................................................... 26
2.5.1. Tham số vận tốc .................................................................................. 26

2.5.2. Gia tốc c1 và c2 ................................................................................... 27
2.5.3. Kích thƣớc của quần thể...................................................................... 27
2.5.4. Tham số quán tính w ........................................................................... 27
2.6. Một số ứng dụng của thuật toán PSO .................................................... 28
2.7. Hạn chế của PSO .................................................................................... 29
2.8. Lai ghép và kết hợp PSO với một số thuật tốn tiến hóa khác .............. 29
2.9. Ví dụ ứng dụng thuật toán PSO ............................................................. 30
CHƢƠNG 3. ỨNG DỤNG THUẬT TỐN TỐI ƢU HĨA BẦY ĐÀN VÀO
BÀI TỐN TÌM KIẾM VĂN BẢN ............................................................. 34
3.1. Yêu cầu đặt ra......................................................................................... 34
3.2. Độ tƣơng tự của hai chuỗi văn bản ........................................................ 35
3.3. Xây dựng hàm tìm kiếm ......................................................................... 36
3.4. Phát biểu bài tốn tìm kiếm văn bản tiếp cận giải thuật tối ƣu hóa bầy đàn

....................................................................................................................... 38


v

3.5. Áp dụng giải thuật tối ƣu hóa bầy đàn ................................................... 39
3.5.1. Biểu diễn cá thể ................................................................................... 40
3.5.2. Khởi tạo quần thể và các tham số ....................................................... 40
3.5.3. Hàm thích nghi .................................................................................... 40

3.5.4. Tiến hóa quần thể ................................................................................ 41
3.5.5. Điều kiện dừng của thuật toán ............................................................ 41
3.5.6. Độ phức tạp của thuật toán.................................................................. 41
CHƢƠNG 4. CÀI ĐẶT VÀ ĐÁNH GIÁ THUẬT TỐN .......................... 42
4.1. Cài đặt thuật tốn ................................................................................... 42
4.2. Các kết quả thực nghiệm ........................................................................ 42
4.2.1. Kết quả tìm kiếm tuyến tính ................................................................ 42
4.2.2. Kết quả tìm kiếm bằng giải thuật Tối ƣu hóa bầy đàn- PSO .............. 44
4.2.3. So sánh giải thuật PSO và giải thuật Di truyền................................... 49
4.3. Phát triển ứng dụng ................................................................................ 50
KẾT LUẬN ................................................................................................... 51
TÀI LIỆU THAM KHẢO ............................................................................. 52
PHỤ LỤC ...................................................................................................... 54


vi

DANH MỤC CÁC TỪ VIẾT TẮT
BM


Thuật toán Boyer-Moore

GA

Genetic Algorithm-Giải thuật Di truyền

KMP

Thuật toán Knuth-Morris-Pratt

KR

Thuật toán Karp-Rabin

PSO

Particle Swarm Optimization-Thuật toán tối ƣu
hóa bầy đàn


vii

DANH MỤC HÌNH, BẢNG, SƠ ĐỒ
Hình ảnh
Hình 1.1. Tiếp cận thứ nhất: tìm kiếm tiền tố......................................... 6
Hình 1.2. Tiếp cận thứ hai: tìm kiếm hậu tố ........................................... 7
Hình 1.3. Tiếp cận thứ ba ....................................................................... 7
Hình 2.1. Quần thể đƣợc khởi tạo......................................................... 31
Hình 2.2. Kết quả tìm đƣợc sau 45 thế hệ tiến hóa .............................. 31
Hình 2.3. Kết quả sau 1000 thế hệ tiến hóa .......................................... 33

Hình 4.1. Kết quả tìm kiếm tuyến tính so khớp Brute Fore ................. 42
Hình 4.2. Kết quả tìm kiếm tuyến tính sử dụng QHĐ với ngƣỡng 1 ... 43
Hình 4.3. Kết quả tìm kiếm tuyến tính sử dụng QHĐ với ngƣỡng 0.9 43

Bảng
Bảng 4.1. Kết quả thuật toán PSO trong 20 lần chạy với ngƣỡng là 1. 44
Bảng 4.2. Kết quả thuật toán PSO trong trƣờng hợp nhập sai mẫu ..... 46
Bảng 4.3. Kết quả thuật toán PSO trong 20 lần chạy với ngƣỡng 0.8 . 48
Bảng 4.4. So sánh PSO và GA ............................................................. 50

Sơ đồ
Sơ đồ 2.1. Tìm kiếm 1 điểm bằng PSO ................................................ 22
Sơ đồ 2.2. Lƣu đồ giải thuật PSO ......................................................... 23


1

MỞ ĐẦU
1. Sự cần thiết của vấn đề nghiên cứu
Ngày nay, công nghệ thông tin đƣợc ứng dụng rộng rãi trong đời sống,
các tài liệu văn bản đƣợc lƣu trữ trên máy tính để thuận tiện cho việc trao đổi,
in ấn và lƣu trữ, vì vậy kho lƣu trữ các tập tin văn bản ngày càng lớn, khó khăn
trong việc khai thác dữ liệu sau một thời gian sử dụng. Cho nên, hầu hết các hệ
điều hành đều tích hợp cơng cụ hỗ trợ việc tìm kiếm tự động theo hai cách với
từ khóa chứa trong: tên tập tin hoặc nội dung tập tin. Trong thực tế sử dụng,
ngƣời dùng ít nhớ tên tập tin, có thể chỉ nhớ một phần nội dung của tập tin,
trƣờng hợp này công cụ tìm kiếm sẽ khơng thể cho kết quả nhƣ mong muốn
nếu ngƣời dùng khơng nhớ chính xác từ khóa có trong tên tập tin hoặc nội dung
văn bản. Hơn nữa, cơng cụ tìm kiếm khơng cho biết đƣợc số lần và vị trí xuất
hiện của từ khóa trong tập tin văn bản tìm đƣợc.

Vấn đề về bài tốn tìm kiếm là rất thiết thực, có rất nhiều thuật tốn đƣa
ra các phƣơng thức tìm kiếm sao cho đáp ứng đƣợc yêu cầu ngƣời dùng và
thời gian tìm kiếm tốt nhất. Tìm kiếm khơng chỉ dừng lại ở nhu cầu tìm kiếm
văn bản nhƣ đã đề cập ở trên, nó cịn đƣợc ứng dụng vào việc tìm ra kết quả
tốt nhất có thể trong các dạng bài tốn: phƣơng án kinh doanh, lịch trong xếp
thời khóa biểu, nghiệm phƣơng trình phức tạp…Những phƣơng thức tìm kiếm
đã đƣợc nghiên cứu hiện nay nhƣ: so khớp, tuyến tính qui hoạch động, giải
thuật di truyền, giải thuật đàn kiến…
Xuất phát từ nhu cầu thực tiễn, cần thiết để cải tiến phƣơng thức tìm
kiếm văn bản bằng cách vận dụng những ƣu điểm từ kết quả nghiên cứu thuật
tốn tối ƣu hóa bầy đàn trong tìm nghiệm tối ƣu của bài tốn. Bên cạnh đó, so
sánh tính hiệu quả của việc áp dụng thuật tốn tối ƣu hóa bầy đàn với một số
thuật tốn tìm kiếm khác vào bài tốn tìm kiếm.


2

Từ những lý do trên, chúng tôi chọn vấn đề: “Nghiên cứu thuật tốn
Tối ưu hóa bầy đàn cho bài tốn tìm kiếm văn bản” làm đề tài nghiên cứu.
2. Mục tiêu nghiên cứu
Nghiên cứu thuật tốn tối ƣu hóa bầy đàn để tìm kiếm văn bản.
3. Đối tƣợng và phạm vi nghiên cứu
3.1. Đối tƣợng nghiên cứu:
- Bài toán tìm kiếm văn bản
- Lý thuyết và các thuật tốn tìm kiếm văn bản.
- Lý thuyết về thuật tốn tối ƣu hóa bầy đàn.
3.2. Phạm vi nghiên cứu: Nghiên cứu thuật tốn tối ƣu hóa bầy đàn để
xây dựng ứng dụng tìm kiếm văn bản và so sánh tính hiệu quả của thuật tốn
tối ƣu hóa bầy đàn với một số thuật tốn tìm kiếm văn bản khác.
4. Nội dung nghiên cứu

4.1. Khảo sát và đánh giá về các thuật tốn tìm kiếm văn bản đã có
nhằm xác định ƣu điểm và hạn chế của các thuật toán.
4.2. Nghiên cứu ngơn ngữ lập trình Matlab để cài đặt mơ phỏng các
thuật tốn trên máy tính.
4.3. Nghiên cứu thuật tốn tối ƣu hóa bầy đàn và các biến thể của nó;
Nghiên cứu việc áp dụng thuật tốn tối ƣu hóa bầy đàn cho bài tốn tìm kiếm
văn bản.
4.4. Lập trình thuật tốn tối ƣu hóa bầy đàn cho bài tốn tìm kiếm văn
bản và đánh giá hiệu quả của thuật toán.


3

5. Kết cấu của luận văn
Ngoài phần mở đầu, kết luận, tài liệu tham khảo và phụ lục, luận văn
bao gồm các chƣơng sau:
Chƣơng 1. Cơ sở lý thuyết
Chƣơng 2. Giới thiệu thuật tốn tối ƣu hóa bầy đàn – Particle swarm
optimization
Chƣơng 3. Ứng dụng thuật tốn tối ƣu hóa bầy đàn vào bài tốn tìm
kiếm văn bản
Chƣơng 4. Cài đặt và đánh giá thuật toán


4

CHƢƠNG 1. CƠ SỞ LÝ THUYẾT
Chƣơng này đƣa ra bài tốn tìm kiếm văn bản và đề ra một số giải thuật
để tìm kiếm văn bản dựa vào mẫu đã cho, thơng qua nghiên cứu các giải thuật
đó tìm ra các mặt hạn chế.

1.1. GIỚI THIỆU BÀI TỐN TÌM KIẾM VĂN BẢN
Tìm kiếm làm căn bản cho rất nhiều thuật tốn và bài tốn tìm kiếm văn
bản là một trong những bài toán kinh điển nhất, phổ dụng nhất, mặc dù dữ
liệu đƣợc lƣu với nhiều dạng khác nhau, nhƣng dạng chuỗi văn bản là chiếm
phần lớn. Bài tốn tìm kiếm văn bản và tìm kiếm chuỗi đóng vai trị quan
trọng trong khoa học máy tính, nó đƣợc áp dụng trong nhiều loại phần mềm
khác nhau trong các ngành nghề, lĩnh vực trong thực tế.
Đa số các ứng dụng đều sử dụng phƣơng thức tìm kiếm bằng cách đối
sánh chuỗi ở một dạng nào đó trong q trình đƣa ra kết quả. Chuỗi trong văn
bản có thể gồm chữ, số, ký hiệu hoặc có thể là chuỗi nhị phân hay các dạng
đặc biệt nhƣ chuỗi gene. Bài tốn tìm kiếm văn bản thƣờng đƣợc biết dƣới
dạng cho đầu vào là một hoặc nhiều văn bản, yêu cầu tìm ra các văn bản có
chứa một chuỗi hoặc tập các chuỗi đã đƣợc chỉ định.
Bài tốn có thể đƣợc hình thức hóa nhƣ sau: Tìm kiếm trong văn bản S
các vị trí xuất hiện của chuỗi mẫu P. Việc tìm kiếm thực hiện bằng cách đối
sánh chuỗi P với chuỗi M nằm trong văn bản Q, thao tác đối sánh đƣợc thực
hiện nhiều lần trên các đoạn khác nhau của văn bản. Sự “đối sánh” ở đây có
thể là trùng khớp hồn tồn giữa P và M khi u cầu tìm kiếm chính xác hoặc
có thể là cho phép sai khác một một ít hoặc tƣơng đƣơng giữa hai chuỗi P và
M khi u cầu tìm kiếm gần đúng hay cịn gọi là tìm kiếm xấp xỉ.


5

1.2. PHÂN LOẠI BÀI TỐN TÌM KIẾM VĂN BẢN
Có rất nhiều hƣớng tiếp cận cùng với nhiều thuật toán đƣợc đƣa ra để
giải quyết bài tốn tìm kiếm văn bản, phân loại theo việc tìm kiếm dựa trên
các đặc tính của mẫu ta có các dạng nhƣ sau: tìm đơn mẫu, tìm đa mẫu (mẫu
là tập các xâu), tìm mẫu mở rộng, tìm biểu thức chính qui với hai hƣớng tiếp
cận là tìm kiếm chính xác và xấp xỉ.

1.2.1. Tìm đơn mẫu
Cho xâu mẫu P dộ dài m, P = P1P2…Pm, và xâu độ dài n, S = S1S2…Sn
(S thƣờng dài, là một văn bản) trên cùng một bảng chữ A. Tìm tất cả các xuất
hiện của xâu P trong S.
Trong các thuật toán so mẫu thƣờng sử dụng các khái niệm: Khúc đầu,
khúc cuối, khúc con hay xâu con của một xâu, đƣợc định nghĩa nhƣ sau: Cho
3 xâu x, y, z. Ta nói y là khúc đầu (prefix) của xâu yz và là khúc cuối (suffix)
của xâu xy đồng thời là khúc con hay xâu con (factor) của xâu xyz.
Thuật tốn “thơ” nhất đã đƣợc sử dụng rộng rãi là Brute-Force [12].
Phƣơng pháp này đơn giản là thực hiện các bƣớc lần lƣợt từ đầu đến cuối để
đối sánh từng vị trí tƣơng ứng giữa xâu mẫu P và xâu văn bản S. Nhƣợc điểm
của phƣơng pháp này là tốc độ chậm, thời gian xấu nhất tỉ lệ với tích m*n, tuy
nhiên trong nhiều ứng dụng thực tế các chuỗi phát sinh ra thƣờng có thời gian
xử lý thực sự ln tỷ lệ với m + n. Ngồi ra, một ƣu điểm khác là nó thích
hợp với cấu trúc của hầu hết các hệ máy tính.
Từ năm 1977, có rất nhiều thuật tốn so đơn mẫu đƣợc nghiên cứu và
giới thiệu trên các tài liệu nhƣ: Algorithms for finding patterns in strings [4],
Exact Stringmatching Algorithms [6], Fast and Flexible String Matching by
Combining Bit - Parallelism and Suffix Automata, ACM Journal of
Experimental Algorithmics (JEA) [11]. Trong đó, hai giải thuật Knuth-


6

Morris-Pratt và Boyer-Moore đƣợc xem là kinh điển nhất và đánh giá cao.
Dựa trên cách duyệt tìm mẫu trong văn bản, có thể phân chia phƣơng
pháp tìm kiếm đơn mẫu theo ba cách thức tiếp cận. Tốc độ của các thuật tốn
phụ thuộc vào kích cỡ của mẫu P và bảng chữ A. Cả ba cách tiếp cận đều sử
dụng một “cửa sổ” có độ rộng là kích thƣớc của mẫu P và trƣợt từ trái qua
phải dọc theo chiều dài của xâu S để đối sánh chuỗi mẫu P với chuỗi bên

trong cửa sổ.
Tiếp cận thứ nhất là tìm kiếm tiền tố, “cửa sổ” trƣợt tới và duyệt qua tất
cả nội dung của văn bản S theo từng ký tự một. Tại mỗi vị trí của “cửa sổ” ta
tìm kiếm khúc đầu dài nhất của cửa sổ trùng khớp với khúc đầu của chuỗi
mẫu P. Hai thuật toán điển hình theo tiếp cận này là KMP và Shift-Or.

Hình 1.1. Tiếp cận thứ nhất: tìm kiếm tiền tố

Trong hƣớng tiếp cận thứ hai, “cửa sổ” trƣợt từ trái qua phải dọc theo
xâu S và tìm kiếm mẫu trong cửa sổ này. Tại mỗi vị trí trong cửa sổ, cần tìm
một khúc cuối của cửa sổ mà là khúc cuối của xâu mẫu P. Thuật tốn BM là
một điển hình cho tiếp cận này và một biến thể đơn giản hoá của nó là thuật
tốn Horspool.


7

Hình 1.2. Tiếp cận thứ hai: tìm kiếm hậu tố

Tiếp cận thứ ba là sự cải tiến của tiếp cận thứ hai, nó là căn bản cho ra
đời các thuật toán hiệu quả về thực hành đối với mẫu P đủ dài. Cũng tƣơng tự
nhƣ tiếp cận thứ hai, song tại mỗi thời điểm sẽ tìm khúc cuối dài nhất của cửa
sổ chứa các khúc con của mẫu. Thuật toán đầu tiên theo tiếp cận này là BDM
và khi P đủ ngắn, một phiên bản đơn giản hơn, hiệu quả hơn là BNDM. Với
những mẫu dài, thuật toán BOM đƣợc đánh giá là nhanh nhất [11].

Hình 1.3. Tiếp cận thứ ba

1.2.2. Tìm đa mẫu
Tìm đơn mẫu đƣợc mở rộng, mẫu P lúc này có thể gồm tập các từ khố

{w1,w2,….,wk} trong đó mỗi wi có độ dài riêng và xâu vào S = S1S2…Sn trên
cùng bảng chữ A. Tìm sự xuất hiện của các từ khoá wi trong S.
Một cách đơn giản để tìm nhiều từ khố trong một xâu đích là sử dụng
thuật tốn so đơn mẫu nhanh nhất đối với mỗi từ khố. Rõ ràng phƣơng pháp
này khơng hiệu quả khi số lƣợng từ khoá nhiều và bảng chữ A lớn.
Cả ba tiếp cận tìm đơn mẫu ở trên đều đƣợc mở rộng cho tìm đa mẫu.


8

Hai điển hình theo tiếp cận thứ nhất là thuật tốn nổi tiếng Aho- Corasisk [4],
có tốc độ cải thiện đáng kể khi số từ khoá nhiều và thuật toán Multiple ShiftAnd đƣợc sử dụng hiệu quả khi tổng độ dài của mẫu P rất nhỏ [12].
Theo tiếp cận thứ hai có thuật tốn nổi tiếng Commentz-Walter [4],
trong đó kết hợp ý tƣởng của Boyer-Moore và Aho-Corasisk, nhanh về lý
thuyết, song lại không hiệu quả trong thực hành [4]. Một mở rộng của thuật
toán Horspool là Set Horspool. Cuối cùng là thuật toán Wu-Manber, một
phƣơng pháp pha trộn giữa tiếp cận tìm kiếm hậu tố (suffix search approach)
và một kiểu hàm băm, đƣợc đánh giá là nhanh trong thực hành.
Trong tiếp cận thứ ba đã có những mở rộng từ thuật toán BOM và
SBOM; tƣơng tự với Shift-Or BNDM là Multiple BNDM [12].
1.2.3. Tìm mẫu mở rộng
Trong ứng dụng thực tế, mẫu không chỉ đơn giản là một dãy ký tự. Sau
đây là một số mở rộng thƣờng thấy trong các ứng dụng:
Mở rộng đơn giản nhất cho phép mẫu là một dãy các lớp hay các tập ký
tự, giả sử đƣợc đánh số thứ tự là 1,2,…,m. Bất kỳ ký tự nào trong lớp thứ i
cũng có thể đƣợc xem là ký tự thứ i của mẫu.Ví dụ, “[Aa]nnual” sẽ đƣợc xem
là trùng khớp với “Annual” và “annual”.
Mở rộng thứ hai là giới hạn khoảng trên độ dài: Một số vị trí trên mẫu
đƣợc ấn định để khớp với một dãy văn bản nào đó có độ dài nằm trong một
khoảng xác định trƣớc. Điều này thƣờng đƣợc sử dụng trong các ứng dụng

sinh-tin học, chẳng hạn tìm mẫu PROSITE. Ví dụ, ta có mẫu P a-b-c-x(1,3)-de với x(1,3) đại diện cho chuỗi con bất kỳ có chiều dài từ 1 đến 3 ký tự, nhƣ
vậy ta sẽ thấy rằng mẫu P sẽ khớp với hai chuỗi “abcfde” và “abcffdde”
nhƣng sẽ không khớp với chuỗi “abcffffde”.


9

Mở rộng thứ ba sử dụng các ký tự tùy chọn và ký tự lặp. Trong xuất
hiện của mẫu trên văn bản, các ký tự tuỳ chọn có thể có hoặc khơng có, cịn
các ký tự lặp có thể có một hoặc lặp nhiều lần.Ta sẽ có các chuỗi khớp với
mẫu “abc?d?efg?h” ví dụ là chuỗi “abefh” hoặc chuỗi “abdefgh”.
Các vấn đề nảy sinh từ ba hƣớng mở rộng trên và những kết hợp từ ba
hƣớng này đƣợc giải quyết bằng cách điều chỉnh lại thuật toán Shift-Or và
BNDM, trong đó có sử dụng cơ chế song song bit để mơ phỏng otomat đa
định, cho phép tìm tất cả các xuất hiện của mẫu.
1.2.4. Tìm kiếm xấp xỉ
Tìm kiếm xấp xỉ hay cịn gọi là tìm kiếm chấp nhận sai khác là bài tốn
tìm sự xuất hiện của một mẫu trong văn bản, trong đó sự “khớp” mẫu và các
chuỗi con trong văn bản có thể chấp nhận k “lỗi” (k là một giới hạn cho
trƣớc). Các “lỗi” xảy ra có thể là ở ngƣời dùng hoặc là dữ liệu hệ thống.
Các “lỗi” ở ngƣời dùng có thể kể đến nhƣ sau: trong q trình sử dụng
hệ thống để trích rút thơng tin, ngƣời dùng khơng nhớ chính xác hoặc nhập
thơng tin khơng chính xác khi đƣa ra các câu truy vấn hay là sự đòi hỏi các
kết quả gần giống, liên quan với yêu cầu truy vấn, những lỗi đánh máy hay lỗi
chính tả trong hệ thống trích rút thông tin, những sự biến đổi chuỗi gen hay
các lỗi đo đạc trong sinh-tin học…
Các “lỗi” ở hệ thống nhƣ là sự nhiễu trong quá trình truyền dữ liệu, quá
trình chuyển đổi dữ liệu, biến đỗi hình thái khi chuyển kiểu ngôn ngữ, định
dạng dữ liệu đầu vào cơ sở dữ liệu khơng đúng…
Vì vậy, các hệ thống rút trích thông tin hay các ứng dựng thao tác trên

văn bản cần phải hỗ trợ tối đa cho ngƣời sử dụng trong việc truy vấn tìm kiếm
thơng tin, khắc phục đƣợc các lỗi đã nêu trên và đƣa ra kết quả làm hài lòng
ngƣời sử dụng.


10

Tìm kiếm xấp xỉ sử dụng một hàm để đo sự giống nhau giữa hai chuỗi
và tham số sai khác k “lỗi” phải thuộc khoảng (0,m), trong đó m là chiều dài
của mẫu P cần tìm. Trƣờng hợp k=0 là tìm kiếm chính xác, ngƣợc lại ta gọi
= k/m là mức độ lỗi, thƣớc đo sự so khớp của mẫu này có thể đƣợc tùy biến.
Các thuật tốn tìm kiếm xấp xỉ hiện nay có thể phân thành 4 loại [12]:
1) Các thuật toán dựa trên quy hoạch động: Đây là tiếp cận xuất hiện
đầu tiên và đã đƣợc dùng để tính khoảng cách soạn thảo (Edit Distance) (nhƣ
trong [4]).
2) Các thuật tốn sử dụng otomat tìm kiếm: Trƣớc tiên xây dựng một
hàm của mẫu P và số lỗi k, sau đó tạo otomat đa định hữu hạn (nhƣ trong
[11]). Đây là hƣớng tiếp cận đƣợc quan tâm nhiều vì có độ phức tạp thời gian
trong trƣờng hợp xấu nhất là O(n) (tuy nhiên địi hỏi độ phức tạp khơng gian
lớn hơn).
3) Các thuật toán sử dụng cơ chế song song bit (bit- parallelism): cách
tiếp cận này cho ra rất nhiều thuật toán hiệu quả nhờ khai thác bản chất song
song của các phép toán bit trên một từ máy trong bộ vi xử lý. Nói chung song
song bit đƣợc dùng để song song hoá các kỹ thuật khác, nhƣ tạo otomat đa
định, lập ma trận quy hoạch động. Kỹ thuật này làm việc khá tốt với mẫu
ngắn và tăng tốc đáng kể so với những cài đặt không tận dụng khả năng song
song của thanh ghi. Trong [12] các tác giả cũng chỉ ra một số thuật toán dùng
cơ chế song song bit là BPR và BPD để tái tạo một otomat đa định hữu hạn và
BDM để tái tạo các thuật toán quy hoạch động.
4) Các thuật toán sử dụng cơ chế lọc: Cố gắng thu hẹp không gian tìm

kiếm của bài tốn bằng cách loại đi các văn bản mà chắc chắn không chứa
một đoạn nào “khớp” với mẫu. Nói chung, phƣơng pháp này đạt đƣợc bằng
cách áp dụng kỹ thuật so mẫu chính xác cho các mẫu nhỏ của mẫu. Hai thuật


11

toán hiệu quả nhất theo tiếp cận này là PEX và ABNDM [12]. Trong PEX,
mẫu đƣợc chia thành k + 1 đoạn và sắp xếp để tìm kiếm đa mẫu trên các đoạn
này, vì ít nhất một đoạn phải có mặt trong một xuất hiện bất kỳ. Thuật toán
ABNDM là một mở rộng của thuật tốn BNDM, trong đó tái tạo otomat đa
định hữu hạn cho tìm kiếm xấp xỉ. Nói chung, các thuật tốn sử dụng cơ chế
lọc làm việc tốt hơn tỷ lệ k/m nhỏ. Đối với trƣờng hợp tỷ lệ k/m lớn, các thuật
toán sử dụng cơ chế song song bit đƣợc đánh giá tốt hơn.
Đối với bài tốn tìm kiếm đa mẫu cũng đã có một số phát triển theo
hƣớng xấp xỉ. Thuật toán MultiHash chỉ làm việc với k = 1 song rất hiệu quả
khi số lƣợng mẫu lớn; MultiPEX là thuật toán hiệu quả nhất khi tỷ lệ k/m nhỏ;
Multi BP xây dựng các NFA của tất cả các mẫu và sử dụng kết quả này làm
bộ lọc, đây là lựa chọn tốt nhất cho tỷ lệ k/m cỡ trung bình. Một vài tiếp cận
xấp xỉ cho bài tốn tìm mẫu mở rộng và tìm biểu thức chính qui có thể kể ra
nhƣ: thuật tốn dựa trên quy hoạch động cho biểu thức chính qui; thuật toán
sử dụng một otomat đa định hữu hạn cho phép có “lỗi”, thuật tốn song song
bit dựa trên phƣơng pháp của BPR, …
1.3. MỘT SỐ THUẬT TỐN TÌM KIẾM VĂN BẢN
Bài tốn tìm kiếm đƣợc phát biểu nhƣ sau: cho văn bản S có chiều dài n
ký tự và chuỗi mẫu P có độ dài m ký tự trên cũng một bảng chữ A, cần tìm ra
các vị trí xuất hiện của P trong văn bản S.
1.3.1. Thuật toán Brute Force
Thuật toán Brute Force thử kiểm tra tất cả các vị trí trên văn bản từ 1
cho đến n-m+1. Sau mỗi lần thử thuật toán Brute Force dịch mẫu sang phải

một ký tự cho đến khi kiểm tra hết văn bản.
Thuật tốn Brute Force khơng cần cơng việc chuẩn bị cũng nhƣ các mảng
phụ cho quá trình tìm kiếm. Độ phức tạp tính tốn của thuật tốn này là O(n*m).


12

Thủ tục cài đặt:
Function IsMatch(X,m,Y,p)
for i =1 : m
for j=1 : p
if X(i+j-1) ~= Y(j)
break;
end
if j==p
fprintf(‘tim thay tai vi tri %d’,i);
end
end

Thuật tốn có các hạn chế sau :
- Vì phải duyệt qua tất cả các ký của chuỗi S và thơng báo các vị
trí nếu xuất hiện chuỗi mẫu P trong văn bản, nên trong trƣờng
hợp chiều dài của văn bản S và mẫu P lớn thuật toán sẽ rất mất
thời gian tìm kiếm.
- Lặp đi lặp lại các so khớp đã thực hiện trƣớc đó làm tăng thời
gian chạy của thuật toán.
1.3.2. Thuật toán Knuth-Morris-Pratt
Thuật toán Knuth-Morris-Pratt là thuật tốn có độ phức tạp tuyến tính
đầu tiên đƣợc phát hiện ra, nó dựa trên thuật tốn brute force với ý tƣởng lợi
dụng lại những thông tin của lần thử trƣớc cho lần sau. Trong thuật tốn brute

force vì chỉ dịch cửa sổ đi một ký tự nên có đến m-1 ký tự của cửa sổ mới là
những ký tự của cửa sổ vừa xét. Trong đó có thể có rất nhiều ký tự đã đƣợc so
sánh giống với mẫu và bây giờ lại nằm trên cửa sổ mới nhƣng đƣợc dịch đi về
vị trí so sánh với mẫu. Việc xử lý những ký tự này có thể đƣợc tính tốn trƣớc
rồi lƣu lại kết quả. Nhờ đó lần thử sau có thể dịch đi đƣợc nhiều hơn một ký
tự, và giảm số ký tự phải so sánh lại.


13

Xét lần thử tại vị trí j, khi đó cửa sổ đang xét bao gồm các ký tự
y[j…j+m-1] giả sử sự khác biệt đầu tiên xảy ra giữa hai ký tự x[i] và y[j+i-1].
Khi đó x[1…i]=y[j…i+j-1]=u và a=x[i]≠y[i+j]=b. Với trƣờng hợp này,
dịch cửa sổ phải thỏa mãn v là phần đầu của xâu x khớp với phần đuôi của
xâu u trên văn bản. Hơn nữa ký tự c ở ngay sau v trên mẫu phải khác với ký
tự a. Trong những đoạn nhƣ v thoả mãn các tính chất trên ta chỉ quan tâm đến
đoạn có độ dài lớn nhất.
Thuật tốn Knuth-Morris-Pratt sử dụng mảng Next[i] để lƣu thể tính
trƣớc với chi phí về thời gian là O(m) (việc tính mảng Next trữ độ dài lớn
nhất của xâu v trong trƣờng hợp xâu u=x[1…i-1]. Mảng này có thực chất là
một bài tốn qui hoạch động một chiều).
Thuật tốn Knuth-Morris-Pratt có chi phí về thời gian là O(m+n) với
nhiều nhất là 2n-1 lần số lần so sánh ký tự trong quá trình tìm kiếm.
Mã giả thuật tốn xây dựng bảng Next:
algorithm kmp_table:
input:
mảng kí tự, W
mảng số nguyên, T
output:
mảng T

define variables:
biến kiểu nguyên, pos ← 2
biến kiểu nguyên, cnd ← 0
let T[0] ← -1, T[1] ← 0
while pos nhỏ hơn độ dài của W, ‘’’do’’’:
(trường hợp một: tiếp tục dãy con)
if W[pos - 1] = W[cnd],
let T[pos] ← cnd + 1, pos ← pos + 1, cnd ← cnd + 1
(trường hợp hai: khơng thỏa mãn, nhưng ta có thể quay ngược trở lại)
otherwise, if cnd > 0, let cnd ← T[cnd]
(trường hợp ba: hết phần tử. Chú ý rằng cnd = 0)
otherwise, let T[pos] ← 0, pos ← pos + 1


14

Mã giả xây dựng thuật tốn KMP :
algorithm kmp_search:
input:
mảng kí tự, S (đoạn văn bản)
mảng kí tự, W (xâu đang tìm)
output:
một biến kiểu ngun (vị trí (bắt đầu từ 0) trên S mà W được tìm thấy)
define variables:
biến nguyên, m ← 0
biến nguyên, i ← 0
mảng nguyên, T
while m + i nhỏ hơn độ dài của sâu S, do:
if W[i] = S[m + i],
let i ← i + 1

if i bằng độ dài W,
return m
otherwise,
if T[i] > -1,
let i ← T[i], m ← m + i - T[i]
else
let i ← 0, m ← m + 1
return độ dài của đoạn văn bản S

1.3.3. Thuật toán Boyer-Moore
Một tiếp cận phổ biến trong các thuật toán so đơn mẫu là duyệt tuần tự
qua tất cả các ký tự trên xâu vào S, mỗi lần một ký tự. Nhƣng trong thuật tốn
BM, có thể có những bƣớc nhẩy xa trên S đƣợc thực hiện, nhờ vậy BM đƣợc
đánh giá là thuật toán nhanh nhất về thực hành, đây là lựa chọn hiệu quả cho
những ứng dụng thơng thƣờng nhƣ các trình soạn thảo văn bản.
Ý tƣởng cơ bản của thuật toán là sử dụng một “Cửa sổ trƣợt” nhƣ sau:
“Cửa sổ trƣợt” thực ra là một khúc độ dài m trên xâu vào S (m là độ dài của
mẫu P) đƣợc đối sánh với mẫu tại một thời điểm nào đó. Mỗi lần đối sánh
mẫu P với một cửa sổ trên S bằng cách so sánh từng ký tự từ phải sang trái.
Khi gặp ký tự không khớp, cửa sổ trƣợt sang phải qua một đoạn trên S (tƣơng
ứng với việc dịch mẫu P sang phải). Trƣờng hợp tốt nhất khi sự không khớp


15

xảy ra tại vị trí Pm và ký tự khơng khớp là Sk lại không phải là một ký tự
trong mẫu P, lúc đó có thể an tồn trƣợt cửa sổ sang phải qua m vị trí trên S
và bắt đầu quá trình tìm kiếm mới bởi việc so sánh Pm và Sk+m.
Giả sử tại một thời điểm đang xét cửa sổ Sk-m+1 S k-m+2 .... Sk và bắt đầu
so sánh Pm với Sk.

(1) Giả sử Pm ≠ Sk có hai khả năng:
a) Nếu vị trí xuất hiện phải nhất của ký tự Sk trong P là m-g, ta
có thể dịch mẫu P sang phải g vị trí sao cho Pm-g dóng thẳng với Sk rồi
bắt đầu lại q trình đối sánh bởi phép so sánh Pm và Sk g
b) Nếu ký tự Sk khơng có mặt trong P, ta có thể dịch mẫu P sang
phải m vị trí. Đây là bƣớc dịch chuyển xa nhất có thể mà vẫn khơng bỏ
sót sự xuất hiện nào của mẫu.
(2) Giả sử m-i ký tự cuối của mẫu P đã khớp với m-i ký tự cuối của
S(k)Nếu i=0, ta đã tìm đƣợc một xuất hiện của mẫu P. Ngƣợc lại, nếu i > 0 và
Pi ≠ Sk-m+i, xét hai khả năng:
a) Nếu vị trí xuất hiện trái nhất của ký tự Sk -m+i trong P là i - g,
khi đó mẫu P đƣợc dịch sang phải g vị trí sao cho Pi-g dóng thẳng với
Sk-m+i và sẽ bắt đầu q trình đối sánh mới, bắt đầu từ Pm so với Sk+g.
Nếu Pi-g nằm bên phải của Pi (khi g < 0) thì mẫu P chỉ dịch sang phải 1
vị trí.
b) Giả sử sufi(P) là một xâu con của Pi+1-g Pi+2-g....Pm-g và Pi-g ≠ Pi
(nếu có nhiều xuất hiện nhƣ vậy của sufi(P) thì chọn vị trí phải nhất).
Khi đó sẽ dịch mẫu P sang phải một đoạn dài hơn so với trƣờng hợp
(2a) sao cho khúc Pi+1-g Pi+2-g .... Pm-g dóng thẳng với khúc Sk-m+i+1
Sk-m+i+2 ... Sk và bắt đầu quá trình đối sánh mới từ Pm so với Sk+g.


16

Nhƣ vậy, khi Pi ≠ Sj, mẫu P sẽ dịch sang phải đi một số vị trí. Thuật
tốn sử dụng hai bảng LL và SL để tính tốn bƣớc địch chuyển này.Bảng LL
giải quyết trƣờng hợp 1 và 2a, bảng SL giải quyết trƣờng hợp 2b
Mã giả tính Bảng LL nhƣ sau :
Compute_LL(P[1,2,…,m]):
Prev[1,2,…,m]←đảo ngược xâu (P[1,2,…,m])

Z[2,3,…,m]←tiền tố dài nhất của P[i,i+1,m] khớp với một tiền tố của
P[1,2,…,m]
for i←1 to m−1
Z[i]←Zrev[m−i+1]
LL[1,2,…,m−1]←[0,0,…,0]
for j←1to m−1
i←m−Z[j]+1
LL[i]←j
return LL[1,2,…,m−1]

Mã giả tính Bảng SL nhƣ sau :
ComputeSL(P[1,2,…,m]):
j←0
for i≥1 to m−1
if Z[i]=i
SL[m−i+1]←iSL[m−i+1]←i
j←ij←i
else
SL[m−i+1]←jSL[m−i+1]←j
return SL[1,…,m]

Mã giả của thuật toán Boyer-Moore :
BoyerMoore(T[1,2,…,n],P[1,2,…,m]):
R[1,2,…,28]← BadCharBackup(P[1,2,…,m]) lưu ký tự không khớp
LL[1,2,…,m]← ComputeLL(P[1,2,…,m])
SL[1,2,…,m]← ComputeSL(P[1,2,…,m])
i←1
while i≤n−m+1
skip←0
j←m

while j≥1 and skip=0
if T[i+j−1]≠P[j]
p←index of T[i+j−1]


×