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

Khoá luận tốt nghiệp 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

59 661 4

Đ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 59
Dung lượng 127,77 KB

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

Nội dung

Đồng thòi, điều kiện tìm kiếm có thể được làm "xấpxỉ" 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ỗicon của văn bản trùng một cách hoàn toàn chính xác với q mà c

Trang 1

TRƯỜNG ĐẠI HỌC sư PHẠM HÀ NỘI 2

KHOA CÔNG NGHỆ THÔNG TIN

HÀ NỘI -2015

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

Chuyên ngành: Khoa học máy tính

NGUYỄN THỊ NGỌC ANH

Trang 2

TRƯỜNG ĐẠI HỌC sư PHẠM HÀ NỘI 2

KHOA CÔNG NGHỆ THÔNG TIN

HÀ NỘI -2015

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

Chuyên ngành: Khoa học máy tính

Ngưòi hướng dẫn khoa học TS TRỊNH ĐÌNH VINH

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ảnthân, em xin gửi lòi cảm ơn tới TS Trinh Đình Vinh giáo viên trực tiếp hướngdẫn, tận tình chỉ bảo và định hướng cho em ữong suốt quá trình thực hiện khóaluậ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 ữong ữong suốt quá trình học tậptạ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ậptố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ònhạn chế nên chương trình không ừá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ươngtrì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ố n 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

Trang 6

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

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

MỞ ĐẦU

1 Lý do lựa chọn đề tài

Với sự bùng nổ và phát triển của công nghệ thông tin ữong những năm gần đây, đã mang lại nhiều hiệu quả đối với khoa học cũng như các hoạt động thực tế, sự phát triển mạnh mẽ của công nghệ thông tin đã làm cho khả năng thu

Trang 7

thập và lưu trữ thông tin của các hệ thống thông tin tăng lên một cách nhanhchóng, lượng dữ liệu lưu trữ ữở nên quá nhiều Vì vậy việc xử lý thông tin gặpphải nhiều khó khăn, đặc biệt là công tác tìm kiếm.

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 ữong 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ênbiể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ôngtin hữu ích nhiều giải pháp, đề xuất đã được áp dụng, bao gồm các giải phápdự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ếmthô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, sokhớ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ệulớ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ờigian 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ăngcao Một trong những thuật toán so khớp chuỗi có hiệu năng cao đó là thuậttoá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ìmchuỗi và xây dựng chương trình minh họa thuật toán Boyer - Moore” làm khóaluận tốt nghiệp của mình

Trang 8

2 Mục tiều và nhiệm vụ nghiên cứu

- 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ậttoán Boyer - Moor cải tiến bằng bảng giá trị dịch chuyển 2 chiều Cài đặtthử 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ựngchươ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ìnhhiể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ìmkiế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ếttấ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ẽ ượ giúp đắc lựccho người sử dụng ưong việc tìm kiếm thông tin một cách nhanh chóng, chínhxác mà không mất quá nhiều thời gian

Trang 9

5 Phương pháp nghiên cứu

a Phương phá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

b Phương pháp chuyên gia

Tham khảo ý kiến của các chuyên gia, tìm hiểu những quan điểm, kinhnghiệm của họ để có thể thiết kế chương trình phù hợp vói yêu cầu thực tiễn

c Phương pháp thực nghiệm

Căn cứ vào quan sát thực tiễn, yêu càu của cơ sở, căn cứ vào lý luận đượcnghiên cứu và kết quả đã đạt được để có được sự tương tác giữa người dùng vàchương trình, từ đó yêu cầu thiết kế hiệu quả

6 Ý nghĩa khoa học và thực tiễn

Trang 10

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ấutrú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

CHƯƠNG 1: Cơ SỞ LÝ THUYẾT 1.1 Bài toán tìm kiếm và hướng giải quyết

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

Ngày nay, máy tính được sử dụng ữong mọi lĩnh vực của đời sống, theo

đó kho thông tin trong máy tính tăng trưởng không ngừng Để tìm kiếm thôngtin hữu ích, nhiều giải pháp, đề xuất đã được áp dụng, bao gồm các giải phápdự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ếmthông tin hiện có gặp phải 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 Vậy làm thế nào để một ngân hàng nắmgiữ 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ìmkiế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ếmnghĩa là tìm một hay nhiều mẩu thông tin đã được lưu trữ Dạng phổ biến nhấtcủ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

