1. Trang chủ
  2. » Luận Văn - Báo Cáo

Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore

54 936 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 54
Dung lượng 733,88 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

- Tìm kiếm trên đồ thị: Là thuật toán giải quyết các bài toán về lý thuyết - Tìm chuỗi: So sánh một hoặc nhiều chuỗi mẫu với văn bản để tìm vị trí số lần xuất hiện cửa chuỗi mẫu đó trong

Trang 1

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2 KHOA CÔNG NGHỆ THÔNG TIN

*************

NGU ỄN THỊ NGỌC ANH

MỘT SỐ THUẬT TOÁN TÌM CHUỖI

VÀ XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA

THUẬT TOÁN BOYER - MOORE

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

C u n n n K o ọ m t n

HÀ NỘI –2015

Trang 2

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2 KHOA CÔNG NGHỆ THÔNG TIN

*************

NGUYỄN THỊ NGỌC ANH

MỘT SỐ THUẬT TOÁN TÌM CHUỖI

VÀ XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA

THUẬT TOÁN BOYER - MOORE

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Trang 3

LỜI CẢM ƠN

Để hoàn thành được khóa luận, ngoài sự nghiên cứu và cố gắng của bản thân, em xin gửi lời cảm ơn tới TS Trịnh Đình Vinh giáo viên trực tiếp hướng dẫn, tận tình chỉ bảo và định hướng cho em trong suốt quá trình thực hiện khóa luận

Em xin gửi lời cảm ơn chân thành cảm ơn tất cả các thầy, cô giáo trường Đại học Sư phạm Hà Nội 2 nói chung và các thầy, cô giáo khoa Công nghệ thông tin nói riêng đã giảng dạy và dìu dắt em trong trong suốt quá trình học tập tại trường

Cuối cùng, em xin gửi lời cảm ơn tới gia đình, bạn bè và những người

đã luôn ở bên cổ vũ tinh thần, tạo điều kiện thuận lợi cho em để em có thể học tập tốt và hoàn thiện khóa luận

Với điều kiện thời gian nghiên cứu và vốn kiến thức của bản thân em còn hạn chế nên chương trình không tránh khỏi những thiếu sót Em rất mong nhận được sự chỉ bảo quý báu của quý thầy, cô giáo và bạn bè để chương trình của em được hoàn thiện hơn

Em xin chân thành cảm ơn!

Hà Nội, ngày 10 tháng 05 năm 2015

Sinh viên thực hiện

Nguyễn Thị Ngọc Anh

Trang 4

LỜI CAM ĐOAN

Tên em là: Nguyễn Thị Ngọc Anh

Sinh viên lớp: K37A – Tin học, khoa Công nghệ Thông tin, trường Đại học Sư phạm Hà Nội 2

Em xin cam đoan:

1 Nội dung đề tài: “Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán Boyer – Moore” là nghiên cứu của riêng

em

2 Kết quả nghiên cứu của em không trùng với bất cứ một kết quả nào của những tác giả khác

Nếu sai em xin hoàn toàn chịu trách nhiệm

Hà Nội, ngày 10 tháng 05 năm 2015

Sinh viên thực hiện

Nguyễn Thị Ngọc Anh

Trang 5

MỤC LỤC

MỞ ĐẦU 1

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 4

1.1 Bài toán tìm kiếm và hướng giải quyết 4

1.1.1 Bài toán tìm kiếm 4

1.1.2 Hướng giải quyết 5

1.2 So khớp chuỗi 5

1.2.1 Khái niệm 5

1.2.1.1 Chuỗi 5

1.2.1.2.So khớp chuỗi 6

1.2.2 Lịch sử phát triển 8

1.2.3 Các bước xử lý 8

1.2.4 Các cách tiếp cận 8

1.2.5 Các dạng so khớp chuỗi 9

1.2.6 Ứng dụng 16

CHƯƠNG 2: MỘT SỐ THUẬT TOÁN TÌM CHUỖI 17

2.1 Thuật toán so khớp chuỗi 17

2.1.1 Phát biểu bài toán 17

2.1.2 Thuật toán so khớp chuỗi thô 17

2.2 Thuật toán so khớp chuỗi KNUTH – MORRIS - PRATT (KMP) 20

2.2.1 Hàm tiền tố  20

2.2.2 Thuật toán KMP 22

2.3 Thuật toán so khớp chuỗi BOYER-MOORE (BM) 27

2.3.1 Ý tưởng thuật toán 27

2.3.2 Mô tả thuật toán 28

2.3.3 Ví dụ về thuật toán Boyer-Moore 30

2.3.4 Hàm tìm vị trí xuất hiện cuối của một ký tự - Last 31

2.3.5 Ví dụ cụ thể vai trò của hàm Last trong thuật toán Boyer-Moore 32 2.3.6 Thuật toán Boyer-Moore viết bằng ngôn ngữ JAVA 32