Trang 11

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ănbả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ôngqua 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ácvă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 Trongnhiề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 controng 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ấpxỉ" 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ỗicon 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ênquan" tói q (có chuỗi con trong văn bản

“xấp xỉ” q) Có thể thấy, các máy tìm kiếm sử dụng cả cơ chế tìm kiếm xấp xỉkhi mà văn bản kết quả tìm kiếm không chứa hoàn toàn chính chuỗi truy vấn

1.1.2 Hướng giải quyết

Để giải quyết bài toán tìm kiếm có nhiều phương pháp, giải thuật đãđược nghiên cứu:

- lìm kiếm trên danh sách: Là giải thuật đơn giản, tìm trong một tập hợpmột phần tử chứa một khóa nào đó

- lìm kiếm trên cây: Là trung tâm của kĩ thuật tìm kiếm, các thuật toán nàytìm kiếm trên cây gồm các nút, cây này có thể là cây tường minh hoặcđược xây dựng dần trong quá trình tìm kiếm

- lì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 đồthị

Trang 12

- lìm kiếm đối kháng: Trong các trò chơi như cờ vua hay cờ tướng, có mộtcây ừò chơi bao gồm tất cả các nước đi có thể của cả hai đấu thủ và cáccấu hình bàn cờ là kết quả của các nước đi đó Ta có thể tìm kiếm trêncây này để có được một chiến lược chơi hiệu quả.

- lì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ể

Giả sử s là một chuỗi ký tự có kích thước m Một chuỗi con S[i j] của chuỗi s

là phân đoạn chuỗi có chỉ số giữa i và j Một chuỗi tiền tố của chuỗi s

là chuỗi con S[0 i] Một chuỗi hậu tố của chuỗi s là chuỗi con S[i m-1], i làchỉ số bất kỳ giữa 0 và m-1

Trang 13

+ 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’V‘ETNAM’V‘TNAM”, “NAM”, “AM”, “M”

I.2.I.2 So khớp chuỗ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 sokhớp chuỗi là một ữong những khâu cơ bản được sử dụng trong việc tiển khaiphần mềm và được thực hiện ưê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 Trongnhiề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 Pattem) 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[l n] có chiều dài n và khuôn mẫu là một mảng P[l m] có chiềudài m, các thành phần của s và p là các ký tự được rút từ một bảng chữ cái hữuhạn

Trang 14

Cho một chuỗi văn bản S[l n] và một chuỗi mẫu P[l m], tìm sự xuất hiệncủa p trong s chính là sự so khớp chuỗi giữa p và s Cả p và s đều thuộc X, z 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[l] = 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 x u ấ 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áccủ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)

Trang 15

Ví dụ: s = “braỉnaaranastraindshanb”—p = “ran”

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

Trong năm 1970, S.A Cook đã chứng minh một kết quả lý thuyết giúpsuy 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 gianthự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 đơngiả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ậttoán nhanh hơn nhiều

Tháng 6 - 1975, Alữed V Aho và Margret J Corasick đã giới thiệu thuậttoán so khớp chuỗi đa mẫu Aho Corasick trong tài liệu “Communications ofthe 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 đơngiản gần như thuật toán Brute Force có thời gian thực hiện tỉ lệ với m+n trongtài liệu IBM J Res develop - voi 31 no.2

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

Các thuật toán so khớp chuỗi thường được thực hiện theo 2 bước xử lýsau:

Trang 16

- Bước tiền xử lý (Preprocessing phase): Bao gồm xử lý mẫu và khỏi tạo cấu trúc dữ liệu.

- Bước tìm kiếm (Searching phase): Thực hiện việc tìm kiếm mẫu trong văn bản

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

Cĩ 4 cách tiếp cận chính của các thuật tốn so khớp chuỗi:

Thuật tốn cổ điển: Là các thuật tốn chủ yếu dựa vào sự so sánh giữacác kí tự Các t h u ậ t tốn điển hình bao gốm Brute Force, Nạve,

Thuật tốn máy tự động hậu tố: Là các thuật tốn sử dụng cấu trúc dữliệu hậu tố tự động để nhận ra tất cả các hậu tố của mẫu Các thuật tốn điểnhình bao gồm Knuth - Morris - Pratt, Boyer - Moore Horspool,

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

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

Độ phức tạp tính tố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ácnhau Độ phức tạp tính tốn tỉ lệ thuận với chiều dài của mẫu, chiều dài của vănbản và độ lớn của tập các ký tự

Trang 17

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

Phân loại các thuật toán so khớp dựa trên các đặc tính của mẫu có cácdạng: So khớp đơn mẫu, so khớp đa mẫu (mẫu là tập các xâu), so khớp mẫu mởrộng, so khớp biểu thức chính qui với hai hướng tiếp cận là so khớp chính xác

và xấp xỉ

a So khớp đơn mẫu

Cho xâu mẫu p độ dài m, p = PiP2 Pm, và xâu mẫu s độ dài n, s =SiS2 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 3xâ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

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ừ yị trí trong s để so khớpvớ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, songnhiề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ủahầ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

Trang 18

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ậttoán dựa ữê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 ramộ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

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, tuynhiê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ủamẫ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ênbản đơn giản hơn, hiệu quả hơn là BNDM Với những mẫu dài, thuật toánBOM được đánh giá là nhanh nhất

b So khớp đa mẫu

Cho một mẫu p gồm tập các từ khóa {wi w2, ,wk} và xâu vào s = S1S2

.s„ trên cùng bảng chữ A lìm sự xuất hiện của các từ khóa W i trong s.

Một cách đơn giản để tìm nhiều từ khóa ưong một xâu đích là sử dụngthuật toán so đơn mẫu nhanh nhất đối vói mỗi từ khóa Rõ ràng phương phápnày không hiệu quả khi số lượng từ khoá lớn

Trang 19

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ạikhông hiệu quả trong thực hành Một mở rộng của thuật toán Horspool là SetHorspool Cuối cùng là thuật toán Wu - Manber, một phương pháp pha trộngiữ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ứ icũ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ảngxác định trước Điều này thường được sử dụng trong các ứng dụng sinh - tinhọc, chẳng hạn tìm mẫu PROSITE

Trang 20

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ệncủ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.

Các vấn đề nảy sinh từ ba hướng mở rộng trên và những kết hợp từ bahướ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

lì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ảnnào đĩ T[l n], m < n Ví dụ: Cĩ thể tìm thấy vị trí của xâu “abc” ừong xâu

“abcababc” là 1 và 6

Phát biểu hình thức bài tốn như sau: Gọi X là một tập hữu hạn (finiteset) 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 đềunằm trong X- Tập X 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à (X = {0,1}) hay cĩ thể là tập các kí tự DNA ừong sinh học (X = {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-l)] vĩi P[l 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áchtiếp cận ngây thơ (Nạve string search)

Trang 21

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

Nạve string search n

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

Độ phức tạp trung bình của thuật tốn là 0(n + m) trong trường hợp xấunhấ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 tốn

So mẫu xấp xỉ là bài tốn tìm sự xuất hiện của một mẫu trong văn bản,ừong đĩ 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 đánhmá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ỗigen 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ể ừánh đượccác “lỗi” nên vấn đề so khớp xấp xỉ càng trở nên quan trọng

Trang 22

Đặc biệt, khi sử dụng các hệ thống trích rút thông tin, ngưòi dùng ngàynay 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ănbả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ênngười, địa chỉ

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

Vì yậ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 somẫ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à xâumẫu p độ dài m ữên cùng một bảng chữ A Tìm các vị trí trong văn bản khớpvói mẫu, cho phép nhiều nhất к 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 đầutiê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àmcủa mẫu p và số lỗi k, sau đó tạo otomat đa định hữu hạn Đây là hướngtiếp cận được quan tâm nhiều vì có độ phức tạp thời gian trong trườnghợ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)

Trang 23

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ấtnhiều thuật toán hiệu quả nhờ khai thác bản chất song song của các phéptoán bit trên một từ máy trong bộ vi xử lý Nói chung, song song bit đượcdùng để song song hoá các kỹ thuật khác, như tạo otomat đa định, lập matrận quy hoạch động Nói chung kỹ thuật này làm việc khá tốt với mẫungắn và tăng tốc đáng kể so với những cài đặt không tận dụng khả năngsong 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ạocá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ớpcủ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ằngcách áp dụng kỹ thuật so mẫu chính xác cho các mẫu nhỏ của mẫu Haithuật toán hiệu quả nhất theo tiếp cận này là PEX và ABNDM TrongPEX, mẫu được chia thành к + 1 đoạn và sắp xếp để so khớp đa mẫu trêncác đoạn này, YÌ í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, ừong đótái tạo otomat đa định hữu hạn cho so khớp xấp xỉ Nói chung, các thuậttoán sử dụng cơ chế lọc làm việc tốt