2.3.7 Phân tích thuật toán 34

Trang 6

2.4.Thuật toán so khớp chuỗi FRANEK – JENNINGS – SMYTH (FJS) 35

2.4.1 Phát biểu bài toán 35

2.4.2 Thuật toán FJS 35

2.4.3 Tính toán tiền xử lý BM và KMP 37

2.5 So sánh các thuật toán so khớp chuỗi 40

CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH DEMO 42

3.1 Phát biểu bài toán 42

3.2 Thuật toán Boyer Moore cải tiến bằng bảng giá trị dịch chuyển hai chiều 42

3.3 Kết quả thực nghiệm 45

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 47

TÀI LIỆU THAM KHẢO 48

Trang 7

Dữ liệu trong máy tính được lưu trữ dưới nhiều dạng khác nhau trong

đó dữ liệu dạng chuỗi là một trong những cách phổ biến nhất Trên chuỗi các đơn vị dữ liệu không có ý nghĩa quan trọng bằng cách sắp xếp của chúng Có thể thấy các dạng khác nhau của mỗi chuỗi như ở các file dữ liệu, các gói tin, trên biểu diễn của các gen hay chính văn bản chúng ta đang đọc Để tìm kiếm thông tin hữu ích nhiều giải pháp, đề xuất đã được áp dụng, bao gồm các giải pháp dựa trên phần cứng và phần mềm Tuy nhiên, hầu hết các hệ thống tìm kiếm thông tin hiện còn gặp phải nhiều vấn đề về hiệu năng do chúng phải phân tích, xử lý một lượng rất lớn các chuỗi dữ liệu Hơn nữa việc phân tích, tìm kiếm, so khớp chuỗi đòi hỏi chi phí tính toán và thời gian xử lý lớn Khi lượng dữ liệu lớn, nhiều thông tin có thể bị bỏ qua không được phân tích, không đáp ứng được nhu cầu của người sử dụng

Để tìm kiếm thông tin một cách chính xác mà không mất quá nhiều thời gian cần phải đi sâu nghiên cứu về các thuật toán so khớp chuỗi có hiệu năng cao Một trong những thuật toán so khớp chuỗi có hiệu năng cao đó là thuật toán Boyer – Moore

Chính vì các lý do trên nên em đã chọn đề tài “Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán Boyer – Moore” làm khóa luận tốt nghiệp của mình

Trang 8

- Tìm hiểu một số thuật toán so khớp chuỗi

- Xây dựng chương trình tìm kiếm văn bản mã unicode dựa trên thuật toán Boyer – Moor cải tiến bằng bảng giá trị dịch chuyển 2 chiều Cài đặt thử nghiệm và đánh giá kết quả

3 Đối tượng và phạm vi nghiên cứu

Khóa luận đi sâu nghiên cứu một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán Boyer – Moore cải tiến để tìm kiếm chuỗi

mã Unicode

4 Giả thuyết khoa học

Tìm hiểu, nghiên cứu một số thuật toán tìm chuỗi sẽ giúp người lập trình hiểu rõ hơn về công tác tìm kiếm Từ đó, việc xây dựng các chương trình tìm kiếm văn bản, tìm kiếm thông tin và các chương trình tìm kiếm mẫu hoặc vết tấn công trong lĩnh vực an toàn mạng,… trở nên dễ dàng hơn

Chương trình được xây dựng nếu đưa vào thực tiễn sẽ trợ giúp đắc lực cho người sử dụng trong việc tìm kiếm thông tin một cách nhanh chóng, chính xác mà không mất quá nhiều thời gian

5 P ươn p p n i n ứu

a P ươn p p nghiên cứu lý luận

Nghiên cứu qua việc đọc sách, báo và các tài liệu liên quan nhằm xây dựng cơ sở lý thuyết của đề tài và biện pháp cần thiết để giải quyết các vấn đề của đề tài

Trang 9

7 Cấu trúc khóa luận

Ngoài phần mở đầu, kết luận và hướng phát triển, tài liệu tham khảo thì cấu trúc khóa luận bao gồm các chương sau:

Chương 1: Cơ sở lý thuyết

Chương 2: Một số thuật toán tìm chuỗi

Chương 3: Xây dựng chương trình demo

Trang 10

xử lý một lượng rất lớn các chuỗi dữ liệu Vậy làm thế nào để một ngân hàng nắm giữ tất cả các thông tin của rất nhiều tài khoản khách hàng và cần tìm kiếm để kiểm tra các biến động, một hãng bảo hiểm hay một hệ thống trợ giúp bán vé xe, vé máy bay,… một cách chính xác, cần phải tìm hiểu sâu hơn

về bài toán tìm kiếm