Trang 24

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ướngxấp xỉ Thuật toán MultiHash chỉ làm việc vói к = 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ỏ; MultiBPxâ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ứcchính qui có thể kể ra như: Thuật toán dựa trên quy hoạch động cho biểu thứcchí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ương 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ữahai 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 eưors), chẳng hạn “Việt Nam” và “ViệtNan”hay “Việtt Nan”, Có thể kể ra một số kỹ thuật phổ biến đo độ tương tự giữa haixâ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 , у khoảng cách soạn thảo Editdistance(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 у (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àoquy ướ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ácnhau, chẳng hạn như:

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

15

Trang 25

- 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

c o n h a y k h ú c c o n ( s u b s t r i n g o r f a c t o r ) c ủ a x â u X n ế u X = U W V ( u , Y c ó t h ể rỗng) Xâu w là khúc con chung của hai xâu X, y nếu w đồngthờ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ệuLCF(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 haixâ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àidã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 ứng dụng

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ủangành Tin học So khớp chuỗi được sử dụng rộng rãi ưong 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ư ừong tìm kiếm các mẫu trong DNA, protein,

- lì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 độchại trong lĩnh vực an toàn mạng và an toàn thông tin

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

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

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

Trang 26

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

độ dài là m (P[l m]) Các Phần tử của s và p là các ký tự trong tập hữu hạnalphabet z Ví dụ: z = {0,1} hoặc 2 = {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 trongchuỗ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ểntrong 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ấybắ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(l 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á tri dịch chuyển Còntrong 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 saocho sau số lần dịch chuyển đó tìm được chuỗi mẫu p trong chuỗi ban đầu s

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

Thuật toán so khớp chuỗi thô là thuật toán tìm tất cả các giá trị dịchchuyển, sử dụng một vòng lặp để kiểm ừa điều kiện P[l m] = S[s + +m] với mọi giá tri (n - m + 1) có thể của s

a Thuật toán so khớp chuỗi (S, P)

int n = strlen(S); int m =

Trang 27

b Mô tả thuậ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 khitì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à pkhá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ácnhau 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 thaotác so sánh như trên cho đến khi đạt được kết quả

c Ví dụ minh họa cho thuật toán

Giả sử chuỗi s = abcabaabcabac p

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

Trang 28

P :

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

- 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 sovớ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(l) vàbiết S(l) khác P(0) Đây là việc làm lặp đi lặp lại đối vớiS(l) 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ậttoán nhỏ hơn

2.2 Thuật toán so khớp chuỗ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ựchiện thuật toán là 0(n + m) dựa trên việc tính hàm tiền tố n[l, ,m] được tính toántrên chuỗi mẫu p trong thời gian O(m) Mảng n có thể giúp cho việc tính toánbước dịch chuyển một cách hiệu quả

a Thuật toán để tính hàm tiền tố II :

Giả sử có một chuỗi mẫu p có độ dài là m Tính hàm tiền tố của p theothuật toán sau:

Ngày đăng: 24/09/2015, 08:09

HÌNH ẢNH LIÊN QUAN

Hình 2.3 Kỹ thuật nhảy ký tự nếu  p   chứa  X   ở cuối - Khoá luận tốt nghiệp 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 38)
Hình 2.5 Ví dụ thuật toán Boyer - Moore - Khoá luận tốt nghiệp 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 39)
Hình 2.6 Ví dụ vai trò của hàm Last trong thuật toán Boyer - - Khoá luận tốt nghiệp 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 - (Trang 41)
Hình 2.7 Tìm kiếm chuỗi trong trường hợp xấu nhất - Khoá luận tốt nghiệp 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 45)
Bảng 2.3 Tính toán tiền xử lý BM và KMP - Khoá luận tốt nghiệp 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 47)
Bảng 2.5 Sự khác biệt giữa các thuật toán so khớp chuỗi - Khoá luận tốt nghiệp 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 49)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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