Tìm kiếm là thao tác nền móng cho rất nhiều tác vụ tính toán Tìm kiếm nghĩa là tìm một hay nhiều mẩu thông tin đã được lưu trữ Dạng phổ biến nhất của bài toán tìm kiếm là: Cho trước nguồn tìm kiếm là một tập D các văn bản (hoặc là cơ sở dữ liệu văn bản, hoặc là tập các văn bản trên Internet) Cho một chuỗi mẫu q (thường là một từ, một chuỗi ký tự ngắn), hãy tìm tất cả các văn bản thuộc D mà có chứa q Trong nhiều trường hợp (chẳng hạn, tìm kiếm thông qua máy tìm kiếm) thì q còn được gọi là "truy vấn" và bài toán còn có tên gọi là "tìm kiếm theo truy vấn" Để tìm được các văn bản

có chứa chuỗi truy vấn q, hệ thống tìm kiếm cần phải kiểm tra chuỗi truy vấn

q có là một chuỗi con của các văn bản thuộc tập D hay không (so khớp) và đưa ra các văn bản đáp ứng Trong nhiều trường hợp, bài toán còn đòi hỏi tìm tất cả các vị trí của các chuỗi con trong văn bản trùng với q Đồng thời, điều kiện tìm kiếm có thể được làm "xấp xỉ" theo nghĩa chuỗi kết quả có thể không cần chứa q (không cần có một chuỗi con của văn bản trùng một cách hoàn toàn chính xác với q) mà chỉ cần "liên quan" tới q (có chuỗi con trong văn bản

Trang 11

- Tìm kiếm trên đồ thị: Là thuật toán giải quyết các bài toán về lý thuyết

- Tìm chuỗi: So sánh một hoặc nhiều chuỗi mẫu với văn bản để tìm vị trí

số lần xuất hiện cửa chuỗi mẫu đó trong văn bản

Tùy thuộc vào mục đích tìm kiếm khác nhau mà dựa trên các thuật toán, thuật giải khác nhau để giải quyết bài toán Từ đó xây dựng chương trình cài đặt cụ thể

Trang 12

+ Chuỗi con S[1 3] = “IET”

+ Tất cả các chuỗi tiền tố của S là:“VIETNAM”,“VIETNA”, “VIETN”,

“VIET”, “VIE”, “VI”, “V”

+ Tất cả các chuỗi hậu tố của S là:“VIETNAM”,

“IETNAM”,“ETNAM”,“TNAM”, “NAM”, “AM”, “M”

1.2.1.2 So k ớp uỗi

So khớp chuỗi là một kỹ thuật đóng vai trò nền tảng trong kỹ thuật xử

lý văn bản Hầu như tất cả các trình soạn thảo và xử lý văn bản đều cần phải

có cơ chế để so khớp các chuỗi trong tài liệu hiện tại Việc tích hợp các thuật toán so khớp chuỗi là một trong những khâu cơ bản được sử dụng trong việc tiển khai phần mềm và được thực hiện trên hầu hết các hệ điều hành

Mặc dù hiện nay dữ liệu được lưu trữ dưới nhiều hình thức khác nhau, nhưng văn bản vẫn là hình thức chủ yếu để lưu trữ và trao đổi thông tin Trong nhiều lĩnh vực như so khớp, trích chọn thông tin, tin sinh học,…một lượng lớn dữ liệu thường được lưu trữ trong các tập tin tuyến tính Hơn nữa khối lượng dữ liệu thu thập được tăng lên rất nhanh nên đòi hỏi phải có các thuật toán xử lý và so khớp dữ liệu văn bản hiệu quả

So khớp chuỗi là việc so sánh một hoặc nhiều chuỗi (thường được gọi

là mãu hoặc Pattern) với văn bản để tìm vị trí và số lần xuất hiện của chuỗi đó trong văn bản

Có thể hình thức hóa bài toán so khớp chuỗi như sau: Coi văn bản là một mảng S[1 n] có chiều dài n và khuôn mẫu là một mảng P[1 m] có chiều

Trang 13

∑, ∑ là tập hữu hạn các mẫu tự trong bảng chữ cái

P xuất hiện với độ dịch s (bắt đầu tại s+1):

P[1] = S[s+1], P[2] = S[s+2],… , P[m] = T[s+m]

Do đó, s là giá trị dịch, ngƣợc lại là không có giá trị dịch

Ví dụ:

P = “abab”, S = “abcabababbc”, P xuất hiện tại s = 3 và s = 5

Theo tính chính xác của phép so khớp, có 2 loại so khớp chuỗi:

+ So khớp chuỗi chính xác (Exact string matching):

Cho một chuỗi văn bản T có độ dài n, và một chuỗi mẫu P có độ dài m Bài toán so khớp chuỗi chính xác chính là việc tìm ra sự xuất hiện chính xác

của P trong S.Ví dụ: S = “DABCDEADBACABAD” -P = “AB”

+ So khớp chuỗi gần đúng (Approximate string matching):

Tìm một chuỗi phù hợp với mẫu gần đúng (chứ không phải là chính xác) mà sự so khớp là tốt nhất với mẫu Một vài sai khác có thể chấp nhận đƣợc

Hay đƣa một văn bản S, một mẫu P, và một hàm khoảng cách D Tìm tất cả các chuỗi con s của S sao cho D(s,P) < k

Sự sai khác cho phép đƣợc ở đây có thể là:

- Thêm (ran rain)

- Bớt (brain rain)

- Thay thế (brain train)

Ví dụ: S = “brainaaranastraindshanb” -P = “ran”

Trang 14

8

1.2.2 Lị sử p t triển

Trong năm 1970, S.A Cook đã chứng minh một kết quả lý thuyết giúp suy ra sự tồn tại của một thuật toán để giải bài toán so khớp mẫu có thời gian thực hiện tỉ lệ với (m+n) trong trường hợp xấu nhất

D.E.Knuth và V.R.Pratt đã kiên trì theo đuổi kiến trúc mà Cook đã dùng để chứng minh cho định lý của ông và nhận được một thuật toán tương đối đơn giản Đồng thời J.H.Morris cũng khám phá ra thuật toán này

Knuth - Morris - Pratt đã không giới thiệu thuật này của họ cho đến năm 1976, và trong thời gian này R.S.Boyer và J.S.Moore đã khám phá ra một thuật toán nhanh hơn nhiều

Tháng 6 – 1975, Alfred V Aho và Margret J Corasick đã giới thiệu thuật toán so khớp chuỗi đa mẫu Aho Corasick trong tài liệu

“Communications of the ACM 18”

Năm 1980, Nigel Horspool đã giới thiệu thuật toán so khớp chuỗi tương tự thuật toán KMP, nhưng đảo ngược thứ tự so sánh trong tài liệu Software -Practice & Experience, 10(6):501-506

Tháng 3 - 1987, R.M.Karp và M.O.Rabin đã giới thiệu thuật toán đơn giản gần như thuật toán Brute Force có thời gian thực hiện tỉ lệ với m+n trong tài liệu IBM J Res develop – vol 31 no.2

Trang 15

Thuật toán bit song song: Là các thuật toán khai thác bản chất song song của dữ liệu bit để thực hiện các thao tác cùng lúc Các thuật toán điển hình bao gồm Shift – Or,…

Thuật toán băm: Là các thuật toán sử dụng kĩ thuật băm Thuật toán điển hình là thuật toán Karp – RaBin

Độ phức tạp tính toán: Trên thực tế có nhiều loại kí tự khác nhau như: Binary, DNA, Alphabet, Numeric,… và mỗi loại kí tự có độ phức tạp khác nhau Độ phức tạp tính toán tỉ lệ thuận với chiều dài của mẫu, chiều dài của văn bản và độ lớn của tập các ký tự

Cho xâu mẫu P độ dài m, P = P1P2…Pm, và xâu mẫu S độ 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 Có thể nói x là khúc đầu (prefix) của xâu xy, là khúc cuối (suffix) của xâu yx và là khúc con hay xâu con (factor) của xâu yxz

Trang 16

10

Thuật toán “thô” nhất và đã được sử dụng rộng rãi là Brute – Force Phương pháp này đơn giản chỉ là lần lượt bắt đầu từ vị trí trong S để so khớp với mẫu P Mặc dù có tốc độ chậm, thời gian xấu nhất tỉ lệ với tích m.n, song 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ự luôn tỉ lệ với m+n Ngoà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

Cho đến nay, rất nhiều thuật toán so đơn mẫu được đưa ra, trong đó kinh điển nhất là KMP

Có thể xem như có ba tiếp cận chung cho các thuật toán so mẫu, phụ thuộc vào cách duyệt tìm mẫu trong văn bản Việc đánh giá tốc độ của các thuật toán dựa trên kích cỡ của mẫu P và bảng chữ A

Tiếp cận thứ nhất, lần lượt từng ký tự của văn bản S được đọc và tại mỗi vị trí, sau khi so khớp với một kí tự của mẫu sẽ cập nhật sự thay đổi để nhận ra một khả năng xuất hiện mẫu Hai thuật toán điển hình theo tiếp cận này là KMP và Shift – Or

Tiếp cận thứ hai sử dụng một “cửa sổ trượt” trên xâu S và so khớp 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 toá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 hóa của nó là Horspool

Tiếp cận thứ ba mới xuất hiện gần đây 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, tuy nhiên tại mỗi thời điểm sẽ tìm khúc cuối dài nhất của cửa sổ mà là 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

b So khớp đ mẫu

Cho một mẫu P gồm tập các từ khóa {w1, w2,…,wk} 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ừ khóa wi trong S

Trang 17

11

Một cách đơn giản để tìm nhiều từ khóa trong một xâu đích là sử dụng thuật toán so đơn mẫu nhanh nhất đối với mỗi từ khóa Rõ ràng phương pháp này không hiệu quả khi số lượng từ khoá 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 Hai điển hình theo tiếp cận thứ nhất là thuật toán nổi tiếng Aho – Corasisk, có tốc độ cải thiện đáng kể khi số từ khóa nhiều và thuật toán Multiple Shift – And, được sử dụng hiệu quả khi tổng độ dài của mẫu P rất nhỏ

Theo tiếp cận thứ hai có thuật toán nổi tiếng Commentz – Walter, 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 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 so khớp hậu tố (suffix seach 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

c So mẫu mở rộng

Trong nhiều ứng dụng, so khớp mẫu không chỉ đơn giản là các 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ì thứ tự nào trong lớp thứ i cũng có thể được xem là kí tự thứ i của mẫu

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 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

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ự tùy chọn có thể có hoặc không có, còn các kí

tự lặp có thể lặp một hoặc nhiều lần

Trang 18

12

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 tố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ả xuất hiện của mẫu

d So khớp chính xác

Tìm một (hoặc nhiều) vị trí xuất hiện chính xác của một xâu kí tự P[1 m] (mẫu so khớp – pattern) ở trong một xâu kí tự lớn hay trong một đoạn văn bản nào đĩ T[1 n], m ≤ n Ví dụ: Cĩ thể tìm thấy vị trí của xâu “abc” trong xâu “abcababc” là 1 và 6

Phát biểu hình thức bài tốn như sau: Gọi ∑ là một tập hữu hạn (finite set) các kí tự Thơng thường, các kí tự của mẫu so khớp và các văn bản gốc đều nằm trong ∑ Tập ∑ tùy từng ứng dụng cụ thể cĩ thể là bảng chữ cái tiếng Anh từ A đến Z thơng thường, cũng cĩ thể là một tập nhị phân chỉ gồm hai phần tử 0 và (∑ = {0,1}) hay cĩ thể là tập các kí tự DNA trong sinh học (∑ = {A, C, G, T})

Phương pháp đơn giản nhất là lần lượt xét từng vị trí I trong xâu ký tự gốc từ 1 đến n–m+1, so sánh T[i (i+m-1)] với P[1 m] bằng cách xét từng cặp

ký tự một và đưa ra kết quả so khớp Ngồi ra cịn gọi phương pháp này là cách tiếp cận ngây thơ (Nạve string search)

Dưới đây là thủ tục đặc tả của phương pháp này:

Nạve string search

Trang 19

13

return false // không có vị trí nào thỏa mãn

Độ phức tạp trung bình của thuật toán là O(n + m) trong trường hợp

xấu nhất độ phức tạp là O(n.m), ví dụ như so khớp mẫu “aaaab” trong xâu

“aaaaaaaaab”

e So khớp xấp xỉ

Phát biểu bài toán

So mẫu xấp xỉ là bài toán tìm sự xuất hiện của một mẫu trong văn bản,

trong đó sự “khớp” giữa mẫu và xuất hiện của nó có thể chấp nhận k “lỗi” (k

là một giới hạn cho trước) Có thể kể ra một vài kiểu “lỗi”, như 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 và những lỗi truyền dữ

liệu trong các hệ thống xử lý tín hiệu,… Vì trong các hệ thống tin học khó có

thể tránh được các “lỗi” nên vấn đề so khớp xấp xỉ càng trở nên quan trọng

Đặc biệt, khi sử dụng các hệ thống trích rút thông tin, người dùng ngày

nay còn đòi hỏi cả những kết quả gần giống hoặc có được kết quả phù hợp trả

về nếu có sự sai sót trong mẫu hay văn bản Trong trường hợp này “lỗi” có

thể do nhiều nguyên nhân khác nhau, có thể kể ra như sau:

- Câu truy vấn sai chính tả, xâu so khớp không đúng cú pháp so với văn

bản

- Lỗi in ấn, sai lỗi chính tả, sử dụng dấu chấm sai,…

- Do sự biến đổi hình thái từ trong một số ngôn ngữ

- Dữ liệu đưa vào cơ sở dữ liệu không chính xác, thường xảy ra với tên

người, địa chỉ…

- Thông tin người tìm đưa vào không chính xác, chỉ “đại loại”

Vì vậy, một vấn đề đặt ra cho các hệ thống trích rút thông tin ngày nay

là đáp ứng được nhu cầu so khớp “mềm dẻo” này của người sử dụng Bài toán

so mẫu xấp xỉ tổng quát được phát biểu như sau: Cho văn bản T độ dài n và

Trang 20

14

xâu mẫu P độ dài m trên cùng một bảng chữ A Tìm các vị trí trong văn bản khớp với mẫu, cho phép nhiều nhất k lỗi

Thuật toán so khớp xấp xỉ hiện nay chia thành 4 loại:

- 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

- Các thuật toán sử dụng otomat so khớp: 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 Đâ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)

- Các thuật toán sử dụng cơ chế song song bit: 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 Nói chung 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 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

- Các thuật toán sử dụng cơ chế lọc: Cố gắng thu hẹp không gian so khớp của bài toá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 toán hiệu quả nhất theo tiếp cận này là PEX và ABNDM Trong PEX, mẫu được chia thành k + 1 đoạn và sắp xếp để

so khớp đ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 toán BNDM, trong đó tái tạo otomat đa định hữu hạn cho so khớp xấp xỉ Nói chung, các thuật toán sử dụng cơ chế lọc làm việc tốt

Trang 21

15

hơn tỷ lệ k/m (với m là độ dài chuỗi mẫu ban đầu) 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 toán so khớp đ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ỏ; MultiBP 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 toá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 toá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 toán song song bit dựa trên phương pháp của BPR, …

Độ tươn tự giữa hai xâu

Để so khớp xấp xỉ, cần sử dụng một hàm khoảng cách đo độ tương tự giữa hai xâu Tương tự ở đây được hiểu là giữa hai xâu ký tự có một vài sai khác ở những lỗi có thể nhận ra bằng mắt thường, không xét về khía cạnh ngữ nghĩa (OCR- optical character recognition errors), chẳng hạn “Việt Nam” và

“Việt Nan” hay “Việtt Nan”,… Có thể kể ra một số kỹ thuật phổ biến đo độ tương tự giữa hai xâu: Xâu con chung dài nhất, dãy con chung dài nhất, khoảng cách soạn thảo Nhiều ứng dụng sử dụng các biến thể của các hàm khoảng cách này

Khoảng cách soạn thảo: Đối với hai xâu x, y khoảng cách soạn thảo Edit distance(x,y) là số nhỏ nhất các phép sửa đổi về mặt soạn thảo để biến đổi xâu x thành xâu y (việc tính toán khá phức tạp) Khoảng cách soạn thảo càng lớn thì sự khác nhau giữa hai xâu càng nhiều (hay độ tương tự càng nhỏ) và ngược lại Khoảng cách soạn thảo thường để kiểm tra chính tả hay tiếng nói Tuỳ thuộc vào quy ước về các phép sửa đổi mà nhận được các loại khoảng cách soạn thảo khác nhau, chẳng hạn như:

- Khoảng cách Hamming: Phép sửa đổi chỉ là phép thay thế ký tự

Trang 22

16

- Khoảng cách Levenshtein: Phép sửa đổi bao gồm chèn, xoá, và thay thế

ký tự

- Khoảng cách Damerau: Phép sửa đổi bao gồm chèn, xoá, thay thế và

hoán vị liền kề của các ký tự

Xâu con chung dài nhất (hay khúc con chung dài nhất): Một xâu w là

xâu con hay khúc con (substring or factor) của xâu x nếu x = uwv (u, v có thể rỗng) Xâu w là khúc con chung của hai xâu x, y nếu w đồng thời là khúc con

của x và y Khúc con chung dài nhất của hai xâu x và y, ký hiệu LCF(x,y), là

một khúc con có độ dài lớn nhất

Dãy con chung dài nhất: Một dãy con của xâu x là một dãy các ký tự

có đƣợc bằng cách xoá đi không, một hoặc nhiều ký tự từ x Dãy con chung

của hai xâu x, y là một dãy con của cả hai xâu x và y Dãy con chung của x và

y có độ dài lớn nhất đƣợc gọi là dãy con chung dài nhất LCS(x,y) Có thể

dùng độ dài dãy con chung của hai xâu x, y để tính khoảng cách Levenstein

giữa x và y theo công thức:

LevDistance (x,y) = m + n - 2 length(LCS( x,y))

1.2.6 Ứn dụn

So khớp chuỗi là một trong những bài toán cơ bản và “tự nhiên” nhất

của ngành Tin học So khớp chuỗi đƣợc sử dụng rộng rãi trong nhiều ứng

dụng và lĩnh vực khác nhau nhƣ:

- Chức năng search trong các trình soạn thảo văn bản và web browser

Các công cụ tìm kiếm nhƣ: Google Search, Yahoo Search,…

- Sinh học phân tử nhƣ trong tìm kiếm các mẫu trong DNA, protein,…

- Tìm kiếm cơ sở dữ liệu nhƣ trong GenBank

- Trong nhiễu kênh với cho phép chấp nhận đƣợc

- Trong tìm kiếm mẫu hoặc vết của tấn công, đột nhập và các phần mềm

độc hại trong lĩnh vực an toàn mạng và an toàn thông tin…

Trang 23

17

CHƯƠNG 2 MỘT SỐ THUẬT TOÁN TÌM CHUỖI

2.1 T uật to n so k ớp uỗi

2.1.1 P t biểu b i to n

Giả sử chuỗi S là một mảng có độ dài là n (S[1 n]) và một chuỗi mẫu P

có độ dài là m (P[1 m]) Các Phần tử của S và P là các ký tự trong tập hữu hạn alphabet  Ví dụ:  = {0,1} hoặc  = {a,b,c ,z} Mảng ký tự S và P được gọi là chuỗi ký tự

Khi đó bài toán so khớp chuỗi được phát biểu như sau: Cho một chuỗi ban đầu S và một chuỗi mẫu P So khớp chuỗi chính là việc tìm chuỗi mẫu P trong chuỗi ban đầu S Nếu chuỗi mẫu P được tìm thấy trong chuỗi ban đầu S hãy chỉ ra vị trí trong S mà tại đó chuỗi mẫu P được tìm thấy

Hay: Có thể nói rằng chuỗi mẫu P được tìm thấy với s lần dịch chuyển

trong chuỗi ban đầu S Điều này tương đương với việc chuỗi mẫu P được tìm

thấy bắt đầu từ vị trí s +1 trong chuỗi ban đầu S nếu thỏa mãn điều kiện 0  s 

n - m và S(s +1, , s + m) = P(1 m) tức là S(s + j) = P(j) với 1 j  m

Nếu P được tìm thấy trong S thì s được gọi là giá trị dịch chuyển Còn trong trường hợp ngược lại (tức là không tìm thấy mẫu P trong S) s được gọi

là giá trị dịch chuyển không hợp lệ

Tóm lại: Bài toán so khớp chuỗi là bài toán tìm giá trị dịch chuyển s sao

cho sau số lần dịch chuyển đó tìm được chuỗi mẫu P trong chuỗi ban đầu S

Trang 24

18

for ( int s = 0, int p = s; s < n - m; s++, p++)

if ( P[p] = S[s]) print (“Mau duoc tim thay sau %d lan dich chuyen”, s);

b M tả t uật to n

Thuật toán so khớp chuỗi thô thực hiện như sau: Tiến hành so sánh phần tử thứ nhất của chuỗi mẫu P với phần tử thứ nhất của chuỗi ban đầu S Nếu hai phần tử này giống nhau, tiến hành so sánh tiếp phần tử thứ 2 Cứ như vậy cho đến khi tìm được chuỗi P trong S hoặc phát hiện ra vị trí mà tại đó phần tử của S và P khác nhau

Trong trường hợp phát hiện ra vị trí mà tại đó phần tử của S và P khác nhau cần tiến hành dịch phải chuỗi P đi một phần tử so với chuỗi S Lặp lại thao tác so sánh như trên cho đến khi đạt được kết quả

V dụ min ọ o t uật to n

Giả sử chuỗi S = abcabaabcabac

P = abaa Tiến hành thực hiện thuật toán so khớp chuỗi (S, P):

Bước 1: So sánh phần tử S(1) và P(1)

S: a b c a b a a b c a b a c P: a b a a

Bước 2: Sau khi thấy hai phần tử S(1) = P(1) tiến hành so sánh tiếp phần tử S(2) và P(2)

S: a b c a b a a b c a b a c P: a b a a

Trang 25

19

Bước 3: So sánh phần tử S(3) và P(3)

S: a b c a b a a b c a b a c P: a b a a

Tại vị trí này hai phần tử S(3) và P(3) không giống nhau, tiến hành dịch

P sang phải một vị trí và lặp lại các bước so sánh

Bước 4: Dịch P sang phải 1 vị trí, so sánh hai phần tử S(1) và P(1)

S: a b c a b a a b c a b a c P: a b a a

Cứ như vậy lặp đi lặp lại các bước của thuật toán so khớp chuỗi thô Sau 3 lần dịch phải chuỗi P thu được kết quả như sau:

Tuy nhiên thuật toán so khớp chuỗi này còn gặp nhược điểm lớn về thời gian thực hiện thuật toán như sau:

- Với n là độ dài của chuỗi ban đầu S, m là độ dài của chuỗi mẫu P thì thời gian so khớp hai chuỗi là O(mn) Đây là một thời gian lớn làm cho thuật toán có tốc độ chậm

- Nguyên nhân của việc chậm này là do việc so sánh các phần tử của chuỗi S được thực hiện lặp đi lặp lại trong những lần so sánh tiếp theo Trong

Trang 26

20

ví dụ đã nêu ở trên việc so sánh hai phần tử ở vị trí tương ứng của hai chuỗi S

và P phát hiện ra vị trí khác nhau đầu tiên sau 3 lần so sánh, tức là S(3) và P(3) khác nhau Theo đúng thuật toán chuỗi mẫu P sẽ dịch sang phải so với chuỗi S một vị trí và việc so sánh lại bắt đầu lại từ đầu Mặc dù trong lần so sánh trước đã biết giá trị S(1) và biết S(1) khác P(0) Đây là việc làm lặp đi lặp lại đối với S(1) trong các lần so sánh tiếp theo, làm tăng thời gian thực hiện thuật toán

Như vậy, thuật toán so khớp chuỗi thô không phải là một thuật toán tối

ưu Vì vậy cần xem xét đến một phương án tối ưu hơn, có thời gian thực hiện thuật toán nhỏ hơn

2.2 T uật to n so k ớp uỗi KNUTH – MORRIS - PRATT (KMP)

Để khắc phục nhược điểm thời gian thực hiện thuật toán lớn, D.E.Knuth và V.R.Pratt đã xây dựng một thuật toán so khớp chuỗi tuyến tính Thời gian thực hiện thuật toán là O(n + m) dựa trên việc tính hàm tiền tố

[1, ,m] được tính toán trên chuỗi mẫu P trong thời gian O(m) Mảng  có thể giúp cho việc tính toán bước dịch chuyển một cách hiệu quả

2.2.1 H m tiền tố

Hàm tiền tố  của một chuỗi mẫu đưa ra cách làm thế nào để chuỗi đó

có thể so khớp dựa vào việc dịch chuyển của chính nó Giá trị của hàm tiền tố này có thể được sử dụng để ngăn ngừa việc kiểm tra những lần dịch chuyển

vô ích của chuỗi mẫu P

Trang 27

- So sánh giá trị của P[k + 1] và P[q] Nếu P[k + 1]  P[q] gán k = (k)

- So sánh tiếp giá trị của P[k + 1] và P[q] (Với k là giá trị vừa tìm được

ở bước trên) Nếu P[k + 1] = P[q] thì gán k = k + 1

- Gán (q): = k

Trả lại giá trị (q)

c V dụ min ọ o t uật to n t n m tiền tố:

Cho một chuỗi mẫu P = ababaca Khi đó m = 7; (1) = 0; k = 0 Tính hàm tiến tố của chuỗi P

Ngày đăng: 23/09/2015, 15:38

HÌNH ẢNH LIÊN QUAN

Bảng 2.1 Giá trị của hàm tiền tố  - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Bảng 2.1 Giá trị của hàm tiền tố  (Trang 28)
Hình 2.1 Kỹ thuật nhảy ký tự - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Hình 2.1 Kỹ thuật nhảy ký tự (Trang 34)
Hình 2.3 Kỹ thuật nhảy ký tự nếu P chứa x ở cuối - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Hình 2.3 Kỹ thuật nhảy ký tự nếu P chứa x ở cuối (Trang 35)
Hình 2.2 Kỹ thuật nhảy ký tự nếu mẫu P chứa x ở đầu - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Hình 2.2 Kỹ thuật nhảy ký tự nếu mẫu P chứa x ở đầu (Trang 35)
Hình 2.5 Ví dụ thuật toán Boyer – Moore - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Hình 2.5 Ví dụ thuật toán Boyer – Moore (Trang 36)
Hình 2.4 Kỹ thuật nhảy ký tự nếu mẫu P không chứa x - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Hình 2.4 Kỹ thuật nhảy ký tự nếu mẫu P không chứa x (Trang 36)
Bảng 2.2 Giá trị của hàm Last(x) - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Bảng 2.2 Giá trị của hàm Last(x) (Trang 37)
Hình 2.6 Ví dụ vai trò của hàm Last trong thuật toán Boyer – Moore  Khi đó giá trị của hàm Last của ví dụ trên là bảng 2.2 - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Hình 2.6 Ví dụ vai trò của hàm Last trong thuật toán Boyer – Moore Khi đó giá trị của hàm Last của ví dụ trên là bảng 2.2 (Trang 38)
Hình 2.7 Tìm kiếm chuỗi trong trường hợp xấu nhất - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Hình 2.7 Tìm kiếm chuỗi trong trường hợp xấu nhất (Trang 41)
Bảng 2.3 Tính toán tiền xử lý BM và KMP - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Bảng 2.3 Tính toán tiền xử lý BM và KMP (Trang 44)
Bảng 2.4 Thực hiện tìm chuỗi p trong x - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Bảng 2.4 Thực hiện tìm chuỗi p trong x (Trang 45)
Bảng 2.5 Sự khác biệt giữa các thuật toán so khớp chuỗi - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Bảng 2.5 Sự khác biệt giữa các thuật toán so khớp chuỗi (Trang 46)
Hình 3.1 Form giao diện chính - Một số thuật toán tìm chuỗi và xây dựng chương trình minh họa thuật toán boyer moore
Hình 3.1 Form giao diện chính (Trang 51)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w